Оберните XML элементов в подэлемент с JAXB / JAX-RS - PullRequest
1 голос
/ 10 марта 2020

У меня есть следующий класс, который должен быть сериализован / десериализован до XML.

@XmlRootElement(name = "nnxml")
@XmlAccessorType(XmlAccessType.FIELD)
public class InfoRequest {

    @XmlElement(name = "vendor_id")
    private String vendorId;

    @XmlElement(name = "vendor_authcode")
    private String authCode;
}

В настоящее время это дает мне XML, что является последовательным и правильным:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<nnxml>
    <vendor_id>vendor id</vendor_id>
    <vendor_authcode>auth code</vendor_authcode>
</nnxml>

Однако мне нужно обернуть элементы XML в другой элемент, например:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<nnxml>
  <info_request>
      <vendor_id>vendor id</vendor_id>
      <vendor_authcode>auth code</vendor_authcode>
  </info_request>
</nnxml>

Как мне обернуть вышеуказанные поля в элемент info_request? Нужно ли создавать что-то вроде внутреннего класса или есть более простой подход?

1 Ответ

0 голосов
/ 17 марта 2020

Один из подходов заключается в создании такого класса Wrapper и вставке вашего класса

@XmlRootElement(name = "nnxml")
@XmlAccessorType(XmlAccessType.FIELD)
public class Nnxml implements Serializable {

    @XmlElement(name = "info_request")
    private InfoRequest request;
}

Аннотации подкласса необязательны

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "info_request", propOrder = {
        "vendorId",
        "authCode"
})
class InfoRequest implements Serializable{
    @XmlElement(name = "vendor_id")
    private String vendorId;

    @XmlElement(name = "vendor_authcode")
    private String authCode;
}

Вывод

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<nnxml>
    <info_request>
        <vendor_id>vendor id</vendor_id>
        <vendor_authcode>auth code</vendor_authcode>
    </info_request>
</nnxml>
...