我尝试将SOAP消息发送到外部SOAP服务。我需要做的是用SOAP消息包装一个xml字符串,并添加一些SOAP头以进行身份验证。现在我正在使用:
<cxf:cxfEndpoint id="someEndpoint" wsdl="someWSDL.wsdl"
address="http://someAddress:9999/service.asmx"/>
<camelContext>
<route>
<from uri="vm-someChannel">
<to uri="cxf:bean:someEndpoint?dataFormat=PAYLOAD"/>
</route>
</camelContext>
这可以,但我也需要包含soap标头。有效载荷模式仅发送带有主体的肥皂信封。我已经尝试使用拦截器来注入标头,但它被忽略了。
是否可以使用带有效负载模式的soap标头部分?如果没有,那么完成我想要做的事情最简单的方法是什么?
谢谢!
答案 0 :(得分:0)
是的,您可以在有效负载模式下获取并设置SOAP标头,此处有更多信息 - http://camel.apache.org/cxf.html#CXF-HowtogetandsetSOAPheadersinPAYLOADmode
您可以在发送到CXF bean端点
之前在bean或处理器中执行此操作编辑:添加代码示例
@Override
public void process(Exchange exchange) throws Exception {
Message out = exchange.getOut();
if (out.getHeader(Header.HEADER_LIST) == null) {
out.setHeader(Header.HEADER_LIST, new ArrayList<SoapHeader>());
}
List<SoapHeader> headers = CastUtils.cast((List<?>)out.getHeader(Header.HEADER_LIST));
try {
SoapHeader header = new SoapHeader(new QName("Header Name"), "Header Value");
header.setDirection(Direction.DIRECTION_OUT);
header.setMustUnderstand(true);
soapHeaders.add(header);
} catch (JAXBException e) {
e.printStackTrace();
}
}
SoapHeader的文档 - Here
您需要使用QName正确构建标题