Java 使用JAX-WS创建多个无参数函数
我在用Java创建包含两个无参数方法的Web服务时遇到问题。创建一个很简单,但我还没有弄清楚如何让它与多个一起工作:Java 使用JAX-WS创建多个无参数函数,java,jax-ws,Java,Jax Ws,我在用Java创建包含两个无参数方法的Web服务时遇到问题。创建一个很简单,但我还没有弄清楚如何让它与多个一起工作: <message name="messageOneRequest" /> <message name="messageOneResponse" /> 但是增加 <message name="messageTwoRequest" /> <message name="messageTwoResponse" /> 导致“签名”冲突
<message name="messageOneRequest" />
<message name="messageOneResponse" />
但是增加
<message name="messageTwoRequest" />
<message name="messageTwoResponse" />
导致“签名”冲突。我知道签名冲突的原因,这是因为JAX-WS/JAX-RI试图通过简单地为传入消息留下一个空的SOAP正文来提高无参数方法的效率,从而表示一个单一的无参数方法。作为旁注,我使用的是文档而不是RPC
有没有办法允许这样做?我只是缺少一个属性吗?我的问题的目标是实现如下无参数方法:
int someMethod();
ArbitraryObject someOtherMethod();
尽管这两个方法不共享相同的名称,但它们有一个冲突的SOAP主体,因为传入的SOAP主体在技术上是相同的(大多数引擎似乎在没有参数的情况下提供一个空白主体来提高效率,而不是像SOAP主体内部的
)
长话短说,在使用Document/Literal时,有两种简单的方法可以解决这个问题。解决这个问题最简单的方法就是简单地给它们不同的参数。我最初只是提供了一个伪参数,没有op参数(称为“IgnoredParameter
”)来区分这两个参数。另一种方法是为具有非唯一参数的每个操作的SOAP操作提供唯一值。在使用wsimport生成的情况下,您还需要提供“-extension”让它使用该功能,否则它只会出错并忽略SOAP操作的存在
第二种方法的缺点是SOAP操作与HTTP高度耦合(它被用作HTTP头)。就我而言,这不是问题。但是,显然情况并非总是如此,特别是考虑到SOAP是通用的
使用中的绑定示例(请注意,实际提供的soapAction与通常为空的soapAction相比):
其他非冲突操作/方法仍然可以使用soapAction=“
”
int someMethod();
ArbitraryObject someOtherMethod();
<operation name="someOtherMethod">
<wsdlsoap:operation soapAction="urn:someOtherMethod"/>
<input name="someOtherMethodRequest">
<wsdlsoap:body use="literal"/>
</input>
<output name="someOtherMethodResponse">
<wsdlsoap:body use="literal"/>
</output>
</operation>