2012-11-29 150 views
3

我使用JAXB具有以下個性結合纔是硬道理數據類型:JAXB - 一個元素

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" version="2.0" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jaxb:extensionBindingPrefixes="xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <jaxb:globalBindings typesafeEnumMaxMembers="2000"> 
     <jaxb:serializable /> 
    </jaxb:globalBindings> 
     <jaxb:bindings schemaLocation="test.xsd" node="/xs:schema//xs:complexType[@name='EN']//xs:element[@name='family']"> 
      <jaxb:property> 
       <jaxb:baseType name="java.lang.String" /> 
      </jaxb:property> 
     </jaxb:bindings> 
</jaxb:bindings> 

來處理這個模式(test.xsd):

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
    <xsd:complexType name="EN" mixed="true"> 
     <xsd:complexContent> 
     <xsd:extension base="ANY"> 
      <xsd:sequence> 
       <xsd:choice minOccurs="0" maxOccurs="unbounded"> 
        <xsd:element name="family" type="en.family"/> 
       </xsd:choice> 
      </xsd:sequence> 
     </xsd:extension> 
     </xsd:complexContent> 
    </xsd:complexType> 
    <xsd:complexType name="en.family" mixed="true"> 
     <xsd:complexContent> 
     <xsd:restriction base="ENXP"> 
     </xsd:restriction> 
     </xsd:complexContent> 
    </xsd:complexType> 
    <xsd:complexType name="ENXP" mixed="true"> 
     <xsd:complexContent> 
     <xsd:extension base="ST"> 
     </xsd:extension> 
     </xsd:complexContent> 
    </xsd:complexType> 
    <xsd:complexType name="ST" mixed="true"> 
     <xsd:complexContent> 
     <xsd:restriction base="ED"> 
     </xsd:restriction> 
     </xsd:complexContent> 
    </xsd:complexType> 
    <xsd:complexType name="ED" mixed="true"> 
     <xsd:complexContent> 
     <xsd:extension base="BIN"> 
     </xsd:extension> 
     </xsd:complexContent> 
    </xsd:complexType> 
    <xsd:complexType name="BIN" abstract="true" mixed="true"> 
     <xsd:complexContent> 
     <xsd:extension base="ANY"> 
     </xsd:extension> 
     </xsd:complexContent> 
    </xsd:complexType> 
    <xsd:complexType name="ANY" abstract="true"> 
     <xsd:attribute name="nullFlavor" type="xsd:string" use="optional"> 
     </xsd:attribute> 
    </xsd:complexType> 
</xsd:schema> 

我遇到這個問題:

[ERROR] compiler was unable to honor this property customization. It is attached to a wrong place, or its inconsistent with other bindings. 
    line 6 of file://home/user/test/jaxbelem_binding.xml 

[ERROR] (the above customization is attached to the following location in the schema) 
    line 7 of file://home/user/test/test.xsd 

Failed to parse a schema. 

我的綁定文件有什麼問題? 它正在約jaxb:property,但是當後者被刪除,沒有重寫發生!

任何幫助將非常感謝,在此先感謝人!

+0

我tryied這也:\t javax.xml.bind .DatatypeConverter.printString「/> 但我得到了同樣的錯誤」編譯器無法兌現此javaType自定義「 – Ben

回答

2

我有運氣嵌套jxb:bindings schemaLocation標籤這樣的內部jxb:bindings node標籤:

<?xml version="1.0" encoding="US-ASCII" ?> 
<jxb:bindings version="2.0" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" 
> 

    <jxb:bindings schemaLocation="test.xsd"> 
     <jxb:bindings node="//xs:element[@name='family']"> 
      <jxb:property > 
       <jxb:baseType name="java.lang.String"></jxb:baseType> 
      </jxb:property> 
     </jxb:bindings> 
    </jxb:bindings> 
</jxb:bindings> 

也:

  • 而你的注意XPath來「家庭」的作品,似乎過於複雜。我把它更新到一個工程給你的例子XSD(只要有只有一個名稱=「家庭」,將工作元素)