gpt4 book ai didi

java - 定制 Java 包 JAXB wsimport

转载 作者:搜寻专家 更新时间:2023-10-31 19:38:27 26 4
gpt4 key购买 nike

我正在尝试从一个 wsdl 文件中生成一个带有 maven 和 jaxb 的客户端,其中包含 2 个模式以及来自不同模式的一些同名元素

当我尝试执行编译时出现下一个错误:

Two declarations cause a collision in the ObjectFactory class.

WSDL 架构:

<wsdl:types>
<schema targetNamespace="http://ws.services" xmlns="http://www.w3.org/2001/XMLSchema">...</schema>
<schema targetNamespace="http://ws.models" xmlns="http://www.w3.org/2001/XMLSchema">...</schema>
</wsdl:types>

我尝试重命名产生错误的元素,但是然后我的 spring 客户端收到了正确的 SOAP 消息,但它没有正确填充响应对象(它的所有属性都是空的)。我猜问题可能来自重命名响应类,所以这就是为什么我试图生成不同的包以保留所有类的原始名称。

为了做到这一点,我编写了下一个绑定(bind)文件,但我不知道我做错了什么,它不起作用。

bindings.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>  
<jaxb:bindings version="2.1"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema" >

<jaxb:bindings schemaLocation="mywsdl.wsdl#types?schema1"
node="/xs:schema[@targetNamespace='http://ws.services']">
<jaxb:schemaBindings>
<jaxb:package name="package1" />
</jaxb:schemaBindings>
</jaxb:bindings>

<jaxb:bindings schemaLocation="mywsdl.wsdl#types?schema2"
node="/xs:schema[@targetNamespace='http://ws.models']">
<jaxb:schemaBindings>
<jaxb:package name="package2" />
</jaxb:schemaBindings>
</jaxb:bindings>

</jaxb:bindings>

我在maven文件中的配置部分是下一个,以防万一它有用:

<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
<configuration>
<wsdlLocation>wsdl/mywsdl.wsdl</wsdlLocation>
<wsdlDirectory>src/main/resources/wsdl</wsdlDirectory>
<wsdlFiles>
<wsdlFile>mywsdl.wsdl</wsdlFile>
</wsdlFiles>
<bindingDirectory>src/main/resources/wsdl</bindingDirectory>
<bindingFiles>
<bindingFile>bindings.xml</bindingFile>
</bindingFiles>
<packageName>original.package</packageName>
<sourceDestDir>${basedir}/src/main/java</sourceDestDir>
</configuration>

当我用这个绑定(bind)文件编译时,出现同样的错误。所以我认为这可能是不对的。

你有没有发现任何错误?

谢谢。

最佳答案

根据我的经验,最好创建 2 个绑定(bind)文件(每个 WSDL 文件一个)。相应地更新您的 pom.xml 并确保绑定(bind)文件的根元素是 jaxws:bindings(而不是 jaxb:bindings!)

一些提示:

  1. 确保正确设置“wsdlLocation”属性!它必须使用相对路径指向 WSDL 文件!
  2. jaxws:package 确定将用于生成的服务类的包。 (用@WebService注解的东西)
  3. 根据需要启用或禁用 wrapperStyle 和 asyncMapping。 ;-)

“package1”的示例绑定(bind)文件:

<?xml version="1.0" encoding="UTF-8"?>

<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
wsdlLocation="mywsdl.wsdl"
version="2.0">

<jaxws:package name="package1"/>
<jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
<jaxws:enableAsyncMapping>true</jaxws:enableAsyncMapping>

<jaxws:bindings node="//wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://ws.services']">
<jaxb:schemaBindings>
<jaxb:package name="package1"/>
</jaxb:schemaBindings>
</jaxws:bindings>

</jaxws:bindings>

关于java - 定制 Java 包 JAXB wsimport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25932578/

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