Web services Can';spring集成编组后找不到SOAP头

Web services Can';spring集成编组后找不到SOAP头,web-services,soap,jaxb,spring-integration,Web Services,Soap,Jaxb,Spring Integration,我正在尝试为SOAP服务创建一个入站网关,它接受SOAP请求,如下所示: <?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Header> <RequestHeader xmlns="http://test.com/"> <SecurityToken>mytoken</Secur

我正在尝试为SOAP服务创建一个入站网关,它接受SOAP请求,如下所示:

<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Header>
    <RequestHeader xmlns="http://test.com/">
      <SecurityToken>mytoken</SecurityToken>
      <RequestID>1234</RequestID>
    </RequestHeader>
  </S:Header>
  <S:Body>
    <BaseRequest xmlns="http://test.com/">
      <RequestData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:type="BalanceRequest">
        <CustomerID>1234</CustomerID>
      </RequestData>
    </BaseRequest>
  </S:Body>
</S:Envelope>
<oxm:jaxb2-marshaller id="soapMarshaller" context-path="com.test" />
<int:channel id="soap-channel"/>
<int-ws:inbound-gateway id="ws-inbound-gateway" 
                        request-channel="soap-channel"
                        marshaller="soapMarshaller"/>
<int:service-activator input-channel="soap-channel">
    <bean class="com.test.SoapServiceActivator"/>
</int:service-activator>
我的问题是,在变量体中,我得到了SOAP请求的主体,但我没有找到提取SOAP请求头的方法。headerMap变量仅保存标准Spring集成头(replyChannel、errorChannel、id、timestamp)。标题是指SecurityToken+RequestID,以及带有请求操作名称的HTTP标题


知道怎么做吗?

尝试使用
映射请求头=“*”

默认情况下,
DefaultSoapHeaderMapper
仅映射标准头。在本例中,它只是
WebServiceHeaders.SOAP\u操作

更新

引用Omar:-)


谢谢!以下代码运行良好:


现在看起来好多了,但我的问题还没有完全解决。。。在调试器中,我现在可以看到类型为
SaajSoapHeaderElement
的头名称
RequestHeader
。问题在于类
SaajSoapHeaderElement
是私有的。是否可以在其上定义一些编组?
SaajSoapHeaderElement
分别是
SoapHeaderElement
SoapElement
。最后一个有
getSource()
,您可以从
issueResponseFor
手动解压缩它。谢谢!以下代码运行良好:
public BaseResponse issueResponseFor(BaseRequest请求,@Header(“RequestHeader”)SoapHeaderElement soapHeader){BaseRequestHeader RequestHeader=(BaseRequestHeader)JAXBIntrospector.getValue(marshaller.unmarshal(soapHeader.getSource())
太好了!将您的注释移动到我的答案以使其更具可读性。是时候接受我的答案了!;-)您知道如何向SOAP响应添加标题吗?
@ServiceActivator
public BaseResponse issueResponseFor(BaseRequest body, 
                                     @Headers Map<String, Object> headerMap) {
    return null;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "requestData"
})
@XmlRootElement(name = "BaseRequest")
public class BaseRequest {

    @XmlElement(name = "RequestData")
    protected BaseRequestBody requestData;

}
@Autowired
@Qualifier("soapMarshaller") 
Jaxb2Marshaller marshaller; 

@ServiceActivator 
public BaseResponse issueResponseFor(BaseRequest request,  @Header("RequestHeader") SoapHeaderElement soapHeader) { 
      BaseRequestHeader requestHeader = (BaseRequestHeader) JAXBIntrospector.getValue(marshaller.unmarshal(soapHeader.getSource()));`