2012-10-16 9 views
7

には、次のJAXBバインディングファイルは、アダプタクラスを作成しますが、EclipseとXMLSpyには、それが有効なませんと言う:JAXBバインディングファイル:予想通り検証エラー

<?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バインディングファイルを作成するにはどうすればよいですか?

答えて

8

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"<xs:any />の要素

公式バージョンには、他の(JAXBの)要素insinde globalBindingsを使用する必要があります。 SunのJAXB拡張が含まれている[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名前空間]を見ることができます。

+0

おかげで、私のテストは、あなたが正しいように見えることを示しています。私はここに問題を提出しました:http://java.net/jira/browse/JAXB-924自由に投票したりコメントしたりしてください。 – Puce

+0

投票して視聴した:) –

+1

回避策はありますか? – l3dx

1

明らかに、バグはまだ修正されていません。 <xsd:annotation><xsd:documentation>Use built in date conversion support</xsd:documentation>のヒントは、私が「サポートされていないバインドされたネームスペースhttp://www.w3.org/2001/XMLSchema」(翻訳された)エラーを受け取ったため、私にとってはうまくいきませんでした。代わりに、次の構文を使用してください:

<jaxb:globalBindings> 
    <xjc:javaType 
    name="org.joda.time.LocalDate" 
    xmlType="xs:date" 
    adapter="org.example.XmlDateAdapter" /> 
</jaxb:globalBindings> 
0

私のために、それはxsからxsdに接頭辞を変更するために働いた。理由は私のwsdlがxsd-prefixで名前空間を定義しているということしか想像できません。回避策として

0

、単に<globalBindings>

<xsd:any/>として最後の子を追加ここではサンプルです:

<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エディタで私のために動作します。

0

私は同じ間違いを得た、と私はjaxb(のxmlns:JAXB =「http://java.sun.com/xml/ns/jaxb」)から<javaType>要素の接頭辞を変更することによってそれを解決しxjcへ(xmlns:xjc = "http://java.sun.com/xml/ns/jaxb/xjc")。だから、エラーがこのコードのために登場して

<?xml version="1.0" encoding="UTF-8"?> 
<jaxb:bindings xmlns="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
      xmlns:jaxb="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 
      http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd" 
      version="2.1"> 
    <jaxb:bindings schemaLocation="sci_paper_no_rdfa.xsd"> 
     <jaxb:globalBindings> 
      <jaxb:javaType name="java.util.Date" xmlType="xs:date" 
       parseMethod="rs.ac.uns.ftn.jaxb.util.MyDataTypeConverter.parseDate" 
       printMethod="rs.ac.uns.ftn.jaxb.util.MyDataTypeConverter.printDate"/> 
     </jaxb:globalBindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

と固定のコードは次のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<jaxb:bindings xmlns="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
      xmlns:jaxb="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 
      http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd" 
      version="2.1"> 
    <jaxb:bindings schemaLocation="sci_paper_no_rdfa.xsd"> 
     <jaxb:globalBindings> <!-- note that javaType now has xjc prefix --> 
      <xjc:javaType name="java.util.Date" xmlType="xs:date" 
       parseMethod="rs.ac.uns.ftn.jaxb.util.MyDataTypeConverter.parseDate" 
       printMethod="rs.ac.uns.ftn.jaxb.util.MyDataTypeConverter.printDate"/> 
     </jaxb:globalBindings> 
    </jaxb:bindings> 
</jaxb:bindings> 
関連する問題