2013-02-12 146 views
3

这是我的WSDL的一部分。我正在使用代码第一种方法。更改消息名称

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

我要补充或更改,从而改变这种

<input message="echoString"/> 

全部改为

<input message="echoStringRequest"/> 

感谢什么的注释。

回答

2

我对自己感到非常惊讶,但经过一段时间后,我看了一下规范,似乎你不能在jax-ws中做到这一点(除非以非标准方式,取决于实现)。以下是jax-ws 2.0 specification在这个问题上所说的内容。见Java到WSDL 1.1映射,第3.5节,第32页:

一个wsdl的值:消息元素的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> 

的你是否更开心与此版本的决定权在你。

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请求和响应正文中根元素的名称。