如何在Spring Integration WS中添加头元素?

如何在Spring Integration WS中添加头元素?,spring,spring-integration,Spring,Spring Integration,我的要求是 <soapenv:Header> <tns:SubHeader> <tns:version>xyz</tns:version> </tns:SubHeader> </soapenv:Header> 使用此选项,我可以在中添加。 如何在此请求中添加xyz。您可以使用映射请求头创建简单的SOAP头 <ws:outbound-gateway uri="http://b

我的要求是

<soapenv:Header>
      <tns:SubHeader>
         <tns:version>xyz</tns:version>

      </tns:SubHeader>
</soapenv:Header>
使用此选项,我可以在
中添加

如何在此请求中添加
xyz

您可以使用
映射请求头创建简单的SOAP头

<ws:outbound-gateway uri="http://blah/blah"
    mapped-request-headers="foo" />


...
对于任何更复杂的内容,我相信您需要使用自定义消息工厂,或者客户端拦截器来处理消息。

使用拦截器,例如:

<int-ws:outbound-gateway
        uri="${services.mobileApprove}" request-channel="mobileApproveService"
        message-sender="mobileApproveMessageSender" 
        interceptor="soapHeaderElementAdder"/>

}

Thanks@Gary.. 你能帮助我如何使用自定义消息工厂实现吗?拦截器路由可能要容易得多,但我自己还没有做过;我得和你一样想清楚。
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Header foo="bar"/>
...
<int-ws:outbound-gateway
        uri="${services.mobileApprove}" request-channel="mobileApproveService"
        message-sender="mobileApproveMessageSender" 
        interceptor="soapHeaderElementAdder"/>
public class
    UserContextSoapElementAdder implements org.springframework.ws.client.support.interceptor.ClientInterceptor {


Logger logger = LoggerFactory.getLogger(UserContextSoapElementAdder.class);

@Override
public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException {
    try {
        Object si = messageContext.getProperty("si");

        SoapMessage soapMessage = (SoapMessage) messageContext.getRequest();

        SoapHeader sh = soapMessage.getSoapHeader();

        SoapHeaderElement soapHeaderInformation = sh.addHeaderElement(new QName("http://harmoni-integration.yamanyar.com.tr", "si",
                ""));


        //work with soapHeaderInformation 



    } catch (Exception e) {
        logger.error("Cannot add user context soap header!", e);
    }


    return true;
}

@Override
public boolean handleResponse(MessageContext messageContext) throws WebServiceClientException {
    return true;
}

@Override
public boolean handleFault(MessageContext messageContext) throws WebServiceClientException {
    return true;
}