2017-09-04 1 views
0

Meine XSD Bindung sieht wie folgt aus:warum nicht XSD-Schema analysieren kann, wenn ich jaxb versuchen über die gradle

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
... 
    <xs:element name="person"> 
    <xs:complexType> 
     ... 
     <xs:attribute name="first_name" use="optional" type="xs:string"/> 
    </xs:complexType> 
    </xs:element> 
... 
</xs:schema> 

Ich habe schrieb gradle Skript Proxy-Java-Klassen zu generieren. Alles funktioniert gut!

Jetzt mag ich die folgende Anmerkung automatisch hinzufügen, wenn ich Proxy-Klassen erzeugen (ich habe geschrieben Adapter und was dies für das konkrete Feld hinzufügen).

@XmlJavaTypeAdapter(value=StringHashFunctionAdapter.class, type=String.class) 

Lösung: Also schrieb ich jaxb Bindung:

<bindings 
    xmlns="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xs="http://www.w3.org/2001/XMLSchem" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    xmlns:retep="http://retep.org/xml/ns/retepTools" 
    version="2.0"> 

    <bindings schemaLocation="XMLreq.xsd" node="/xs:element[@name='person']/xs:complexType/xs:attribute[@name='first_name']" > 
     <property> 
      <baseType> 
      <xjc:javaType adapter="org.example.StringHashFunctionAdapter"/> 
      </baseType> 
     </property> 
    </bindings> 
</bindings> 

Es Denken Sie diese Bindung korrekt ist. aber ich habe die folgende Fehlermeldung:

[ERROR] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:xjc] [ERROR] XPath evaluation of "/xs:element[@name='person']/xs:complexType/xs:attribute[@name='first_name']" results in empty target node 

das ist gradle Skript:

dependencies { 
    xsd2java "com.sun.xml.bind:jaxb-xjc:2.2.6" 
    xsd2java "com.sun.xml.bind:jaxb-impl:2.2.6" 
} 

task xsd2java() { 
    doLast { 
     jaxbTargetDir.mkdirs() 
     ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.xsd2java.asPath) 
     ant.jaxbTargetDir = jaxbTargetDir 
     ant.xjc(
       destdir: '${jaxbTargetDir}', 
       package: 'org.example.request', 
       binding:'src/main/resources/bindings.jxb', 
       schema: 'src/main/resources/XMLreq.xsd' 

     ) 

    } 
} 

UPDATE 1.

I-Pfad geändert haben, aber ich habe denselben Fehler.

UPDATE 2

Ich habe Xmlns fixed: xs und auch habe ich Xmlns hinzu: JXB. Endgültige XML:

<jxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
    version="2.1"> 
    <bindings schemaLocation="XMLreq.xsd" node="/xs:schema/xs:element[@name='person']/xs:complexType/xs:attribute[@name='first_name']" > 
      <xjc:javaType adapter="org.example.StringHashFunctionAdapter" name="java.lang.String" /> 
    </bindings> 
</jxb:bindings 

Antwort

1

Versuchen:

/xs:schema/xs:element[@name='person']/xs:complexType/xs:attribute[@name='first_name']

Der XPath-Ausdruck wird an die Wurzel des Schemadokuments angewendet. Du fehlst xs:schema.

+0

Ich habe den gleichen Fehler. – grep

+0

@grep Fix auch das: 'xmlns: xs =" http://www.w3.org/2001/XMLSchem "'. – lexicore

+1

@grep Der XML-Schema-Namespace, 'http: // www.w3.org/2001/XMLSchema'. Du vermisst am Ende 'a'. – lexicore

Verwandte Themen