簡體   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