为什么不能解析XSD架构当我尝试JAXB通过gradle这个
问题描述:
我的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
答
尝试:
/xs:schema/xs:element[@name='person']/xs:complexType/xs:attribute[@name='first_name']
的XPath表达式被施加到模式文档的根。你错过了xs:schema
。
我有同样的错误。 – grep
@grep还解决这个问题:'xmlns:xs =“http://www.w3.org/2001/XMLSchem”'。 – lexicore
@grep XML模式名称空间“http:// www.w3.org/2001/XMLSchema”。最后你错过了'a'。 – lexicore