gpt4 book ai didi

java - 当我尝试通过 gradle 进行 jaxb 绑定(bind)时,为什么无法解析 XSD 模式

转载 作者:行者123 更新时间:2023-12-02 12:17:44 24 4
gpt4 key购买 nike

我的 XSD 看起来像这样:

<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 绑定(bind):

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

它认为这个绑定(bind)是正确的。但我有以下错误:

[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

关于java - 当我尝试通过 gradle 进行 jaxb 绑定(bind)时,为什么无法解析 XSD 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com