我对JAX-WS 2.2.10
的好奇行为感到困惑。
我使用maven插件生成了wsimport
的所有java源代码。
到目前为止,消息来源看起来很好。
部署的服务实现在带有Java 1.7的Tomcat 7上运行。
我的问题是: 我也希望将这些资源用于我的服务客户端。 但是与服务的通信很糟糕,因为JAX-WS运行时需要SOAP消息的其他XML元素。
比较生成的WSDL与原始WSDL和注释显示:服务器端的JAX-WS生成自定义名称,不使用定义的名称@WebParam(name="...")
或{{1}但是客户呢!
最后,双方都有不同的消息元素名称,这会产生异常(@WebResult(name="...")
)。
我可以控制服务器上WSDL生成的行为吗? JAXB应该使用给定的注释吗?
提前致谢
编辑,2015-10-12
现在我尝试根据运行时生成的服务器WSDL生成新的客户端源。
结果是maven任务期间的几个异常:Cannot find dispatch method...
疯狂。该框架创建了一个框架无法使用的XML结构。
编辑,2015-11-30
这是我原始的WSDL定义,它是JAX-WS代码生成的源代码:
Two declarations cause a collision in the ObjectFactory class
生成的java代码使用以下代码段进行注释:
<message name="checkServiceRequest">
<part name="checkServiceRequestPart" element="tns:CheckServiceRequest" />
</message>
JAX-WS运行时已在 JBoss EAP 6.3.0 上生成以下WSDL代码段:
@WebParam(name = "CheckServiceRequest",
targetNamespace = "http://my.name.space",
partName = "checkServiceRequestPart")
消息名称不同,但部件属性等于给定的注释。
JAX-WS运行时已在 Tomcat 和 WebLogic 12.1.3 上生成以下WSDL代码段:
<message name="checkService">
<part element="tns:CheckServiceRequest" name="checkServiceRequestPart"></part>
</message>
部件属性与给定注释不同。因此,正确使用注释的客户端将发送无法匹配的方法调用。
差异
对于我的开发和WebLogic运行时使用mtro项目的Oracle实现:
<message name="checkService">
<part name="checkService" element="tns:checkService"/>
</message>
JBoss有自己的实现:
Specification-Title: The Java API for XML Web Services
Specification-Version: 2.2
Implementation-Title: JAX-WS Implementation
Implementation-Vendor: Sun Microsystems Inc
Implementation-Version: 2.2.10
Build-Version: JAX-WS RI 2.2.10