3

私は次のカスタマイズされたバインディングで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が、後者が削除された場合、オーバーライドは発生しません!

事前の人々に感謝します、どんな助けでも本当に感謝されます!

4

1 に答える 1

3

jxb:bindings node次のように、タグをタグ内にネストすることができましたjxb:bindings schemaLocation

<?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を指定して機能するものに更新しました(name = 'family'の要素が1つしかない限り、機能します)
于 2013-03-28T18:16:20.260 に答える