2010-08-15 83 views
3

我有一個xsd定義(從www.tmforum.org ossj共用API V1.5)XSD anytype類型和JAXB

<element name="primaryKey" nillable="false"> 
    <complexType mixed="false">     
     <complexContent mixed="false"> 
     <extension base="anyType"/>     
     </complexContent> 
    </complexType> 
</element> 

和想如下生成XML

<ossj-co-v1-5:primaryKey>mykey</ossj-co-v1-5:primaryKey> 

的使用xjc從xsd生成的PrimaryKey類需要將DOM元素存儲在列表中(請參閱生成的PrimaryKey類的底部「。」myKey「此處是TextNode,並且由於它不是DOM元素,因此無法將其添加到xjc生成的PrimaryKey類。我應該如何繼續獲得所需的輸出?

下面是從XSD

@XmlAccessorType(XmlAccessType.FIELD) 
    @XmlType(name = "", propOrder = { 
    "any" 
    }) 
public static class PrimaryKey { 

    @XmlAnyElement 
    protected List<Element> any; 
    @XmlAnyAttribute 
    private Map<QName, String> otherAttributes = new HashMap<QName, String>(); 

    public List<Element> getAny() { 
     if (any == null) { 
      any = new ArrayList<Element>(); 
     } 
     return this.any; 
    } 


    public Map<QName, String> getOtherAttributes() { 
     return otherAttributes; 
    } 

} 
+0

你需要什麼類型的屬性值來保存任何屬性,並且您確定需要手動修改生成的模型的解決方案嗎? – 2010-08-16 19:29:09

+0

它應該只是保存一個字符串值。我不想手動修改生成的類,因爲它們是編譯時生成的。擴展生成的類或使用xjb綁定應該沒問題。但我正在尋找例子。 – 2010-08-17 05:48:09

回答

3

以下對象模型將您的方案工作產生的PrimaryKey類。我將嘗試挖掘合適的架構自定義來生成這些對象模型。

選項#1

你可以讓你的代碼如下所示。這意味着元素「primaryKey」會導致對象PrimaryKey被實例化,並在任何屬性上設置相應的文本內容。

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = {"any" }) 
public static class PrimaryKey { 

    @XmlValue 
    protected String any; 

    @XmlAnyAttribute 
    private Map<QName, String> otherAttributes = new HashMap<QName, String>(); 

    public List<Element> getAny() { 
     if (any == null) { 
      any = new ArrayList<Element>(); 
     } 
     return this.any; 
    } 


    public Map<QName, String> getOtherAttributes() { 
     return otherAttributes; 
    } 

} 

選項#2

如果你想要一個外部對象有對應的PrimaryKey一個String屬性,你可以做到以下幾點:

@XmlAccessorType(XmlAccessType.FIELD) 
public class Root { 

    // @XmlElement is implied 
    private String primaryKey; 

} 
1

的選項#1 getAny( )不能返回String,因爲簽名返回List。

選項#2確實工程。謝謝!

這裏是我的OSSJ代碼被修改的外觀:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "ManagedEntityKey", propOrder = { 
    "applicationContext", 
    "applicationDN", 
    "type", 
    "primaryKey" 
}) 
public class ManagedEntityKey { 
    @XmlElement(required = true) 
    protected String primaryKey; 
    //protected ManagedEntityKey.PrimaryKey primaryKey; 

而且ofcourse的getter和setter方法的簽名應該進行修改。

+0

這最終完全爲你工作?但是當我喜歡你的時候,我遇到了同樣的問題 - 即使做了setter和getters - 它現在打破了一切 - 是的,我可以獲得主鍵標記的值,但「type」屬性現在不存在 – JGlass 2017-10-26 15:18:38