java JAXB自定义绑定前缀必须解析为命名空间
我试图使用maven-jaxb2-plugin从WSDL生成java类,但没有成功。WSDL包含一个名为stringArray的complextype的两个定义,所以我试图创建一个自定义绑定,这样两个类在创建时不会冲突。问题是我一直都会遇到这样的错误:
XPath: javax.xml.transform.TransformerException: Prefix must resolve to a namespace: wsdl
我的Maven Maven-jaxb2-plugin插件配置如下:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.14.0</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<generateDirectory>${project.basedir}/src/main/java</generateDirectory>
<generatePackage>com.arkdia.seus.service.stamping.xml.invoice.cancel.implementation.finkok</generatePackage>
<schemas>
<schema>
<url>https://demo-facturacion.finkok.com/servicios/soap/cancel.wsdl</url>
</schema>
</schemas>
<bindingDirectory>${project.basedir}/src/main/resources/finkok/bindings</bindingDirectory>
<bindingIncludes>
<include>bind.xjb</include>
</bindingIncludes>
</configuration>
</plugin>
我的束缚。xjb具有以下特点:
<jaxb:bindings version="1.0"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:jaxb="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"
jaxb:extensionBindingPrefixes="xjc">
<jaxb:bindings
node="/wsdl:definitions[@targetNamespace='http://facturacion.finkok.com/cancel']/wsdl:types/xs:schema[@targetNamespace='http://facturacion.finkok.com/cancellation']">
<jaxb:bindings
node="/xs:complexType[@name='stringArray']">
<jaxb:factoryMethod name="CancelStringArray" />
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
我用这个online tool测试了XPath,它似乎是正确的,但是当我用Maven编译mi代码时,我得到了前面提到的错误
我做错了什么
编辑:
WSDL定义为here
多亏了@LMC,我注意到一个名称空间丢失了。xjb添加了它,但现在我得到了这个错误:
xpath evaluation of results in empty target node
编辑2:
根据@LMC的建议,我更新了绑定。xjb文件,以包括架构位置。但现在,即使我为conflictind复杂类型定义了一个新的类名,我还是会遇到以下错误:
two declarations cause a collision in the ObjectFactory class
我的新绑定。xjb看起来像这样
<jaxb:bindings version="1.0"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:jaxb="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"
jaxb:extensionBindingPrefixes="xjc">
<jaxb:bindings
schemaLocation="https://demo-facturacion.finkok.com/servicios/soap/cancel.wsdl"
node="/wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://facturacion.finkok.com/cancellation']/xs:complexType[@name='stringArray']">
<jaxb:class name="CancellationStringArray" />
</jaxb:bindings>
<jaxb:bindings
schemaLocation="https://demo-facturacion.finkok.com/servicios/soap/cancel.wsdl"
node="/wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://facturacion.finkok.com/cancel']/xs:complexType[@name='stringArray']">
<jaxb:class name="CancelStringArray" />
</jaxb:bindings>
</jaxb:bindings>
# 1 楼答案
最后一个问题是因为有第三个元素具有相同的名称,所以最终绑定。xjb就是这样
感谢@LMC帮助识别jaxb:bindings中缺少的名称空间声明和schemaLocation