Hi,
I create a simple camel route to generate a SOAP message and call the
webserver using http client. How can I configure camel, soap to send
the correct SOAP Message to my webservice ?
Camel route
**************
<bean id="elStrategy"
class="org.apache.camel.dataformat.soap.name.ServiceInterfaceStrategy">
<constructor-arg index="0"
value="org.openuri._2004._04.helloworld.EndpointInterface"/>
<constructor-arg index="1" value="true"/>
</bean>
<camelContext trace="true" xmlns="http://camel.apache.org/schema/spring">
<jmxAgent id="agent" createConnector="true"/>
<dataFormats>
<soapjaxb id="soapFormat" contextPath="com.bar.foo.test"
elementNameStrategyRef="elStrategy"/>
</dataFormats>
<route>
<from uri="file:./target/dataecho?noop=true"/>
<convertBodyTo type="String"/>
<log message="Echo message received : ${body}"/>
<bean ref="enrich" method="transform"/> // This is where
we create the Foo object = SOAP Body
<marshal ref="soapFormat"/>
<to uri="http://localhost:9090/redpill/WebService"/>
<log message="SOAP message received : ${body}"/>
</route>
<route id="cxf-to-queue">
<from uri="cxf:bean:redPillWS?dataFormat=POJO"/>
<log message="SOAP message received : ${body}"/>
<transform>
<constant>OK</constant>
</transform>
</route>
WSDL
*******
<definitions name="TestService"
targetNamespace="http://www.openuri.org/2004/04/HelloWorld"
xmlns:tns="http://www.openuri.org/2004/04/HelloWorld"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<types>
<xs:schema targetNamespace='http://foo.bar.com/test'
version='1.0' xmlns:tns='http://foo.bar.com/test'
xmlns:xs='http://www.w3.org/2001/XMLSchema'>
<xs:complexType name="foo">
<xs:sequence>
<xs:element name="arg0" type="xs:int"/>
<xs:element name="arg1" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</types>
<message name="EndpointInterface_echo">
<part name="String_1" type="xsd:string"/>
</message>
<message name="EndpointInterface_echoResponse">
<part name="result" type="xsd:string"/>
</message>
<portType name="EndpointInterface">
<operation name="echo" parameterOrder="String_1">
<input message="tns:EndpointInterface_echo"/>
<output message="tns:EndpointInterface_echoResponse"/>
</operation>
</portType>
<binding name="EndpointInterfaceBinding" type="tns:EndpointInterface">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="rpc"/>
<operation name="echo">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"
namespace="http://www.openuri.org/2004/04/HelloWorld"/>
</input>
<output>
<soap:body use="literal"
namespace="http://www.openuri.org/2004/04/HelloWorld"/>
</output>
</operation>
</binding>
<service name="TestService">
<port name="EndpointInterfacePort"
binding="tns:EndpointInterfaceBinding">
<soap:address location="http://localhost:9090/webservices/echo"/>
</port>
</service>
</definitions>
Message send to the WebService
***************************************
<ns2:Envelope xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/">
<ns2:Body>
<ns3:foo xmlns:ns3="http://foo.bar.com/test">
<arg0>0</arg0>
<arg1>Hello, Fuse Students</arg1>
</ns3:foo>
</ns2:Body>
</ns2:Envelope>
Error generated
*******************
1977012692@qtp-2116352311-0 WARN
[org.apache.cxf.phase.PhaseInterceptorChain] - Interceptor for
{http://www.openuri.org/2004/04/HelloWorld}EndpointInterfaceService
has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Message part
{http://foo.bar.com/test}foo was not recognized. (Does it exist in
service WSDL?)
at
org.apache.cxf.interceptor.BareInInterceptor.handleMessage(BareInInterceptor.java:133)
at
org.apache.cxf.binding.soap.interceptor.RPCInInterceptor.handleMessage(RPCInInterceptor.java:111)
The SOAP Action to be called is echo and not foo ................. and
so the soap message to be generated should be
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:hel="http://www.openuri.org/2004/04/HelloWorld">
<soapenv:Header/>
<soapenv:Body>
<hel:echo>
<String_1>blabla</String_1>
</hel:echo>
</soapenv:Body>
</soapenv:Envelope>
Regards,
Charles Moulliard
Sr. Principal Solution Architect - FuseSource
Apache Committer
Blog : http://cmoulliard.blogspot.com
Twitter : http://twitter.com/cmoulliard
Linkedin : http://www.linkedin.com/in/charlesmoulliard
Skype: cmoulliard