2014-10-31 89 views
2

我是JAXB庫的新手,無法獲得將@XmlAttribute添加到現有代碼的解決方案。如何將屬性添加到JAXB中的元素

我有具有兩個元件(名稱和值),如下所示的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,所述的xsi:是已經越來越由JAXB自動生成類型。具有以下代碼的結構類別

@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類,它可以添加類型爲「值」元素(正如我們看到的元素的值是簡單的字符串對象)

回答

0

如果你只是想要一個type屬性,嘗試這樣的事情:

public class TypedValue { 

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

,而不是ObjectStruct.value

xsi:type是一個非常特殊的繼承。

0

如果您想自定義JAXB如何表示某種東西,則始終可以爲其創建XmlAdapter

Adaping字段/屬性

@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。

相關問題