Сериализация с помощью Jackson XmlMapper

Я пытаюсь сериализовать объект в строку xml с помощью Jackson XmlMapper. Мой объект:

@JacksonXmlRootElement(namespace = "http://www.w3.org/2001/XMLSchema", localName = "PersonRO")
public class PersonInfo {

    @JacksonXmlProperty(localName = "PersonID")
    private String personId;

    @JacksonXmlProperty(localName = "ReturnCode")
    private Integer errorCode;

    // getters, setters
}

Мне нужно добиться следующего xml на выходе:

        <PersonRO xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <PersonID>00000000000001</PersonID>
          <ReturnCode>150</ReturnCode>
        </PersonRO>

Задача кажется легкой, но в первую очередь у меня проблема с достижением нескольких пространств имен (xmlns:xsd, xmlns:xsi), а также с пустыми пространствами имен для полей, хотя они мне совсем не нужны.

Пока мой результат:

<PersonRO xmlns="http://www.w3.org/2001/XMLSchema">
  <PersonID xmlns="">00000000000001</PersonID>
  <ReturnCode xmlns="">150</ReturnCode>
</PersonRO>

Итак, как я могу добиться того же результата, что и выше, с помощью Jackson XmlMapper? (Я видел, что вы можете настроить XmlFactory и т. д., но не можете сделать это правильно...)

Если вам нужны какие-либо разъяснения, пожалуйста, дайте мне знать и заранее спасибо.


person George Lvov    schedule 03.05.2021    source источник


Ответы (1)


Я нашел ответ:

@JacksonXmlRootElement(localName = "PersonRO")
public class PersonInfo {

    @JacksonXmlProperty(isAttribute = true, localName = "xmlns:xsd")
    private final String xmlnsXsd = "http://www.w3.org/2001/XMLSchema";

    @JacksonXmlProperty(isAttribute = true, localName = "xmlns:xsi")
    private final String xmlnsXsi = "http://www.w3.org/2001/XMLSchema-instance";


    @JacksonXmlProperty(localName = "PersonID")
    private String personId;

    @JacksonXmlProperty(localName = "ReturnCode")
    private Integer errorCode;

    // getters, setters
}
person George Lvov    schedule 03.05.2021