2014-04-08 63 views
0

我试图发送一个SOAP消息到外部SOAP服务。我需要做的是用SOAP消息包装一个xml字符串,并添加一些SOAP头以进行身份​​验证。现在我正在使用:骆驼和CXF生产者端点

<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> 

这个工程,但我也需要包括肥皂标题以及。有效载荷模式仅向身体发送肥皂信封。我试过使用拦截器来注入标题,但它被忽略。

有没有可能有一个肥皂标题部分有效载荷模式?如果没有,完成我想要做的事情的最简单方法是什么?

谢谢!

回答

0

是的,你可以获取和有效载荷模式设置SOAP头,这里更多信息 - http://camel.apache.org/cxf.html#CXF-HowtogetandsetSOAPheadersinPAYLOADmode

你可以发送到CXF 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(); 
    } 
} 

Google文档SOAPHEADER - Here

您需要正确地构建ÿ我们使用QName的头文件

+0

这些示例似乎显示了在接收到SOAP消息后如何访问SOAP头。我是否只向SOAP端点发送纯XML,希望端点将它转换为SOAP信封。这似乎并不像这些例子。我只是想念一些东西? 谢谢。 – user3511727

+0

@ user3511727用应该创建一个新的SoapHeader的代码片段编辑我的答案。 –

+0

感谢您的回复和代码发布。 不幸的是,这似乎并没有工作。我收到以下错误消息: org.apache.camel.InvalidPayloadException:没有可用的类型:org.apache.camel.component.cxf.CxfPayload on:Message:[Body is null]。引发原因:没有可用类型转换器将type:null转换为所需类型:org.apache.camel.component.cxf.CxfPayload,其值为null。 任何想法我做错了什么? 谢谢。 – user3511727