Java-объект в преобразование XML с использованием JAXB - проблема с аннотациями - PullRequest
0 голосов
/ 27 ноября 2018
public class RequestXml // this pojo for RequestXML
{
    private Contact[] Contact;

    public Contact[] getContact ()
    {
        return Contact;
    }

    @XmlElement(name="Contact")
    public void setContact (Contact[] Contact)
    {
        this.Contact = Contact;
    }
}

еще одно pojo

public class Contact  // this class is for contact
{
    private String content;
    private String role;

    public String getContent ()
    {
        return content;
    }

    @XmlElement(name="content")
    public void setContent (String content)
    {
        this.content = content;
    }   

    public String getRole ()
    {
        return role;
    }

    @XmlElement(name="role")
    public void setRole (String role)
    {
        this.role = role;
    }
}

Поскольку я получаю результат, как показано ниже, пока маршаллинг

<Contact role="firstUser"/>
<Contact role="secondUser"/>
<Contact role="LastUser"/>

Ниже приведен ожидаемый результат:

<Contact role="firstUser">aaaa</Contact>
<Contact role="secondUser">bbbb</Contact>
<Contact role="LastUser">cccc</Contact>

Пожалуйста, помогите мне в этом.

1 Ответ

0 голосов
/ 27 ноября 2018

Чтобы упорядочить поле как контент, используйте аннотацию @XmlValue.Для указания его в качестве атрибута используйте @XmlAttribute.Вот так выглядит Contract POJO вместе с моим тестом:

@XmlRootElement
public class RequestXml {
    private Contact[] contact;

    @XmlElement(name = "Contact")
    public Contact[] getContact() {
        return contact;
    }

    public void setContact(Contact[] Contact) {
        this.contact = Contact;
    }
}

public class Contact {
    private String content;
    private String role;

    public Contact(String content, String role) {
        this.content = content;
        this.role = role;
    }

    @XmlValue
    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    @XmlAttribute
    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }
}

Тест:

public class JaxbTest {

    @Test
    public void testObjectToXml() throws JAXBException {
        RequestXml requestXml = new RequestXml();
        requestXml.setContact(new Contact[]{new Contact("aaa", "bbb")});
        JAXBContext jaxbContext = JAXBContext.newInstance(RequestXml.class);
        Marshaller marshaller = jaxbContext.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(requestXml, System.out);
    }
}

Это обеспечивает следующий вывод:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<requestXml>
    <Contact role="bbb">aaa</Contact>
</requestXml>

РЕДАКТИРОВАТЬ: Кроме того, см. В чем разница между использованием @XmlElement перед полем и до объявления получателя? для разницы аннотирования геттеров / установщиков и полей.

...