2012-10-16 10 views
7

Die folgende JAXB Bindungsdatei erstellt die Adapter-Klassen wie erwartet, aber Eclipse und XMLSpy sagen, es ist nicht gültig:JAXB Bindungen Datei: Validierungsfehler

<?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> 

Der Fehler ist so etwas wie:

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. 

Beachten Sie, dass die JAXB Bindings-Schemadatei Elemente der obersten Ebene mit dem Präfix "jaxb" referenziert.

Wie kann ich eine gültige JAXB Bindings Datei erstellen?

Antwort

8

http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd ist falsch, aber niemand kann etwas dagegen tun es :(

Das Problem bei der Definition von globalBindings globalen Elements ist es wie folgt aussieht:.

<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> 

Aber es sollte so aussehen dies:.

<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> 

Mind the minOccurs="0" maxOccurs="unbounded" auf <xs:any /> Element

012.351.

So die offizielle Version zwingt Sie verwenden andere (als JAXB) Element insinde globalBindings. Sie können sich den Namespace [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] anzeigen lassen, der Suns Erweiterungen für JAXB enthält.

+0

Danke, meine Tests zeigen, dass Sie korrekt zu sein scheinen. Ich habe hier ein Problem angemeldet: http://java.net/jira/browse/JAXB-924 Fühlen Sie sich frei zu wählen und/oder zu kommentieren. – Puce

+0

gewählt und angesehen :) –

+1

Irgendwelche Abhilfe? – l3dx

1

Anscheinend ist der Fehler immer noch nicht behoben. Der Hinweis mit <xsd:annotation><xsd:documentation>Use built in date conversion support</xsd:documentation> hat bei mir nicht funktioniert, da ich einen "nicht unterstützten Binding Namespace http://www.w3.org/2001/XMLSchema" (übersetzt) ​​Fehler bekommen habe. Stattdessen funktionierte die folgende Syntax:

0

für mich funktionierte es, das Präfix von Xs zu Xsd zu ändern. ich kann mir nur vorstellen, dass der wsdl den namespace mit dem xsd-prefix definiert.

0

Als Abhilfe, fügen Sie einfach <xsd:any/> zuletzt Kinder <globalBindings>

Hier ist ein Beispiel:

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

Dies funktioniert für mich in STS 3.7.3 XML-Editor bei der Validierung.

0

bekam ich den gleichen Fehler, und ich löste es durch aus dem Präfix von <javaType> Elementwechsel jaxb (xmlns: jaxb = „http://java.sun.com/xml/ns/jaxb“) zu xjc (xmlns: xjc = "http://java.sun.com/xml/ns/jaxb/xjc").

So wird der Fehler für diesen Code wurde mit:

<?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> 

und der festen Code sieht wie folgt aus:

<?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>