Джексон FasterXML преобразуется в POJO с пространствами имен

Я хочу использовать FasterXML для

  1. преобразовать xml в объект java,
  2. преобразовать его обратно в xml
  3. и произвести точно такой же вывод с пространствами имен

Вот исходный 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:

@JacksonXmlRootElement(namespace = "http://example.com")
public class Customer {

  @JacksonXmlProperty
  private String id;
  @JacksonXmlProperty
  @JacksonXmlElementWrapper(localName = "dataList")
  private List<KeyValueData> data;

  public Customer(){}

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public List<KeyValueData> getData() {
    return data;
  }

  public void setData(List<KeyValueData> data) {
    this.data = data;
  }
}

public class KeyValueData {

  @JacksonXmlProperty(isAttribute = true, namespace = "http://www.w3.org/2001/XMLSchema-instance")
  private String type;
  @JacksonXmlProperty
  private String key;
  @JacksonXmlProperty
  private String value;

  public KeyValueData(){}

  public String getKey() {
    return key;
  }

  public void setKey(String key) {
    this.key = key;
  }

  public String getValue() {
    return value;
  }

  public void setValue(String value) {
    this.value = value;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

}

Код, который я использую для отображения:

XmlMapper mapper = new XmlMapper();

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Customer initiatePaymentRequest = mapper.readValue(xmlString, Customer.class);

logger.info(mapper.writeValueAsString(initiatePaymentRequest));

Это приводит к следующему выводу XML с неправильным пространством имен.

<Customer>
  <id>123</id>
  <dataList>
    <data wstxns1:type="keyValuePair" xmlns:wstxns1="http://www.w3.org/2001/XMLSchema-instance">
      <key>key1</key>
      <value>val1</value>
    </data>
    <data wstxns2:type="keyValuePair" xmlns:wstxns2="http://www.w3.org/2001/XMLSchema-instance">
      <key>key2</key>
      <value>val2</value>
    </data>
  </dataList>
</Customer>

Как добавить пространство имен "http://example.com" и использовать префикс "xsi" вместо wstxns1, wstxns2 ...


person taygetos    schedule 15.06.2019    source источник
comment
У меня сейчас такая же проблема. Ты разобрался?   -  person Jamie Snipes    schedule 20.11.2019
comment
К сожалению, нет, я изменил структуру   -  person taygetos    schedule 21.11.2019
comment
Я думаю, что ответил на это для вас здесь: pojo_namespaces   -  person Jamie Snipes    schedule 10.12.2019