Web services Camel和CXF生产者端点
我正在尝试向外部SOAP服务发送SOAP消息。我需要做的是用SOAP消息包装一个xml字符串,并添加一些SOAP头以进行身份验证。现在我正在使用: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>
<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消息并将其发送到端点。谢谢你的帮助!