[英]JAXB unmarshaling with namespaces, but without prefix
I want to use JAXB to 我想使用JAXB
Here is the original XML: 这是原始的XML:
<customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://example.com">
<dataList>
<data xsi:type="keyValuePair">
<key>key1</key>
<value>val1</value>
</data>
<data xsi:type="keyValuePair">
<key>key2</key>
<value>val2</value>
</data>
</dataList>
<id>123</id>
</customer>
I am using the following POJOs: 我使用以下POJO:
@XmlRootElement(namespace = "http://example.com")
public class Customer {
private String id;
private List<KeyValueData> data;
public Customer(){}
@XmlElement
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlElement
@XmlElementWrapper(name="dataList")
public List<KeyValueData> getData() {
return data;
}
public void setData(List<KeyValueData> data) {
this.data = data;
}
}
public class KeyValueData {
private String type;
private String key;
private String value;
public KeyValueData(){}
@XmlElement
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
@XmlElement
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@XmlAttribute(namespace = "http://www.w3.org/2001/XMLSchema-instance" )
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
The code i am using for un/marshalling: 我用于un / marshalling的代码:
InputStream inputStream = new ByteArrayInputStream(xmlString.getBytes());
JAXBContext context = JAXBContext.newInstance(Customer.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Customer customer = (Customer) unmarshaller.unmarshal(inputStream);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(customer, System.out);
And this is not really working, i cannot even unmarshal the initial xml. 这不是真的有效,我甚至无法解组初始的xml。 But if i try just marshaling a POJO where i just set the fields in the code.
但是,如果我尝试只编组一个POJO,我只需在代码中设置字段。 I get the following result:
我得到以下结果:
<ns3:customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns3="http://example.com">
<dataList>
<data xsi:type="keyValuePair">
<key>key1</key>
<value>val1</value>
</data>
<data xsi:type="keyValuePair">
<key>key2</key>
<value>val2</value>
</data>
</dataList>
<id>123</id>
</ns3:customer>
How do i get rid of this ns3 prefix? 我如何摆脱这个ns3前缀?
I found a solution by adding the namespace definition in the package level in a 我通过在包中添加命名空间定义来找到解决方案
package-info.java package-info.java
@XmlSchema(namespace = "http://example.com", elementFormDefault = XmlNsForm.QUALIFIED)
package com.example;
(And remove it from the @XMLRootElement) (并从@XMLRootElement中删除它)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.