Java 使用JAX-WS创建多个无参数函数

Java 使用JAX-WS创建多个无参数函数,java,jax-ws,Java,Jax Ws,我在用Java创建包含两个无参数方法的Web服务时遇到问题。创建一个很简单,但我还没有弄清楚如何让它与多个一起工作: <message name="messageOneRequest" /> <message name="messageOneResponse" /> 但是增加 <message name="messageTwoRequest" /> <message name="messageTwoResponse" /> 导致“签名”冲突

我在用Java创建包含两个无参数方法的Web服务时遇到问题。创建一个很简单,但我还没有弄清楚如何让它与多个一起工作:

<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>