用JAXB / JAX-RS将XML元素包装在子元素中

问题描述 投票:1回答:1

我有以下类别,应将其序列化/反序列化为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元素中?我是否必须创建类似内部类的东西,还是有更简单的方法?

java xml jaxb jax-rs
1个回答
0
投票

一种方法是创建这样的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>
© www.soinside.com 2019 - 2024. All rights reserved.