Я хочу использовать JAXB для
- , разархивировать xml в java-объект,
- переместить его обратно в 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>
Я использую следующие 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;
}
}
Код, который я использую для 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);
И это на самом деле не работает, я не могу даже разархивировать исходный XML.Но если я пытаюсь просто маршалировать POJO, где я просто устанавливаю поля в коде.Я получаю следующий результат:
<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>
Как мне избавиться от этого префикса ns3?