[英]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.value
的Object
。
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.