更改消息名称

时间:2013-02-12 18:38:11

标签: web-services wsdl jax-ws

这是我的WSDL的一部分。我正在使用代码优先方法。

<portType name="MyWebService">
     <operation name="echoString"/>
         <input message="echoString"/>
         <output message="echoStringResponse"/>
     </operation>
 </portType>

我应该添加或更改哪些注释以便更改此

<input message="echoString"/>

读为

<input message="echoStringRequest"/>

谢谢大家。

2 个答案:

答案 0 :(得分:2)

我很惊讶自己,但经过一段时间的努力,我查看了规范,看来你在jax-ws中不能真正做到这一点(除非以非标准的方式,取决于实现)。以下是jax-ws 2.0 specification在此问题上所说的内容。请参阅 Java到WSDL 1.1映射,第3.5节,第32页:

  

wsdl:message元素的name属性的值不是   但是按惯例,它通常等于   输入消息的相应操作名称和操作名称   与输出消息的“响应”连接在一起。命名错误   消息在章节3.7。

中描述

因此,我想到的唯一选择是重命名您的操作,例如通过更改或添加@WebMethod注释。这是一个例子:

@WebMethod(operationName = "echoStringRequest")
public String echoString(String echoStringRequest) {
    return echoStringRequest;
}

这将生成以下portType

<portType name="MyWebService">
   <operation name="echoStringRequest">
      <input message="tns:echoStringRequest"></input>
      <output message="tns:echoStringRequestResponse"></output>
   </operation>
</portType>

您是否对此版本感到满意的决定取决于您。

答案 1 :(得分:0)

我最近自己遇到过这个问题,多次偶然发现这个问题。在我们的应用程序中,我们有一个JAX-WS servlet,它必须使用... Request和... Response的格式。

经过几天的搜索,我找到了解决方案。

让我们说你的echoStringRequest有一个String属性应该在响应中回显。

class EchoMessage {
    private String message;

    //add getter and setter
}

首先将此注释添加到Web服务类:

@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)

然后注释您的Web服务方法,如下所示:

@WebMethod
@WebResult(name = "echoStringResponse")
public EchoMessage echoString (@WebParam(name = "echoStringRequest") EchoMessage inputMessage) {
    ...
}

如果没有parameterStyle BARE注释,JAX-WS会自动生成如下消息:

<echoString>
    <echoStringRequest>
        ...
    </echoStringRequest>
</echoString>

使用注释,外部元素不再存在。

需要@WebParam和@ReturnType注释来确定SOAP请求和响应主体中根元素的名称。