Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
定制Java包JAXB-wsimport_Java_Maven_Jaxb_Wsdl_Spring Ws - Fatal编程技术网

定制Java包JAXB-wsimport

定制Java包JAXB-wsimport,java,maven,jaxb,wsdl,spring-ws,Java,Maven,Jaxb,Wsdl,Spring Ws,我正试图从一个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/X

我正试图从一个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消息,但是它没有正确地填充响应对象(它的所有属性都为null)。我想问题可能来自重命名响应类,所以这就是为什么我试图生成不同的包,保留所有类的原始名称

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

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>
org.jvnet.jax-ws-commons
jaxws-maven插件
2.3
wsimport
wsdl/mywsdl.wsdl
src/main/resources/wsdl
mywsdl.wsdl
src/main/resources/wsdl
bindings.xml
原包装
${basedir}/src/main/java
使用此绑定文件编译时,会出现相同的错误。所以我认为这可能是不对的

你发现什么错误了吗


谢谢。

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

一些提示:

  • 确保正确设置“wsdlLocation”属性!它必须使用相对路径指向WSDL文件
  • 包确定将用于生成的服务类的包。(用@WebService注释的内容)
  • 根据需要启用或禁用包装器样式和异步映射。;-) “package1”的绑定文件示例:

    
    假的
    真的
    
    提示:如果将所有绑定文件放在src/jaxws中,则可以完全删除“bindingFiles”配置部分!然后,jaxws maven插件将自动获取它们。非常感谢!,这就成功了。重要!,当我第一次编译时,插件忽略了我的新包配置,因为它使用的是我pom文件中的前一个配置,一旦我删除了
    original.package
    它就创建了不同的包。然而。。。Spring没有正确填充我的响应对象,我可以在日志中看到响应SOAP消息是正确的,所以这个解决方案没有解决我的主要问题。
    <?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>