Spring WS:添加自定义SOAP标头

时间:2015-10-15 07:03:11

标签: java soap xsd spring-ws payload

我的目标是什么?

我是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生成一大堆类,我不知道如何将这些自定义标题添加到响应消息中,

1 个答案:

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