@XmlElement具有多个名称

@XmlElement具有多个名称,第1张

@XmlElement具有多个名称

注意:

Ilya给出的答案有效,但不能保证在所有JAXB实现中甚至在单个JAXB实现的版本中都有效。

@XmlElements
当决定要编组哪个元素取决于值的类型时,该注释很有用(请参阅:http : //blog.bdoughan.com/2010/10/jaxb-and-xsd-
choice-xmlelements.html
)。在您的用例中,
ResponseCode
ResultCode
元素都对应于type
String
,解组总是可以正常工作,但是要输出哪个元素是任意的。一些JAXB Impls可能有最后指定的获胜者,但其他人可能很容易获得第一个获胜者。


您可以利用进行以下 *** 作

@XmlElementRef

Java模型

ResponseAPI

我们将

responseCode
属性从type
更改
String
JAXBElement<String>
。将
JAXBElement
允许我们存储元素名称和值。

import javax.xml.bind.JAXBElement;import javax.xml.bind.annotation.*;@XmlRootElement@XmlAccessorType(XmlAccessType.FIELD)public class ResponseAPI{    @XmlElementRefs({        @XmlElementRef(name = "ResponseCode"),        @XmlElementRef(name = "ResultCode")    })    private JAXBElement<String> responseCode;    public JAXBElement<String> getResponseCode() {        return responseCode;    }    public void setResponseCode(JAXBElement<String> responseCode) {        this.responseCode = responseCode;    }}

对象工厂

@XmlElementRef
我们在
ResponseAPI
类中使用的注释对应于用
@XmlElementDecl
注释的类的注释
@XmlRegistry
。传统上称为此类,
ObjectFactory
但您可以根据需要调用它。

import javax.xml.bind.JAXBElement;import javax.xml.bind.annotation.*;import javax.xml.namespace.QName;@XmlRegistrypublic class ObjectFactory {    @XmlElementDecl(name="ResponseCode")    public JAXBElement<String> createResponseCode(String string) {        return new JAXBElement<String>(new QName("ResponseCode"), String.class, string);    }    @XmlElementDecl(name="ResultCode")    public JAXBElement<String> createResultCode(String string) {        return new JAXBElement<String>(new QName("ResultCode"), String.class, string);    }}
示范代码

input.xml

<responseAPI>    <ResponseCode>ABC</ResponseCode></responseAPI>

演示版

创建时,

JAXBContext
我们需要确保我们包括包含
@XmlElementDecl
批注的类。

import java.io.File;import javax.xml.bind.*;public class Demo {    public static void main(String[] args) throws Exception {        JAXBContext jc = JAXBContext.newInstance(ResponseAPI.class, ObjectFactory.class);        Unmarshaller unmarshaller = jc.createUnmarshaller();        File xml = new File("Scratch/src2/forum24554789/input.xml");        ResponseAPI responseAPI = (ResponseAPI) unmarshaller.unmarshal(xml);        ObjectFactory objectFactory = new ObjectFactory();        String responseCode = responseAPI.getResponseCode().getValue();        JAXBElement<String> resultCodeJAXBElement = objectFactory.createResultCode(responseCode);        responseAPI.setResponseCode(resultCodeJAXBElement);        Marshaller marshaller = jc.createMarshaller();        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);        marshaller.marshal(responseAPI, System.out);    }}

输出量

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><responseAPI>    <ResultCode>ABC</ResultCode></responseAPI>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5506698.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存