这是我的WSDL的一部分。我正在使用代码优先方法。
<portType name="MyWebService">
<operation name="echoString"/>
<input message="echoString"/>
<output message="echoStringResponse"/>
</operation>
</portType>
我应该添加或更改哪些注释以便更改此
<input message="echoString"/>
读为
<input message="echoStringRequest"/>
谢谢大家。
答案 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请求和响应主体中根元素的名称。