2017-02-19 2 views
9

Die Befehle wsimport und xjc (beide heruntergeladen als Teil von Java JDK) ignorieren die angegebene jaxb-Bindungsdatei, wenn die anvisierten wsdl/xsds unter bestimmten Pfaden platziert werden. Um dieses Verhalten zu reproduzieren, kann der Pfad C: \ a verwendet werden. Dieses Verzeichnis enthält die folgenden XSD-Dateien:xjc/wsimport - JAXB-Bindung ignoriert

nm.xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:include schemaLocation="name.xsd"/> 
<xs:annotation> 
    <xs:documentation xml:lang="en">Annotation</xs:documentation> 
</xs:annotation> 

<xs:element name="name" type="Name"/> 

<xs:complexType name="FName"> 
<xs:sequence> 
    <xs:element name="value" type="xs:string"/> 
</xs:sequence> 
</xs:complexType> 

<xs:complexType name="LName"> 
<xs:sequence> 
    <xs:element name="value" type="xs:string"/> 
</xs:sequence> 
</xs:complexType> 

</xs:schema> 

name.xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:complexType name="Name"> 
     <xs:sequence> 
      <xs:element name="FirstName" type="FName"/> 
      <xs:element name="LastName" type="LName"/> 
      <xs:element name="Date" type="xs:date"/> 
     </xs:sequence> 
</xs:complexType> 
</xs:schema> 

bindings.xjb:

<?xml version="1.0" encoding="UTF-8"?> 
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc"> 
    <jxb:globalBindings generateElementProperty="false" collectionType="indexed"> 
     <jxb:javaType name="java.util.Date" xmlType="xs:date" parseMethod="com.company.Converter.parseDate" printMethod="com.company.Converter.printDate"/> 
    </jxb:globalBindings> 
</jxb:bindings> 

Der folgende Befehl wird aus C verwendet: \ a JAXB die Artefakte zu erzeugen:

xjc -b bindings.xjb nm.xsd 

Die Bindung wird ignoriert. Die generierten Klassen verwenden weiterhin xs: date anstelle von java.util.Date und die Adapterklasse wird nicht generiert. Das Problem ist auch reproduzierbar, wenn wsimport mit einer WSDL verwendet wird, die das XSD importiert.

Beim Umbenennen von a zu d funktioniert die Bindung wie erwartet. Einige Pfade funktionieren und einige andere nicht. Dies scheint zufällig zu sein, kein Muster wurde identifiziert. Das Verhalten ist für einen bestimmten Pfad konsistent. Dies wurde auf Windows 10, Windows 7 und Unix-Maschinen reproduziert. Die verwendete Java-Version war 1.7.0_79. Der Name der Bindungsdateien scheint keinen Effekt zu haben, aber der Name der XSD-Dateien.

Was könnte dieses Problem verursachen und wie kann dies behoben werden? Warum beeinflusst der Pfad die Bindung? Gibt es Problemumgehungen, die dieses Problem vermeiden können, während sichergestellt wird, dass die Bindung nicht ignoriert wird, selbst wenn sich der Pfad ändert?

+1

ich Ihr Problem nicht reproduzieren kann. Zuallererst scheint etwas mit der Datei bindings.xjb nicht in Ordnung zu sein. Das schließende Tag für fehlt. Dann ist es seltsam, dieselbe Methode zum Parsen und zum Drucken zu haben (der Konverter sollte beispielsweise Converter.print als printMethod verwenden). Können Sie weitere Informationen darüber geben, welche Nebenversion von JDK7 Sie verwendet haben und aus welchem ​​Verzeichnis Sie den Befehl wsimport aufgerufen haben? Könnten Sie bitte die Ausgabe von 'tree/f' in das Verzeichnis, das Sie wsimport genannt haben, und die Ausgabe des Befehls wsimport selbst drucken? Vielen Dank! – boskoop

+0

Hallo Boskoop, danke für deine Antwort. Ich habe das globale Bindings-Tag und die printMethod-Methode (behebt das Problem nicht) behoben. Ich benutze jdk1.7.0_79. Ich werde versuchen, das Problem in einem Verzeichnis zu reproduzieren, das keine vertraulichen Informationen preisgibt und die Frage aktualisiert. –

+0

Versuch, mit Beispiel wsdls und xsds zu reproduzieren –

Antwort