繁体   English   中英

如何在JAXB中向元素添加属性

[英]How to add Attribute to Element in JAXB

我是JAXB库的新手,无法获得将@XmlAttribute添加到现有代码的解决方案。

我有一个XML,其中包含两个元素(名称和值),如下所示:

<ns4:Envelope xmlns:ns2="xyz/123" xmlns:ns3="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns4="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns6="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns5="http://www.w3.org/2001/XMLSchema" xmlns:abc="abc">
    <ns4:Header>
        <ns2:ID ns4:mustUnderstand="1">testId</ns2:ID>
    </ns4:Header>
    <ns4:Body>
        <ns2:Set>
            <List ns3:arrayType="abc:hash[1]">
                <Struct>
                    <Name>Interval</Name>
                    <Value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:int">10</Value>
                </Struct>
            </List>
        </ns2:Set>
    </ns4:Body>
</ns4:Envelope>

在上述XML中,JAXB已自动生成xsi:type。 具有以下代码的Struct类

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Struct", propOrder = {
    "name",
    "value"
})
public class Struct {

    @XmlElement(name = "Name", required = true)
    protected String name;
    @XmlElement(name = "Value", required = true)
    protected Object value;

    public String getName() {
        return name;
    }
    public void setName(String value) {
        this.name = value;
    }

    public Object getValue() {
        return value;
    }

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

如您所见,没有在上面的类中设置类型。 我希望有一些规定可以根据用户定义添加类型,而不是根据数据类型生成。

我不确定如何将属性添加到该Struct类,该类可以将类型添加到“ Value”元素(如我们所见,Value元素是简单字符串对象)

如果只需要type属性,请尝试以下操作:

public class TypedValue {

    @XmlAttribute
    protected String type;
    @XmlValue
    protected String value;
}

而不是Struct.valueObject

xsi:type对于继承是非常特殊的事情。

如果要自定义JAXB表示的XmlAdapter ,则可以始终为其创建XmlAdapter

修改字段/属性

@XmlJavaTypeAdatper批注用于引用XmlAdapter

@XmlElement(name = "Value", required = true)
@XmlJavaTypeAdapter(ValueAdapter.class)
protected Object value;

XmlAdapter

负责在您的域模型中的实际对象和您想要封送以获得所需XML的对象之间进行转换。

public class ValueAdapter extends XmlAdapter<MyAdaptedObject, Object> {
    ...
}

MyAdaptedObject

是一种POJO,将封送您所需的XML。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM