2012-03-07 73 views
5

我有一個包含一些類似的xsd:如何在使用jaxb生成pojos時在xsd中處理具有相同名稱的元素和屬性?

<xs:complexType> 
    <xs:sequence minOccurs="0"> 
    <xs:element ref="HereIsTheProblem"/> 
    <xs:element ref="blaBla"/> 
    </xs:sequence> 
    <xs:attribute name="something" type="xs:string" use="required"> 
    <xs:annotation/> 
    </xs:attribute> 
    <xs:attribute name="somethingElse" type="xs:string"> 
    <xs:annotation/> 
    </xs:attribute> 
    <xs:attribute name="HereIsTheProblem" type="xs:string"> 
    <xs:annotation/> 
    </xs:attribute> 
</xs:complexType> 

現在,當我嘗試使用JAXB生成Java類它無法解析模式:

[ERROR] Element "{http://something.somemorething.com/etc/}HereIsTheProblem" shows up in more than one properties. 

如何在不進行任何修改解決此在架構中?

PS:我的JAXB版本是2.1.13

回答

7

您需要使用說明JAXB應該如何處理這個名稱衝突的綁定文件。例如,把這樣的事情在一個文件名爲類似bindings.xjb:

<jaxb:bindings version="2.1" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:com.fnf="http://www.fnf.com/xes"> 
    <jaxb:bindings schemaLocation="your schema location here" node="/xs:schema"> 
    <jaxb:bindings node="//XPath selector"> 
     <jaxb:property name="HereIsTheProblem2" /> 
    </jaxb:bindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

不能提供一個完整的解決方案沒有一個完整的模式

+1

是有必要指定一切的結合好?或者只有在jaxb處理休息時碰撞,請澄清。 – 2012-03-13 12:42:25

+0

不,只有碰撞是強制性的。您可以自由修改其餘部分,但這不是必需的。基本上你必須使用綁定來阻止jaxb生成有效的類。綁定的目的是消除相同的名稱。 – 2012-03-13 12:50:34

+1

非常感謝,我會從明天開始研究它,希望對此不會有進一步的問題。 – 2012-03-13 12:56:42

相關問題