如何使用dataFormat作为PAYLOAD调用web服务

时间:2015-11-09 08:51:50

标签: apache web-services apache-camel cxf

我正在使用camel 2.16.0

创建了一个调用web服务的camel路由,dataFormat为 MESSAGE ,我得到了正常的响应。 并使用ProducerTemlate

调用此路由
//payloadXml is a string which contains SOAP Request Message.
Object response = producerTemplate.requestBody("direct:invokeWS", payloadXml);

<route id="my_Sample_Camel_Route_with_CXF">
<from uri="direct:invokeWS" />
    <to uri="cxf://http://localhost:8111/camel_MQ/TestService?wsdlURL=http://localhost:8111/camel_MQ/TestService?wsdl&amp;serviceName={http://www.test.org/interface/test/ws}camel_MQ-ws&amp;portName={http://www.test.org/interface/test}TestEndpoint&amp;dataFormat=MESSAGE" />
<log message="------------->> ${body}" />
</route>

但是,一旦我将 dataFormat 更改为“ PAYLOAD

我得到例外。

Caused by: java.lang.IllegalArgumentException: The PayLoad elements cannot fit with the message parts of the BindingOperation. Please check the BindingOperation and PayLoadMessage.
    at org.apache.camel.component.cxf.CxfEndpoint$CamelCxfClientImpl.setParameters(CxfEndpoint.java:1171)

尝试创建CxfPayload,然后在调用WS时将其发送到producerTeamplate,但仍然是相同的异常,

1 个答案:

答案 0 :(得分:1)

最后,我可以使用dataFormat作为有效负载来调用WS。 创建了CxfPayload对象并向其添加了SOAP Headers和Body。

但我仍然得到同样的例外&#34; PayLoad元素不能适应BindingOperation的消息部分&#34;

然后我添加了defaultOperationName&amp;调用webservice时的defaultOperationNamespace标头,如下所示。

<to uri="cxf:bean:camel_MQ_MQ-ws?dataFormat=PAYLOAD&amp;defaultOperationName=TestService&amp;defaultOperationNamespace=http://www.camel_MQ.org/interface&amp;loggingFeatureEnabled=true" />

希望这会有所帮助; - )