Web services Camel和CXF生产者端点

Web services Camel和CXF生产者端点,web-services,soap,cxf,apache-camel,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>

我正在尝试向外部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信封。我曾尝试使用拦截器来注入头文件,但它被忽略了

有可能有一个带有效负载模式的soap头部分吗?如果不是的话,完成我想做的事情最简单的方法是什么


谢谢

是的,您可以在有效负载模式下获取和设置SOAP头,更多信息请参见-

在发送到cxfbean端点之前,可以在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();
    }
}
@覆盖
公共作废进程(Exchange)引发异常{
Message out=exchange.getOut();
if(out.getHeader(Header.Header\u LIST)==null){
out.setHeader(Header.Header_LIST,new ArrayList());
}
List headers=CastUtils.cast((List)out.getHeader(Header.Header_List));
试一试{
SoapHeader头=新的SoapHeader(新的QName(“头名称”),“头值”);
标题.设置方向(方向.方向_OUT);
header.setMustUnderstand(true);
soapHeaders.add(header);
}捕获(JAXBEException e){
e、 printStackTrace();
}
}
SoapHeader的文档-


您将需要使用QName正确地构造您的头文件

这些示例似乎展示了在收到SOAP消息后如何访问SOAP头文件。我只是向soap端点发送普通XML,希望端点将其转换为soap信封。这些例子似乎并没有说明这一点。我是不是错过了什么?谢谢。@user3511727用一个代码段编辑了我的答案,该代码段将创建一个新的SoapHeader。谢谢您的回复和代码发布。不幸的是,这似乎也不起作用。我收到以下错误消息:org.apache.camel.InvalidPayloadException:没有类型为org.apache.camel.component.cxf.CxfPayload的正文:消息:[正文为空]。原因:没有类型转换器可用于将类型:null转换为所需类型:org.apache.camel.component.cxf.CxfPayload,值为null。知道我做错了什么吗?谢谢。这意味着邮件正文为空,您确定邮件中有正文吗?尝试在发送到cxf端点之前使用以下代码记录它:
由于时间限制,我不得不自己创建soap消息并将其发送到端点。谢谢你的帮助!