[英]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.