我正在使用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&serviceName={http://www.test.org/interface/test/ws}camel_MQ-ws&portName={http://www.test.org/interface/test}TestEndpoint&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,但仍然是相同的异常,
答案 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&defaultOperationName=TestService&defaultOperationNamespace=http://www.camel_MQ.org/interface&loggingFeatureEnabled=true" />
希望这会有所帮助; - )