2017-09-04 34 views
0

我的XSD結合看起來是這樣的:爲什麼不能解析XSD架構當我嘗試JAXB通過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> 

gradle這個腳本生成的代理Java類。 一切正常!

現在我想補充以下標註自動當我生成代理類(我已經寫了適配器和如何將其添加到具體的領域)。

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

解決方案:所以我寫了JAXB綁定:

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

它認爲這種結合是正確的。但我有以下錯誤:

[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 

這是gradle這個腳本:

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' 

     ) 

    } 
} 

更新1.

我改變路徑,但我有同樣的錯誤。

更新2

我固定的xmlns:XS,也是我所添加的xmlns:JXB。最終的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 

回答

1

嘗試:

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

的XPath表達式被施加到模式文檔的根。你錯過了xs:schema

+0

我有同樣的錯誤。 – grep

+0

@grep還解決這個問題:'xmlns:xs =「http://www.w3.org/2001/XMLSchem」'。 – lexicore

+1

@grep XML模式名稱空間「http:// www.w3.org/2001/XMLSchema」。最後你錯過了'a'。 – lexicore

相關問題