11

次の JAXB バインディング ファイルは期待どおりに Adapter クラスを作成しますが、Eclipse と XMLSpy はそれが無効であると言います:

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


        <jxb:globalBindings>
            <jxb:javaType name="java.util.Calendar" xmlType="xs:date" parseMethod="javax.xml.bind.DatatypeConverter.parseDate"
                printMethod="javax.xml.bind.DatatypeConverter.printDate" />
            <jxb:javaType name="java.util.Calendar" xmlType="xs:dateTime" parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
                printMethod="javax.xml.bind.DatatypeConverter.printDateTime" />
            <jxb:javaType name="java.util.Calendar" xmlType="xs:time" parseMethod="javax.xml.bind.DatatypeConverter.parseTime"
                printMethod="javax.xml.bind.DatatypeConverter.printTime" />
        </jxb:globalBindings>

</jxb:bindings>

エラーは次のようなものです。

cvc-complex-type.2.4.b: The content of element 'jxb:globalBindings' is not complete. One of '{"http://java.sun.com/xml/ns/jaxb":javaType, "http://java.sun.com/xml/ns/jaxb":serializable, WC[##other:"http://java.sun.com/xml/ns/jaxb"]}' is expected.

JAXB バインディング スキーマ ファイルは、接頭辞「jaxb」を使用してトップレベルの要素を参照することに注意してください。

有効な JAXB バインディング ファイルを作成するにはどうすればよいですか?

4

5 に答える 5

12

http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsdは間違っていますが、誰もそれについて何もできません:(

問題は、globalBindingsグローバル要素の定義にあります。次のようになります。

  <xs:element name="globalBindings">
    <xs:annotation>
      <xs:documentation>Customization values defined in global scope.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence minOccurs="0">
        <xs:element ref="jaxb:javaType" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="jaxb:serializable" minOccurs="0" />
        <xs:any namespace="##other" processContents="lax">
          <xs:annotation>
            <xs:documentation>allows extension binding declarations to be specified.</xs:documentation>
          </xs:annotation>
        </xs:any>
      </xs:sequence>
      ...
    </xs:complexType>

ただし、次のようになります。

  <xs:element name="globalBindings">
    <xs:annotation>
      <xs:documentation>Customization values defined in global scope.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence minOccurs="0">
        <xs:element ref="jaxb:javaType" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="jaxb:serializable" minOccurs="0" />
        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
          <xs:annotation>
            <xs:documentation>allows extension binding declarations to be specified.</xs:documentation>
          </xs:annotation>
        </xs:any>
      </xs:sequence>
      ...
    </xs:complexType>

minOccurs="0" maxOccurs="unbounded"on<xs:any />要素に注意してください。

したがって、公式バージョンでは、(JAXB 以外の) 要素を insinde 内で使用する必要がありますglobalBindings。[ http://jaxb.java.net/nonav/2.0/binding-customization/http.java.sun.com.xml.1306680588/index.html](http://java.sun.com/ xml/ns/jaxb/xjc名前空間) には、JAXB に対する Sun の拡張機能が含まれています。

于 2012-10-16T12:28:55.957 に答える
2

<xsd:any/>回避策として、単に最後の子として追加します<globalBindings>

サンプルは次のとおりです。

<globalBindings>
    <javaType name="java.util.Calendar" xmlType="xsd:time"
        parseMethod="javax.xml.bind.DatatypeConverter.parseTime"
        printMethod="javax.xml.bind.DatatypeConverter.printTime" />
    <xsd:any/>
</globalBindings>

これは、検証中に STS 3.7.3 xml エディターで機能します。

于 2016-04-14T09:16:37.307 に答える