Camel和CXF Producer Endpoint

时间:2014-04-08 15:59:52

标签: web-services soap cxf apache-camel

我尝试将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标头部分?如果没有,那么完成我想要做的事情最简单的方法是什么?

谢谢!

1 个答案:

答案 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正确构建标题