XML-аннотации Джексона: элемент String с атрибутом

Я не могу найти способ сделать Pojo Используя аннотации jackson-xml, которые будут генерировать xml следующим образом:

<Root>
    <Element1 ns="xxx">
        <Element2 ns="yyy">A String</Element2>
    </Element1>
</Root>

Ближайшим, к которому я могу прийти, является следующее:

Корневой POJO:

public class Root {
    @JacksonXmlProperty(localName = "Element1")
    private Element1 element1;

    public String getElement1() {
        return element1;
    }

    public void setElement1(String element1) {
        this.element1 = element1;
    }
}

Элемент 1 POJO:

public class Element1 {
    @JacksonXmlProperty(isAttribute = true)
    private String ns = "xxx";
    @JacksonXmlProperty(localName = "Element2")
    private Element2 element2;

    public String getElement2() {
        return element2;
    }

    public void setElement2(String element2) {
        this.element2 = element2;
    }
}

Элемент2 POJO:

public class Element2 {
    @JacksonXmlProperty(isAttribute = true)
    private String ns = "yyy";
    private String value;

    public String getValue() {
        return value;
    }

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

Но это возвращает обратно следующее:

<Root>
    <Element1 ns="xxx">
        <Element2 ns="yyy"><value>A String</value></Element2>
    </Element1>
</Root>

Теги элементов вокруг "A String" я не хочу отображать.

Ответы

Ответ 1

Вы должны использовать аннотацию JacksonXmlText для поля value.

public class Element2 
{
    @JacksonXmlProperty(isAttribute = true)
    private String ns = "yyy";
    @JacksonXmlText
    private String value;

    public String getValue() {
        return value;
    }

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

то XML будет выглядеть так:

<Root>
    <Element1 ns="xxx">
        <Element2 ns="yyy">A String</Element2>
    </Element1>
</Root>