我的目标是什么?
我是Spring WS的新手,我得到了一个WSDL(以及一些XSD,当然),我想在SOAP响应中添加一些自定义头元素。 我一直在网上搜索,尝试了各种代码片段,但一切都没有运气......似乎没有什么工作正常。
问题是什么?
响应SOAP消息有一个弹簧调用Payload的主体,而我的SOAP客户端(SOAPUI)很好地接收响应。 但它来了:我应该如何向响应消息添加新的(自定义)SOAP标头?
xml预期的响应是什么?
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<aud:HeaderInfo xmlns:bd="http://www.myws.com/">
<bd:ID>123</bd:ID>
<bd:Type>text</bd:Type>
</aud:HeaderInfo>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ne:myWS xmlns:ne="http://www.iways.com/">
<ne:INFO>
<ne:NAME>JOHN</ne:NAME>
<ne:DESIGNATION>ITA</ne:DESIGNATION>
<ne:MOBILE>9841011113</ne:MOBILE>
</ne:INFO>
</ne:myWS>
我的有效负载
@PayloadRoot(localPart = "myWSRequest", namespace = TARGET_NAMESPACE)
public @ResponsePayload myWSResponse getInfo(@RequestPayload myWSRequest request)
{
myWSResponse response = new myWSResponse();
Person person = personService_i.getAccountDetails(request.getID());
response.setPersonDetails(person);
return response;
}
任何辅助信息?
我使用xsd根据XSD生成一大堆类,我不知道如何将这些自定义标题添加到响应消息中,
答案 0 :(得分:1)
您可以实施endpointInterceptorAdapter并执行以下操作:
public final class MyEndpointInterceptorAdapter extends EndpointInterceptorAdapter {
@Override
public boolean handleResponse(MessageContext messageContext_, Object endpoint_)
throws IOException {
WebServiceMessage _webServiceMessage = messageContext_.getResponse();
SoapMessage _soapMessage = (SoapMessage) _webServiceMessage;
if (_soapMessage != null) {
SoapEnvelope _soapEnvelope = _soapMessage.getEnvelope();
// create your qname object
QName _myQName = ....
// adding your quname to the header
_soapEnvelope.getHeader().addHeaderElement(myQName );
}
}
}
在弹簧配置文件中,只需添加拦截器:
<sws:interceptors>
<ref bean="myEndpointInterceptorAdapter"/>
</sws:interceptors>