Java 为wsdl生成客户端代码,在主体中包含更多部分
我目前正在开发客户端应用程序,使用波兰财政部的官方API检查NIP编号。() 不幸的是,我对他们发布的wsdl有一个问题。即有一条包含两部分的消息Java 为wsdl生成客户端代码,在主体中包含更多部分,java,soap,wsdl,cxf,wsimport,Java,Soap,Wsdl,Cxf,Wsimport,我目前正在开发客户端应用程序,使用波兰财政部的官方API检查NIP编号。() 不幸的是,我对他们发布的wsdl有一个问题。即有一条包含两部分的消息 <wsdl:message name="SprawdzNIPNaDzienZapytanie"> <wsdl:part name="NIP" element="tns:NIP"/> <wsdl:part name="Data" element="tns:Data"/> </wsdl:messa
<wsdl:message name="SprawdzNIPNaDzienZapytanie">
<wsdl:part name="NIP" element="tns:NIP"/>
<wsdl:part name="Data" element="tns:Data"/>
</wsdl:message>
和bindings.xml
文件:
<jaxws:bindings
wsdlLocation="my.wsdl"
xmlns="http://java.sun.com/xml/ns/jaxws"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
<enableWrapperStyle>true</enableWrapperStyle>
</jaxws:bindings>
真的
不幸的是,端口仍然使用
@SOAPBinding(parameterStyle=SOAPBinding.parameterStyle.BARE)
而不是包装的注释。当parameterStyle为BARE时,web方法应该只有一个参数
对于文档样式的web服务,BP要求每条消息
没有或只有一部分
以下是一个例子:
<message name = "SubmitPurchaseOrderMessage">
<part name="Order" element "sd:purchaseOrder"/>
</message>
因此,这意味着参数都在SOAP请求的元素内部
- 当参数样式被包装时,将所有 参数包装在元素中
- 当 参数样式为裸样式,所有参数均未包装在任何 元素
<message name="add">
<part name="parameter1" element="tns:a"/>
</message>
架构将显示如下内容:
<add>
<element name="parameter1" type:int/>
</add>
如果您想在不更改wsdl文件的情况下使其成为包装样式,那么可以使用绑定文件和cxf来生成代码
下面是bindings.xml
<jaxws:bindings
wsdlLocation="Your wsdl file path"
xmlns="http://java.sun.com/xml/ns/jaxws"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
<enableWrapperStyle>true</enableWrapperStyle>
</jaxws:bindings>
真的
enableWrapperStyle=false以生成未包装的样式代码
这是您将在pom.xml中看到的配置
<configuration>
<!-- Binding file for Wrapped style services -->
<defaultOptions>
<bindingFiles>
<bindingFile>
${basedir}/src/main/resources/bindings.xml
</bindingFile>
</bindingFiles>
<noAddressBinding>true</noAddressBinding>
</defaultOptions>
</configuration>
${basedir}/src/main/resources/bindings.xml
真的
嘿!看看最新的问题。尝试了一下,但不幸的是,它没有解决我的问题。当“操作”名称、“消息”名称和“元素”名称在某些形状或形式上不同时,会生成裸Web服务。要自动生成包装的客户机或服务存根,这三个元素必须相同。您的名称在.wsdl文件中不同。相应地更改.wsdl文件,使其“操作”名称、“消息”名称和“元素”名称相同,然后CXF将以包装样式生成。在手动将端口类型更改为包装并部署服务后,您是否尝试过?可能会有帮助,但我不确定。更改wsdl文件不是一个选项,因为这个文件不属于我。如果我想手动更改它,就需要向整个团队确认我所做的事情,这样当发布新的api版本(新的wsdl文件)时,有人就会知道该怎么做。如果api维护人员知道wsdl不正确,我想我可以写信给他们。
<jaxws:bindings
wsdlLocation="Your wsdl file path"
xmlns="http://java.sun.com/xml/ns/jaxws"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
<enableWrapperStyle>true</enableWrapperStyle>
</jaxws:bindings>
<configuration>
<!-- Binding file for Wrapped style services -->
<defaultOptions>
<bindingFiles>
<bindingFile>
${basedir}/src/main/resources/bindings.xml
</bindingFile>
</bindingFiles>
<noAddressBinding>true</noAddressBinding>
</defaultOptions>
</configuration>