You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by cmoulliard <cm...@gmail.com> on 2008/10/08 17:33:21 UTC

Camel CXF component does not understand the SOAP message containing a tag for the wsdl:operation !!!

Hi,

I have discovered a small problem between a client created using the Client
ProxyFactoryBean and my webservice running with Apache Camel - CXF
component.

When the client calls the web service, the ClientProxyFactoryBean class of
CXF generates the following SOAP message :

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:PostParcel xmlns:ns1="http://tracker.service.xpectis.com/">
<ns2:inputTrackParcel xmlns:ns2="http://tracker.service.xpectis.com">
<name>chm</name>
<destination>Brussels</destination>
<origin>Florennes</origin>
</ns2:inputTrackParcel>
</ns1:PostParcel>
</soap:Body>
</soap:Envelope>

Unfortunately, the tag <ns1:PostParcel> is not supported by the web service
called in camel. If I remove it and send the message using SOAPUI client,
everything works fine.

How can I solve this problem in Camel CXF component ?

Charles Moulliard

-----
Enterprise Architect

Xpectis
12, route d'Esch
L-1470 Luxembourg

Phone +352 25 10 70 470
Mobile +352 621 45 36 22

e-mail : cmoulliard@xpectis.com
web site :  www.xpectis.com www.xpectis.com 
My Blog :  http://cmoulliard.blogspot.com/ http://cmoulliard.blogspot.com/  
-- 
View this message in context: http://www.nabble.com/Camel-CXF-component-does-not-understand-the-SOAP-message-containing-a-tag-for-the-wsdl%3Aoperation-%21%21%21-tp19881309s22882p19881309.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: Camel CXF component does not understand the SOAP message containing a tag for the wsdl:operation !!!

Posted by cmoulliard <cm...@gmail.com>.
Hi Willem,

What you propose does not change anything. I will place a message on nabble
- cxf user forum to understand why the message is wrapped even when the
JaxWsServiceFactoryBean.setWrapped(false) is set to fase.

Many thanks for your help.

Charles


willem.jiang wrote:
> 
> Hi
> 
> I don't know if this is a bug of CXF ,  don't do much investigation here.
> But you can set the wrap style by setting a JaxWsServiceFactoryBean to 
> the ClientProxyFactoryBean like this
> 
> ClientProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
> 
> JaxWsServiceFactoryBean sf = new JaxWsServiceFactoryBean();
> sf.setWrapped(false);
> factory.setServiceFactory(sf);
> ......
> BTW The sf 's wrappedStyle default value is True.
> 
> You can find a document which talks about Wrapped vs. Unwrapped Mode
> here[1]
> 
> [1] http://cwiki.apache.org/CXF20DOC/http-binding.html
> 
> Willem
> 
> cmoulliard wrote:
>> Willem,
>>
>> Here is the CXF code that I use :
>>
>> package com.xpectis.service.tracker;
>>
>> import java.util.GregorianCalendar;
>>
>> import org.apache.commons.logging.Log;
>> import org.apache.commons.logging.LogFactory;
>> import org.apache.cxf.frontend.ClientProxyFactoryBean;
>> import org.apache.cxf.interceptor.LoggingInInterceptor;
>> import org.apache.cxf.interceptor.LoggingOutInterceptor;
>> import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
>> import org.junit.Test;
>>
>> import javax.xml.datatype.DatatypeFactory;
>> import javax.xml.datatype.XMLGregorianCalendar;
>>
>> import junit.framework.Assert;
>>
>> public class TrackerServiceTest {
>> 	
>> 	private static String ADDRESS = "http://localhost:9000/tracker";
>> 	
>> 	//TrackerService trackerService;
>> 	
>> 	   /** The Constant LOG. */
>>     private static final Log LOG =
>> LogFactory.getLog(TrackerServiceTest.class);
>>
>>      /**
>>      * Test call PostParcel Web Service.
>>      * 
>>      * @throws Exception the exception
>>      */
>> 	@Test
>>     public void testPostParcel() throws Exception
>>     {
>> 		
>> 		// Create Client Proxy
>> 		ClientProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
>> 		factory.setServiceClass(TrackParcelEndpoint.class);
>> 		factory.setAddress(ADDRESS);
>> 		factory.getInInterceptors().add(new LoggingInInterceptor());
>> 		factory.getOutInterceptors().add(new LoggingOutInterceptor());
>>
>> 		TrackParcelEndpoint client = (TrackParcelEndpoint) factory.create();
>> 		
>> 		// Create InputTrackParcel client
>> 		InputTrackParcel parcel = new InputTrackParcel();
>> 		parcel.setName("chm");
>> 		parcel.setDestination("Brussels");
>> 		parcel.setOrigin("Florennes");
>> 		//parcel.setDeliveryDate(calendar);
>> 		
>>                 // Call web service
>> 		OutputTrackParcel result = client.PostParcel(parcel);
>> 		LOG.info("Result : " + result.getReference());
>> 		Assert.assertNotNull(result);
>> 		
>> 		
>>     }
>>     
>> }
>>
>>
>> Kind regards,
>>
>> Charles
>>
>>
>> willem.jiang wrote:
>>   
>>> Hi,
>>>
>>> The server side behavior is right (WSDL, SEI) , it can't receive the 
>>> wrapped message.
>>> Can you show me the client side code which call for the service ?
>>> I don't know why your client send a wrapped soap message, maybe you use 
>>> a wrong front end.
>>>
>>> Willem
>>>
>>> cmoulliard wrote:
>>>     
>>>> Here is the route configuration in camel :
>>>>
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>> <beans xmlns="http://www.springframework.org/schema/beans"
>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> 	xmlns:context="http://www.springframework.org/schema/context"
>>>> 	xmlns:cxf="http://activemq.apache.org/camel/schema/cxfEndpoint"
>>>> 	
>>>> 	xsi:schemaLocation="
>>>>        http://www.springframework.org/schema/beans
>>>>        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>>>>        http://activemq.apache.org/camel/schema/cxfEndpoint
>>>>        http://activemq.apache.org/camel/schema/cxf/cxfEndpoint.xsd
>>>>        http://activemq.apache.org/camel/schema/spring
>>>>       
>>>> http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">
>>>>        
>>>>        <import resource="classpath:META-INF/cxf/cxf.xml" />
>>>>        <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"
>>>> />
>>>>        <import
>>>> resource="classpath:META-INF/cxf/cxf-extension-http-jetty.xml" />
>>>>        <import resource="classpath:tracker-core-services.xml" />
>>>>
>>>>    <cxf:cxfEndpoint id="serviceTracker"
>>>>             address="http://localhost:9000/tracker" 
>>>>     	
>>>> serviceClass="com.xpectis.service.tracker.impl.TrackerServiceImpl"
>>>>     />
>>>>     		
>>>>    <camelContext id="camel" trace="true"
>>>> xmlns="http://activemq.apache.org/camel/schema/spring">
>>>>     <route>
>>>>       <from uri="cxf:bean:serviceTracker" />
>>>>       <to uri="bean:tracker" /> 
>>>>     </route>
>>>>    </camelContext> 
>>>>    
>>>>    <bean id="tracker" class="com.xpectis.tracker.bean.ExtractParcel">
>>>>    		<property name="saveService" ref="saveService" />
>>>>    </bean>
>>>>
>>>> </beans>
>>>>
>>>> The WSDL file :
>>>>
>>>> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
>>>> <wsdl:definitions
>>>>   targetNamespace="http://tracker.service.xpectis.com"
>>>>   xmlns="http://schemas.xmlsoap.org/wsdl/" 
>>>>   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>>>>   xmlns:tns="http://tracker.service.xpectis.com"
>>>>   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>>>>   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>>>>   
>>>>   <!-- Type definitions for input- and output parameters for webservice
>>>> -->
>>>>   <wsdl:types>
>>>>     <xsd:schema targetNamespace="http://tracker.service.xpectis.com">
>>>>       <xsd:element name="inputTrackParcel">
>>>>         <xsd:complexType>
>>>>           <xsd:sequence>
>>>>           	<xsd:element name="name" type="xsd:string" maxOccurs="1"
>>>> minOccurs="1"/>
>>>>           	<xsd:element name="destination" type="xsd:string"
>>>> maxOccurs="1"
>>>> minOccurs="1"></xsd:element>
>>>>           	<xsd:element name="origin" type="xsd:string"></xsd:element>
>>>>           	<xsd:element name="deliveryDate" type="xsd:date"
>>>> maxOccurs="1"
>>>> minOccurs="0"></xsd:element>
>>>>           </xsd:sequence>
>>>>         </xsd:complexType>
>>>>       </xsd:element>
>>>>       <xsd:element name="outputTrackParcel">
>>>>         <xsd:complexType>
>>>>           <xsd:sequence>
>>>>             <xsd:element name="reference" type="xsd:int"/>
>>>>           </xsd:sequence>
>>>>         </xsd:complexType>
>>>>       </xsd:element>
>>>>     </xsd:schema>
>>>>   </wsdl:types>
>>>>   
>>>>   <!-- Message definitions for input and output -->  
>>>>   <wsdl:message name="inputTrackParcel">
>>>>     <wsdl:part element="tns:inputTrackParcel" name="parameters"/>
>>>>   </wsdl:message>
>>>>   <wsdl:message name="outputTrackParcel">
>>>>     <wsdl:part element="tns:outputTrackParcel" name="parameters"/>
>>>>   </wsdl:message>
>>>>   
>>>>   <!-- Port (interface) definitions -->
>>>>   <wsdl:portType name="TrackParcelEndpoint">
>>>>     <wsdl:operation name="PostParcel">
>>>>       <wsdl:input message="tns:inputTrackParcel"/>
>>>>       <wsdl:output message="tns:outputTrackParcel"/>
>>>>     </wsdl:operation>
>>>>   </wsdl:portType>
>>>>   
>>>>   <!-- Port bindings to transports and encoding - HTTP, document
>>>> literal
>>>> encoding is used -->  
>>>>   <wsdl:binding name="TrackParcelBinding"
>>>> type="tns:TrackParcelEndpoint">
>>>>     <soap:binding style="document"
>>>> transport="http://schemas.xmlsoap.org/soap/http"/>
>>>>     <wsdl:operation name="PostParcel">
>>>>       <soap:operation
>>>> soapAction="http://tracker.service.xpectis.com/PostParcel"/>
>>>>       <wsdl:input>
>>>>         <soap:body parts="parameters" use="literal"/>
>>>>       </wsdl:input>
>>>>       <wsdl:output>
>>>>         <soap:body parts="parameters" use="literal"/>
>>>>       </wsdl:output>
>>>>     </wsdl:operation>
>>>>   </wsdl:binding>
>>>>   
>>>>   <!-- Service definition -->
>>>>   <wsdl:service name="TrackParcelService">
>>>>     <wsdl:port binding="tns:TrackParcelBinding" name="TrackParcelPort">
>>>>       <soap:address location="http://tracker.service.xpectis.com"/>
>>>>     </wsdl:port>
>>>>   </wsdl:service>
>>>> </wsdl:definitions>
>>>>
>>>>
>>>> The interface :
>>>>
>>>> package com.xpectis.service.tracker;
>>>>
>>>> import javax.jws.WebMethod;
>>>> import javax.jws.WebParam;
>>>> import javax.jws.WebResult;
>>>> import javax.jws.WebService;
>>>> import javax.jws.soap.SOAPBinding;
>>>> import javax.xml.bind.annotation.XmlSeeAlso;
>>>> import com.xpectis.service.tracker.InputTrackParcel;
>>>> import com.xpectis.service.tracker.OutputTrackParcel;
>>>> import com.xpectis.service.tracker.ObjectFactory;
>>>>
>>>> /**
>>>>  * This class was generated by Apache CXF 2.1.2
>>>>  * Wed Oct 08 11:05:48 CEST 2008
>>>>  * Generated source version: 2.1.2
>>>>  * 
>>>>  */
>>>>  
>>>> @WebService(targetNamespace = "http://tracker.service.xpectis.com",
>>>> name
>>>> =
>>>> "TrackParcelEndpoint")
>>>> @XmlSeeAlso({ObjectFactory.class})
>>>> @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
>>>> public interface TrackParcelEndpoint {
>>>>
>>>>     @WebResult(name = "outputTrackParcel", targetNamespace =
>>>> "http://tracker.service.xpectis.com", partName = "parameters")
>>>>     @WebMethod(operationName = "PostParcel", action =
>>>> "http://tracker.service.xpectis.com/PostParcel")
>>>>     public OutputTrackParcel PostParcel(@WebParam(partName =
>>>> "parameters",
>>>> name = "inputTrackParcel", targetNamespace =
>>>> "http://tracker.service.xpectis.com") InputTrackParcel parameters
>>>>     );
>>>> }
>>>>
>>>> And implementation
>>>>
>>>> package com.xpectis.service.tracker.impl;
>>>>
>>>> import org.apache.commons.logging.Log;
>>>> import org.apache.commons.logging.LogFactory;
>>>>
>>>> import com.xpectis.service.tracker.InputTrackParcel;
>>>> import com.xpectis.service.tracker.OutputTrackParcel;
>>>> import com.xpectis.service.tracker.TrackParcelEndpoint;
>>>>
>>>> import org.apache.cxf.interceptor.*;
>>>>
>>>>
>>>> /**
>>>>  * The webservice we have implemented.
>>>>  */
>>>> @InInterceptors(interceptors =
>>>> "org.apache.cxf.interceptor.LoggingInInterceptor")
>>>> @OutInterceptors(interceptors =
>>>> "org.apache.cxf.interceptor.LoggingOutInterceptor")
>>>> public class TrackerServiceImpl implements TrackParcelEndpoint {
>>>> 	
>>>>     private static final Log LOG =
>>>> LogFactory.getLog(TrackerServiceImpl.class);
>>>> 	private static int result = 0;
>>>> 	
>>>> 	public OutputTrackParcel PostParcel(InputTrackParcel parameters) {
>>>> 		
>>>> 		OutputTrackParcel response = new OutputTrackParcel();
>>>> 		response.setReference(result++);
>>>> 		LOG.info("Result : " + result);
>>>> 		return response;
>>>> 				
>>>> 	}
>>>> }
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> willem.jiang wrote:
>>>>   
>>>>       
>>>>> Can you show me the SEI file  and route configuration ?
>>>>> It looks like a wrapped and unwrapped issue.
>>>>>
>>>>> Willem
>>>>> cmoulliard wrote:
>>>>>     
>>>>>         
>>>>>> Hi,
>>>>>>
>>>>>> I have discovered a small problem between a client created using the
>>>>>> Client
>>>>>> ProxyFactoryBean and my webservice running with Apache Camel - CXF
>>>>>> component.
>>>>>>
>>>>>> When the client calls the web service, the ClientProxyFactoryBean
>>>>>> class
>>>>>> of
>>>>>> CXF generates the following SOAP message :
>>>>>>
>>>>>> <soap:Envelope
>>>>>> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
>>>>>> <soap:Body>
>>>>>> <ns1:PostParcel xmlns:ns1="http://tracker.service.xpectis.com/">
>>>>>> <ns2:inputTrackParcel xmlns:ns2="http://tracker.service.xpectis.com">
>>>>>> <name>chm</name>
>>>>>> <destination>Brussels</destination>
>>>>>> <origin>Florennes</origin>
>>>>>> </ns2:inputTrackParcel>
>>>>>> </ns1:PostParcel>
>>>>>> </soap:Body>
>>>>>> </soap:Envelope>
>>>>>>
>>>>>> Unfortunately, the tag <ns1:PostParcel> is not supported by the web
>>>>>> service
>>>>>> called in camel. If I remove it and send the message using SOAPUI
>>>>>> client,
>>>>>> everything works fine.
>>>>>>
>>>>>> How can I solve this problem in Camel CXF component ?
>>>>>>
>>>>>> Charles Moulliard
>>>>>>
>>>>>> -----
>>>>>> Enterprise Architect
>>>>>>
>>>>>> Xpectis
>>>>>> 12, route d'Esch
>>>>>> L-1470 Luxembourg
>>>>>>
>>>>>> Phone +352 25 10 70 470
>>>>>> Mobile +352 621 45 36 22
>>>>>>
>>>>>> e-mail : cmoulliard@xpectis.com
>>>>>> web site :  www.xpectis.com www.xpectis.com 
>>>>>> My Blog :  http://cmoulliard.blogspot.com/
>>>>>> http://cmoulliard.blogspot.com/  
>>>>>>   
>>>>>>       
>>>>>>           
>>>>>     
>>>>>         
>>>> -----
>>>> Enterprise Architect
>>>>
>>>> Xpectis
>>>> 12, route d'Esch
>>>> L-1470 Luxembourg
>>>>
>>>> Phone +352 25 10 70 470
>>>> Mobile +352 621 45 36 22
>>>>
>>>> e-mail : cmoulliard@xpectis.com
>>>> web site :  www.xpectis.com www.xpectis.com 
>>>> My Blog :  http://cmoulliard.blogspot.com/
>>>> http://cmoulliard.blogspot.com/  
>>>>   
>>>>       
>>>
>>>     
>>
>>
>> -----
>> Enterprise Architect
>>
>> Xpectis
>> 12, route d'Esch
>> L-1470 Luxembourg
>>
>> Phone +352 25 10 70 470
>> Mobile +352 621 45 36 22
>>
>> e-mail : cmoulliard@xpectis.com
>> web site :  www.xpectis.com www.xpectis.com 
>> My Blog :  http://cmoulliard.blogspot.com/
>> http://cmoulliard.blogspot.com/  
>>   
> 
> 
> 


-----
Enterprise Architect

Xpectis
12, route d'Esch
L-1470 Luxembourg

Phone +352 25 10 70 470
Mobile +352 621 45 36 22

e-mail : cmoulliard@xpectis.com
web site :  www.xpectis.com www.xpectis.com 
My Blog :  http://cmoulliard.blogspot.com/ http://cmoulliard.blogspot.com/  
-- 
View this message in context: http://www.nabble.com/Camel-CXF-component-does-not-understand-the-SOAP-message-containing-a-tag-for-the-wsdl%3Aoperation-%21%21%21-tp19881309s22882p19896037.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: Camel CXF component does not understand the SOAP message containing a tag for the wsdl:operation !!!

Posted by Willem Jiang <wi...@gmail.com>.
Hi

I don't know if this is a bug of CXF ,  don't do much investigation here.
But you can set the wrap style by setting a JaxWsServiceFactoryBean to 
the ClientProxyFactoryBean like this

ClientProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 

JaxWsServiceFactoryBean sf = new JaxWsServiceFactoryBean();
sf.setWrapped(false);
factory.setServiceFactory(sf);
......
BTW The sf 's wrappedStyle default value is True.

You can find a document which talks about Wrapped vs. Unwrapped Mode here[1]

[1] http://cwiki.apache.org/CXF20DOC/http-binding.html

Willem

cmoulliard wrote:
> Willem,
>
> Here is the CXF code that I use :
>
> package com.xpectis.service.tracker;
>
> import java.util.GregorianCalendar;
>
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
> import org.apache.cxf.frontend.ClientProxyFactoryBean;
> import org.apache.cxf.interceptor.LoggingInInterceptor;
> import org.apache.cxf.interceptor.LoggingOutInterceptor;
> import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
> import org.junit.Test;
>
> import javax.xml.datatype.DatatypeFactory;
> import javax.xml.datatype.XMLGregorianCalendar;
>
> import junit.framework.Assert;
>
> public class TrackerServiceTest {
> 	
> 	private static String ADDRESS = "http://localhost:9000/tracker";
> 	
> 	//TrackerService trackerService;
> 	
> 	   /** The Constant LOG. */
>     private static final Log LOG =
> LogFactory.getLog(TrackerServiceTest.class);
>
>      /**
>      * Test call PostParcel Web Service.
>      * 
>      * @throws Exception the exception
>      */
> 	@Test
>     public void testPostParcel() throws Exception
>     {
> 		
> 		// Create Client Proxy
> 		ClientProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
> 		factory.setServiceClass(TrackParcelEndpoint.class);
> 		factory.setAddress(ADDRESS);
> 		factory.getInInterceptors().add(new LoggingInInterceptor());
> 		factory.getOutInterceptors().add(new LoggingOutInterceptor());
>
> 		TrackParcelEndpoint client = (TrackParcelEndpoint) factory.create();
> 		
> 		// Create InputTrackParcel client
> 		InputTrackParcel parcel = new InputTrackParcel();
> 		parcel.setName("chm");
> 		parcel.setDestination("Brussels");
> 		parcel.setOrigin("Florennes");
> 		//parcel.setDeliveryDate(calendar);
> 		
>                 // Call web service
> 		OutputTrackParcel result = client.PostParcel(parcel);
> 		LOG.info("Result : " + result.getReference());
> 		Assert.assertNotNull(result);
> 		
> 		
>     }
>     
> }
>
>
> Kind regards,
>
> Charles
>
>
> willem.jiang wrote:
>   
>> Hi,
>>
>> The server side behavior is right (WSDL, SEI) , it can't receive the 
>> wrapped message.
>> Can you show me the client side code which call for the service ?
>> I don't know why your client send a wrapped soap message, maybe you use 
>> a wrong front end.
>>
>> Willem
>>
>> cmoulliard wrote:
>>     
>>> Here is the route configuration in camel :
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <beans xmlns="http://www.springframework.org/schema/beans"
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> 	xmlns:context="http://www.springframework.org/schema/context"
>>> 	xmlns:cxf="http://activemq.apache.org/camel/schema/cxfEndpoint"
>>> 	
>>> 	xsi:schemaLocation="
>>>        http://www.springframework.org/schema/beans
>>>        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>>>        http://activemq.apache.org/camel/schema/cxfEndpoint
>>>        http://activemq.apache.org/camel/schema/cxf/cxfEndpoint.xsd
>>>        http://activemq.apache.org/camel/schema/spring
>>>        http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">
>>>        
>>>        <import resource="classpath:META-INF/cxf/cxf.xml" />
>>>        <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"
>>> />
>>>        <import
>>> resource="classpath:META-INF/cxf/cxf-extension-http-jetty.xml" />
>>>        <import resource="classpath:tracker-core-services.xml" />
>>>
>>>    <cxf:cxfEndpoint id="serviceTracker"
>>>             address="http://localhost:9000/tracker" 
>>>     		serviceClass="com.xpectis.service.tracker.impl.TrackerServiceImpl"
>>>     />
>>>     		
>>>    <camelContext id="camel" trace="true"
>>> xmlns="http://activemq.apache.org/camel/schema/spring">
>>>     <route>
>>>       <from uri="cxf:bean:serviceTracker" />
>>>       <to uri="bean:tracker" /> 
>>>     </route>
>>>    </camelContext> 
>>>    
>>>    <bean id="tracker" class="com.xpectis.tracker.bean.ExtractParcel">
>>>    		<property name="saveService" ref="saveService" />
>>>    </bean>
>>>
>>> </beans>
>>>
>>> The WSDL file :
>>>
>>> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
>>> <wsdl:definitions
>>>   targetNamespace="http://tracker.service.xpectis.com"
>>>   xmlns="http://schemas.xmlsoap.org/wsdl/" 
>>>   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>>>   xmlns:tns="http://tracker.service.xpectis.com"
>>>   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>>>   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>>>   
>>>   <!-- Type definitions for input- and output parameters for webservice
>>> -->
>>>   <wsdl:types>
>>>     <xsd:schema targetNamespace="http://tracker.service.xpectis.com">
>>>       <xsd:element name="inputTrackParcel">
>>>         <xsd:complexType>
>>>           <xsd:sequence>
>>>           	<xsd:element name="name" type="xsd:string" maxOccurs="1"
>>> minOccurs="1"/>
>>>           	<xsd:element name="destination" type="xsd:string"
>>> maxOccurs="1"
>>> minOccurs="1"></xsd:element>
>>>           	<xsd:element name="origin" type="xsd:string"></xsd:element>
>>>           	<xsd:element name="deliveryDate" type="xsd:date" maxOccurs="1"
>>> minOccurs="0"></xsd:element>
>>>           </xsd:sequence>
>>>         </xsd:complexType>
>>>       </xsd:element>
>>>       <xsd:element name="outputTrackParcel">
>>>         <xsd:complexType>
>>>           <xsd:sequence>
>>>             <xsd:element name="reference" type="xsd:int"/>
>>>           </xsd:sequence>
>>>         </xsd:complexType>
>>>       </xsd:element>
>>>     </xsd:schema>
>>>   </wsdl:types>
>>>   
>>>   <!-- Message definitions for input and output -->  
>>>   <wsdl:message name="inputTrackParcel">
>>>     <wsdl:part element="tns:inputTrackParcel" name="parameters"/>
>>>   </wsdl:message>
>>>   <wsdl:message name="outputTrackParcel">
>>>     <wsdl:part element="tns:outputTrackParcel" name="parameters"/>
>>>   </wsdl:message>
>>>   
>>>   <!-- Port (interface) definitions -->
>>>   <wsdl:portType name="TrackParcelEndpoint">
>>>     <wsdl:operation name="PostParcel">
>>>       <wsdl:input message="tns:inputTrackParcel"/>
>>>       <wsdl:output message="tns:outputTrackParcel"/>
>>>     </wsdl:operation>
>>>   </wsdl:portType>
>>>   
>>>   <!-- Port bindings to transports and encoding - HTTP, document literal
>>> encoding is used -->  
>>>   <wsdl:binding name="TrackParcelBinding" type="tns:TrackParcelEndpoint">
>>>     <soap:binding style="document"
>>> transport="http://schemas.xmlsoap.org/soap/http"/>
>>>     <wsdl:operation name="PostParcel">
>>>       <soap:operation
>>> soapAction="http://tracker.service.xpectis.com/PostParcel"/>
>>>       <wsdl:input>
>>>         <soap:body parts="parameters" use="literal"/>
>>>       </wsdl:input>
>>>       <wsdl:output>
>>>         <soap:body parts="parameters" use="literal"/>
>>>       </wsdl:output>
>>>     </wsdl:operation>
>>>   </wsdl:binding>
>>>   
>>>   <!-- Service definition -->
>>>   <wsdl:service name="TrackParcelService">
>>>     <wsdl:port binding="tns:TrackParcelBinding" name="TrackParcelPort">
>>>       <soap:address location="http://tracker.service.xpectis.com"/>
>>>     </wsdl:port>
>>>   </wsdl:service>
>>> </wsdl:definitions>
>>>
>>>
>>> The interface :
>>>
>>> package com.xpectis.service.tracker;
>>>
>>> import javax.jws.WebMethod;
>>> import javax.jws.WebParam;
>>> import javax.jws.WebResult;
>>> import javax.jws.WebService;
>>> import javax.jws.soap.SOAPBinding;
>>> import javax.xml.bind.annotation.XmlSeeAlso;
>>> import com.xpectis.service.tracker.InputTrackParcel;
>>> import com.xpectis.service.tracker.OutputTrackParcel;
>>> import com.xpectis.service.tracker.ObjectFactory;
>>>
>>> /**
>>>  * This class was generated by Apache CXF 2.1.2
>>>  * Wed Oct 08 11:05:48 CEST 2008
>>>  * Generated source version: 2.1.2
>>>  * 
>>>  */
>>>  
>>> @WebService(targetNamespace = "http://tracker.service.xpectis.com", name
>>> =
>>> "TrackParcelEndpoint")
>>> @XmlSeeAlso({ObjectFactory.class})
>>> @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
>>> public interface TrackParcelEndpoint {
>>>
>>>     @WebResult(name = "outputTrackParcel", targetNamespace =
>>> "http://tracker.service.xpectis.com", partName = "parameters")
>>>     @WebMethod(operationName = "PostParcel", action =
>>> "http://tracker.service.xpectis.com/PostParcel")
>>>     public OutputTrackParcel PostParcel(@WebParam(partName =
>>> "parameters",
>>> name = "inputTrackParcel", targetNamespace =
>>> "http://tracker.service.xpectis.com") InputTrackParcel parameters
>>>     );
>>> }
>>>
>>> And implementation
>>>
>>> package com.xpectis.service.tracker.impl;
>>>
>>> import org.apache.commons.logging.Log;
>>> import org.apache.commons.logging.LogFactory;
>>>
>>> import com.xpectis.service.tracker.InputTrackParcel;
>>> import com.xpectis.service.tracker.OutputTrackParcel;
>>> import com.xpectis.service.tracker.TrackParcelEndpoint;
>>>
>>> import org.apache.cxf.interceptor.*;
>>>
>>>
>>> /**
>>>  * The webservice we have implemented.
>>>  */
>>> @InInterceptors(interceptors =
>>> "org.apache.cxf.interceptor.LoggingInInterceptor")
>>> @OutInterceptors(interceptors =
>>> "org.apache.cxf.interceptor.LoggingOutInterceptor")
>>> public class TrackerServiceImpl implements TrackParcelEndpoint {
>>> 	
>>>     private static final Log LOG =
>>> LogFactory.getLog(TrackerServiceImpl.class);
>>> 	private static int result = 0;
>>> 	
>>> 	public OutputTrackParcel PostParcel(InputTrackParcel parameters) {
>>> 		
>>> 		OutputTrackParcel response = new OutputTrackParcel();
>>> 		response.setReference(result++);
>>> 		LOG.info("Result : " + result);
>>> 		return response;
>>> 				
>>> 	}
>>> }
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> willem.jiang wrote:
>>>   
>>>       
>>>> Can you show me the SEI file  and route configuration ?
>>>> It looks like a wrapped and unwrapped issue.
>>>>
>>>> Willem
>>>> cmoulliard wrote:
>>>>     
>>>>         
>>>>> Hi,
>>>>>
>>>>> I have discovered a small problem between a client created using the
>>>>> Client
>>>>> ProxyFactoryBean and my webservice running with Apache Camel - CXF
>>>>> component.
>>>>>
>>>>> When the client calls the web service, the ClientProxyFactoryBean class
>>>>> of
>>>>> CXF generates the following SOAP message :
>>>>>
>>>>> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
>>>>> <soap:Body>
>>>>> <ns1:PostParcel xmlns:ns1="http://tracker.service.xpectis.com/">
>>>>> <ns2:inputTrackParcel xmlns:ns2="http://tracker.service.xpectis.com">
>>>>> <name>chm</name>
>>>>> <destination>Brussels</destination>
>>>>> <origin>Florennes</origin>
>>>>> </ns2:inputTrackParcel>
>>>>> </ns1:PostParcel>
>>>>> </soap:Body>
>>>>> </soap:Envelope>
>>>>>
>>>>> Unfortunately, the tag <ns1:PostParcel> is not supported by the web
>>>>> service
>>>>> called in camel. If I remove it and send the message using SOAPUI
>>>>> client,
>>>>> everything works fine.
>>>>>
>>>>> How can I solve this problem in Camel CXF component ?
>>>>>
>>>>> Charles Moulliard
>>>>>
>>>>> -----
>>>>> Enterprise Architect
>>>>>
>>>>> Xpectis
>>>>> 12, route d'Esch
>>>>> L-1470 Luxembourg
>>>>>
>>>>> Phone +352 25 10 70 470
>>>>> Mobile +352 621 45 36 22
>>>>>
>>>>> e-mail : cmoulliard@xpectis.com
>>>>> web site :  www.xpectis.com www.xpectis.com 
>>>>> My Blog :  http://cmoulliard.blogspot.com/
>>>>> http://cmoulliard.blogspot.com/  
>>>>>   
>>>>>       
>>>>>           
>>>>     
>>>>         
>>> -----
>>> Enterprise Architect
>>>
>>> Xpectis
>>> 12, route d'Esch
>>> L-1470 Luxembourg
>>>
>>> Phone +352 25 10 70 470
>>> Mobile +352 621 45 36 22
>>>
>>> e-mail : cmoulliard@xpectis.com
>>> web site :  www.xpectis.com www.xpectis.com 
>>> My Blog :  http://cmoulliard.blogspot.com/
>>> http://cmoulliard.blogspot.com/  
>>>   
>>>       
>>
>>     
>
>
> -----
> Enterprise Architect
>
> Xpectis
> 12, route d'Esch
> L-1470 Luxembourg
>
> Phone +352 25 10 70 470
> Mobile +352 621 45 36 22
>
> e-mail : cmoulliard@xpectis.com
> web site :  www.xpectis.com www.xpectis.com 
> My Blog :  http://cmoulliard.blogspot.com/ http://cmoulliard.blogspot.com/  
>   


Re: Camel CXF component does not understand the SOAP message containing a tag for the wsdl:operation !!!

Posted by cmoulliard <cm...@gmail.com>.
Willem,

Here is the CXF code that I use :

package com.xpectis.service.tracker;

import java.util.GregorianCalendar;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.cxf.frontend.ClientProxyFactoryBean;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.junit.Test;

import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

import junit.framework.Assert;

public class TrackerServiceTest {
	
	private static String ADDRESS = "http://localhost:9000/tracker";
	
	//TrackerService trackerService;
	
	   /** The Constant LOG. */
    private static final Log LOG =
LogFactory.getLog(TrackerServiceTest.class);

     /**
     * Test call PostParcel Web Service.
     * 
     * @throws Exception the exception
     */
	@Test
    public void testPostParcel() throws Exception
    {
		
		// Create Client Proxy
		ClientProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
		factory.setServiceClass(TrackParcelEndpoint.class);
		factory.setAddress(ADDRESS);
		factory.getInInterceptors().add(new LoggingInInterceptor());
		factory.getOutInterceptors().add(new LoggingOutInterceptor());

		TrackParcelEndpoint client = (TrackParcelEndpoint) factory.create();
		
		// Create InputTrackParcel client
		InputTrackParcel parcel = new InputTrackParcel();
		parcel.setName("chm");
		parcel.setDestination("Brussels");
		parcel.setOrigin("Florennes");
		//parcel.setDeliveryDate(calendar);
		
                // Call web service
		OutputTrackParcel result = client.PostParcel(parcel);
		LOG.info("Result : " + result.getReference());
		Assert.assertNotNull(result);
		
		
    }
    
}


Kind regards,

Charles


willem.jiang wrote:
> 
> Hi,
> 
> The server side behavior is right (WSDL, SEI) , it can't receive the 
> wrapped message.
> Can you show me the client side code which call for the service ?
> I don't know why your client send a wrapped soap message, maybe you use 
> a wrong front end.
> 
> Willem
> 
> cmoulliard wrote:
>> Here is the route configuration in camel :
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <beans xmlns="http://www.springframework.org/schema/beans"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> 	xmlns:context="http://www.springframework.org/schema/context"
>> 	xmlns:cxf="http://activemq.apache.org/camel/schema/cxfEndpoint"
>> 	
>> 	xsi:schemaLocation="
>>        http://www.springframework.org/schema/beans
>>        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>>        http://activemq.apache.org/camel/schema/cxfEndpoint
>>        http://activemq.apache.org/camel/schema/cxf/cxfEndpoint.xsd
>>        http://activemq.apache.org/camel/schema/spring
>>        http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">
>>        
>>        <import resource="classpath:META-INF/cxf/cxf.xml" />
>>        <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"
>> />
>>        <import
>> resource="classpath:META-INF/cxf/cxf-extension-http-jetty.xml" />
>>        <import resource="classpath:tracker-core-services.xml" />
>>
>>    <cxf:cxfEndpoint id="serviceTracker"
>>             address="http://localhost:9000/tracker" 
>>     		serviceClass="com.xpectis.service.tracker.impl.TrackerServiceImpl"
>>     />
>>     		
>>    <camelContext id="camel" trace="true"
>> xmlns="http://activemq.apache.org/camel/schema/spring">
>>     <route>
>>       <from uri="cxf:bean:serviceTracker" />
>>       <to uri="bean:tracker" /> 
>>     </route>
>>    </camelContext> 
>>    
>>    <bean id="tracker" class="com.xpectis.tracker.bean.ExtractParcel">
>>    		<property name="saveService" ref="saveService" />
>>    </bean>
>>
>> </beans>
>>
>> The WSDL file :
>>
>> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
>> <wsdl:definitions
>>   targetNamespace="http://tracker.service.xpectis.com"
>>   xmlns="http://schemas.xmlsoap.org/wsdl/" 
>>   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>>   xmlns:tns="http://tracker.service.xpectis.com"
>>   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>>   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>>   
>>   <!-- Type definitions for input- and output parameters for webservice
>> -->
>>   <wsdl:types>
>>     <xsd:schema targetNamespace="http://tracker.service.xpectis.com">
>>       <xsd:element name="inputTrackParcel">
>>         <xsd:complexType>
>>           <xsd:sequence>
>>           	<xsd:element name="name" type="xsd:string" maxOccurs="1"
>> minOccurs="1"/>
>>           	<xsd:element name="destination" type="xsd:string"
>> maxOccurs="1"
>> minOccurs="1"></xsd:element>
>>           	<xsd:element name="origin" type="xsd:string"></xsd:element>
>>           	<xsd:element name="deliveryDate" type="xsd:date" maxOccurs="1"
>> minOccurs="0"></xsd:element>
>>           </xsd:sequence>
>>         </xsd:complexType>
>>       </xsd:element>
>>       <xsd:element name="outputTrackParcel">
>>         <xsd:complexType>
>>           <xsd:sequence>
>>             <xsd:element name="reference" type="xsd:int"/>
>>           </xsd:sequence>
>>         </xsd:complexType>
>>       </xsd:element>
>>     </xsd:schema>
>>   </wsdl:types>
>>   
>>   <!-- Message definitions for input and output -->  
>>   <wsdl:message name="inputTrackParcel">
>>     <wsdl:part element="tns:inputTrackParcel" name="parameters"/>
>>   </wsdl:message>
>>   <wsdl:message name="outputTrackParcel">
>>     <wsdl:part element="tns:outputTrackParcel" name="parameters"/>
>>   </wsdl:message>
>>   
>>   <!-- Port (interface) definitions -->
>>   <wsdl:portType name="TrackParcelEndpoint">
>>     <wsdl:operation name="PostParcel">
>>       <wsdl:input message="tns:inputTrackParcel"/>
>>       <wsdl:output message="tns:outputTrackParcel"/>
>>     </wsdl:operation>
>>   </wsdl:portType>
>>   
>>   <!-- Port bindings to transports and encoding - HTTP, document literal
>> encoding is used -->  
>>   <wsdl:binding name="TrackParcelBinding" type="tns:TrackParcelEndpoint">
>>     <soap:binding style="document"
>> transport="http://schemas.xmlsoap.org/soap/http"/>
>>     <wsdl:operation name="PostParcel">
>>       <soap:operation
>> soapAction="http://tracker.service.xpectis.com/PostParcel"/>
>>       <wsdl:input>
>>         <soap:body parts="parameters" use="literal"/>
>>       </wsdl:input>
>>       <wsdl:output>
>>         <soap:body parts="parameters" use="literal"/>
>>       </wsdl:output>
>>     </wsdl:operation>
>>   </wsdl:binding>
>>   
>>   <!-- Service definition -->
>>   <wsdl:service name="TrackParcelService">
>>     <wsdl:port binding="tns:TrackParcelBinding" name="TrackParcelPort">
>>       <soap:address location="http://tracker.service.xpectis.com"/>
>>     </wsdl:port>
>>   </wsdl:service>
>> </wsdl:definitions>
>>
>>
>> The interface :
>>
>> package com.xpectis.service.tracker;
>>
>> import javax.jws.WebMethod;
>> import javax.jws.WebParam;
>> import javax.jws.WebResult;
>> import javax.jws.WebService;
>> import javax.jws.soap.SOAPBinding;
>> import javax.xml.bind.annotation.XmlSeeAlso;
>> import com.xpectis.service.tracker.InputTrackParcel;
>> import com.xpectis.service.tracker.OutputTrackParcel;
>> import com.xpectis.service.tracker.ObjectFactory;
>>
>> /**
>>  * This class was generated by Apache CXF 2.1.2
>>  * Wed Oct 08 11:05:48 CEST 2008
>>  * Generated source version: 2.1.2
>>  * 
>>  */
>>  
>> @WebService(targetNamespace = "http://tracker.service.xpectis.com", name
>> =
>> "TrackParcelEndpoint")
>> @XmlSeeAlso({ObjectFactory.class})
>> @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
>> public interface TrackParcelEndpoint {
>>
>>     @WebResult(name = "outputTrackParcel", targetNamespace =
>> "http://tracker.service.xpectis.com", partName = "parameters")
>>     @WebMethod(operationName = "PostParcel", action =
>> "http://tracker.service.xpectis.com/PostParcel")
>>     public OutputTrackParcel PostParcel(@WebParam(partName =
>> "parameters",
>> name = "inputTrackParcel", targetNamespace =
>> "http://tracker.service.xpectis.com") InputTrackParcel parameters
>>     );
>> }
>>
>> And implementation
>>
>> package com.xpectis.service.tracker.impl;
>>
>> import org.apache.commons.logging.Log;
>> import org.apache.commons.logging.LogFactory;
>>
>> import com.xpectis.service.tracker.InputTrackParcel;
>> import com.xpectis.service.tracker.OutputTrackParcel;
>> import com.xpectis.service.tracker.TrackParcelEndpoint;
>>
>> import org.apache.cxf.interceptor.*;
>>
>>
>> /**
>>  * The webservice we have implemented.
>>  */
>> @InInterceptors(interceptors =
>> "org.apache.cxf.interceptor.LoggingInInterceptor")
>> @OutInterceptors(interceptors =
>> "org.apache.cxf.interceptor.LoggingOutInterceptor")
>> public class TrackerServiceImpl implements TrackParcelEndpoint {
>> 	
>>     private static final Log LOG =
>> LogFactory.getLog(TrackerServiceImpl.class);
>> 	private static int result = 0;
>> 	
>> 	public OutputTrackParcel PostParcel(InputTrackParcel parameters) {
>> 		
>> 		OutputTrackParcel response = new OutputTrackParcel();
>> 		response.setReference(result++);
>> 		LOG.info("Result : " + result);
>> 		return response;
>> 				
>> 	}
>> }
>>
>>
>>
>>
>>
>>
>>
>> willem.jiang wrote:
>>   
>>> Can you show me the SEI file  and route configuration ?
>>> It looks like a wrapped and unwrapped issue.
>>>
>>> Willem
>>> cmoulliard wrote:
>>>     
>>>> Hi,
>>>>
>>>> I have discovered a small problem between a client created using the
>>>> Client
>>>> ProxyFactoryBean and my webservice running with Apache Camel - CXF
>>>> component.
>>>>
>>>> When the client calls the web service, the ClientProxyFactoryBean class
>>>> of
>>>> CXF generates the following SOAP message :
>>>>
>>>> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
>>>> <soap:Body>
>>>> <ns1:PostParcel xmlns:ns1="http://tracker.service.xpectis.com/">
>>>> <ns2:inputTrackParcel xmlns:ns2="http://tracker.service.xpectis.com">
>>>> <name>chm</name>
>>>> <destination>Brussels</destination>
>>>> <origin>Florennes</origin>
>>>> </ns2:inputTrackParcel>
>>>> </ns1:PostParcel>
>>>> </soap:Body>
>>>> </soap:Envelope>
>>>>
>>>> Unfortunately, the tag <ns1:PostParcel> is not supported by the web
>>>> service
>>>> called in camel. If I remove it and send the message using SOAPUI
>>>> client,
>>>> everything works fine.
>>>>
>>>> How can I solve this problem in Camel CXF component ?
>>>>
>>>> Charles Moulliard
>>>>
>>>> -----
>>>> Enterprise Architect
>>>>
>>>> Xpectis
>>>> 12, route d'Esch
>>>> L-1470 Luxembourg
>>>>
>>>> Phone +352 25 10 70 470
>>>> Mobile +352 621 45 36 22
>>>>
>>>> e-mail : cmoulliard@xpectis.com
>>>> web site :  www.xpectis.com www.xpectis.com 
>>>> My Blog :  http://cmoulliard.blogspot.com/
>>>> http://cmoulliard.blogspot.com/  
>>>>   
>>>>       
>>>
>>>     
>>
>>
>> -----
>> Enterprise Architect
>>
>> Xpectis
>> 12, route d'Esch
>> L-1470 Luxembourg
>>
>> Phone +352 25 10 70 470
>> Mobile +352 621 45 36 22
>>
>> e-mail : cmoulliard@xpectis.com
>> web site :  www.xpectis.com www.xpectis.com 
>> My Blog :  http://cmoulliard.blogspot.com/
>> http://cmoulliard.blogspot.com/  
>>   
> 
> 
> 


-----
Enterprise Architect

Xpectis
12, route d'Esch
L-1470 Luxembourg

Phone +352 25 10 70 470
Mobile +352 621 45 36 22

e-mail : cmoulliard@xpectis.com
web site :  www.xpectis.com www.xpectis.com 
My Blog :  http://cmoulliard.blogspot.com/ http://cmoulliard.blogspot.com/  
-- 
View this message in context: http://www.nabble.com/Camel-CXF-component-does-not-understand-the-SOAP-message-containing-a-tag-for-the-wsdl%3Aoperation-%21%21%21-tp19881309s22882p19895201.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: Camel CXF component does not understand the SOAP message containing a tag for the wsdl:operation !!!

Posted by Willem Jiang <wi...@gmail.com>.
Hi,

The server side behavior is right (WSDL, SEI) , it can't receive the 
wrapped message.
Can you show me the client side code which call for the service ?
I don't know why your client send a wrapped soap message, maybe you use 
a wrong front end.

Willem

cmoulliard wrote:
> Here is the route configuration in camel :
>
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> 	xmlns:context="http://www.springframework.org/schema/context"
> 	xmlns:cxf="http://activemq.apache.org/camel/schema/cxfEndpoint"
> 	
> 	xsi:schemaLocation="
>        http://www.springframework.org/schema/beans
>        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>        http://activemq.apache.org/camel/schema/cxfEndpoint
>        http://activemq.apache.org/camel/schema/cxf/cxfEndpoint.xsd
>        http://activemq.apache.org/camel/schema/spring
>        http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">
>        
>        <import resource="classpath:META-INF/cxf/cxf.xml" />
>        <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
>        <import
> resource="classpath:META-INF/cxf/cxf-extension-http-jetty.xml" />
>        <import resource="classpath:tracker-core-services.xml" />
>
>    <cxf:cxfEndpoint id="serviceTracker"
>             address="http://localhost:9000/tracker" 
>     		serviceClass="com.xpectis.service.tracker.impl.TrackerServiceImpl"
>     />
>     		
>    <camelContext id="camel" trace="true"
> xmlns="http://activemq.apache.org/camel/schema/spring">
>     <route>
>       <from uri="cxf:bean:serviceTracker" />
>       <to uri="bean:tracker" /> 
>     </route>
>    </camelContext> 
>    
>    <bean id="tracker" class="com.xpectis.tracker.bean.ExtractParcel">
>    		<property name="saveService" ref="saveService" />
>    </bean>
>
> </beans>
>
> The WSDL file :
>
> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> <wsdl:definitions
>   targetNamespace="http://tracker.service.xpectis.com"
>   xmlns="http://schemas.xmlsoap.org/wsdl/" 
>   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>   xmlns:tns="http://tracker.service.xpectis.com"
>   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>   
>   <!-- Type definitions for input- and output parameters for webservice -->
>   <wsdl:types>
>     <xsd:schema targetNamespace="http://tracker.service.xpectis.com">
>       <xsd:element name="inputTrackParcel">
>         <xsd:complexType>
>           <xsd:sequence>
>           	<xsd:element name="name" type="xsd:string" maxOccurs="1"
> minOccurs="1"/>
>           	<xsd:element name="destination" type="xsd:string" maxOccurs="1"
> minOccurs="1"></xsd:element>
>           	<xsd:element name="origin" type="xsd:string"></xsd:element>
>           	<xsd:element name="deliveryDate" type="xsd:date" maxOccurs="1"
> minOccurs="0"></xsd:element>
>           </xsd:sequence>
>         </xsd:complexType>
>       </xsd:element>
>       <xsd:element name="outputTrackParcel">
>         <xsd:complexType>
>           <xsd:sequence>
>             <xsd:element name="reference" type="xsd:int"/>
>           </xsd:sequence>
>         </xsd:complexType>
>       </xsd:element>
>     </xsd:schema>
>   </wsdl:types>
>   
>   <!-- Message definitions for input and output -->  
>   <wsdl:message name="inputTrackParcel">
>     <wsdl:part element="tns:inputTrackParcel" name="parameters"/>
>   </wsdl:message>
>   <wsdl:message name="outputTrackParcel">
>     <wsdl:part element="tns:outputTrackParcel" name="parameters"/>
>   </wsdl:message>
>   
>   <!-- Port (interface) definitions -->
>   <wsdl:portType name="TrackParcelEndpoint">
>     <wsdl:operation name="PostParcel">
>       <wsdl:input message="tns:inputTrackParcel"/>
>       <wsdl:output message="tns:outputTrackParcel"/>
>     </wsdl:operation>
>   </wsdl:portType>
>   
>   <!-- Port bindings to transports and encoding - HTTP, document literal
> encoding is used -->  
>   <wsdl:binding name="TrackParcelBinding" type="tns:TrackParcelEndpoint">
>     <soap:binding style="document"
> transport="http://schemas.xmlsoap.org/soap/http"/>
>     <wsdl:operation name="PostParcel">
>       <soap:operation
> soapAction="http://tracker.service.xpectis.com/PostParcel"/>
>       <wsdl:input>
>         <soap:body parts="parameters" use="literal"/>
>       </wsdl:input>
>       <wsdl:output>
>         <soap:body parts="parameters" use="literal"/>
>       </wsdl:output>
>     </wsdl:operation>
>   </wsdl:binding>
>   
>   <!-- Service definition -->
>   <wsdl:service name="TrackParcelService">
>     <wsdl:port binding="tns:TrackParcelBinding" name="TrackParcelPort">
>       <soap:address location="http://tracker.service.xpectis.com"/>
>     </wsdl:port>
>   </wsdl:service>
> </wsdl:definitions>
>
>
> The interface :
>
> package com.xpectis.service.tracker;
>
> import javax.jws.WebMethod;
> import javax.jws.WebParam;
> import javax.jws.WebResult;
> import javax.jws.WebService;
> import javax.jws.soap.SOAPBinding;
> import javax.xml.bind.annotation.XmlSeeAlso;
> import com.xpectis.service.tracker.InputTrackParcel;
> import com.xpectis.service.tracker.OutputTrackParcel;
> import com.xpectis.service.tracker.ObjectFactory;
>
> /**
>  * This class was generated by Apache CXF 2.1.2
>  * Wed Oct 08 11:05:48 CEST 2008
>  * Generated source version: 2.1.2
>  * 
>  */
>  
> @WebService(targetNamespace = "http://tracker.service.xpectis.com", name =
> "TrackParcelEndpoint")
> @XmlSeeAlso({ObjectFactory.class})
> @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
> public interface TrackParcelEndpoint {
>
>     @WebResult(name = "outputTrackParcel", targetNamespace =
> "http://tracker.service.xpectis.com", partName = "parameters")
>     @WebMethod(operationName = "PostParcel", action =
> "http://tracker.service.xpectis.com/PostParcel")
>     public OutputTrackParcel PostParcel(@WebParam(partName = "parameters",
> name = "inputTrackParcel", targetNamespace =
> "http://tracker.service.xpectis.com") InputTrackParcel parameters
>     );
> }
>
> And implementation
>
> package com.xpectis.service.tracker.impl;
>
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>
> import com.xpectis.service.tracker.InputTrackParcel;
> import com.xpectis.service.tracker.OutputTrackParcel;
> import com.xpectis.service.tracker.TrackParcelEndpoint;
>
> import org.apache.cxf.interceptor.*;
>
>
> /**
>  * The webservice we have implemented.
>  */
> @InInterceptors(interceptors =
> "org.apache.cxf.interceptor.LoggingInInterceptor")
> @OutInterceptors(interceptors =
> "org.apache.cxf.interceptor.LoggingOutInterceptor")
> public class TrackerServiceImpl implements TrackParcelEndpoint {
> 	
>     private static final Log LOG =
> LogFactory.getLog(TrackerServiceImpl.class);
> 	private static int result = 0;
> 	
> 	public OutputTrackParcel PostParcel(InputTrackParcel parameters) {
> 		
> 		OutputTrackParcel response = new OutputTrackParcel();
> 		response.setReference(result++);
> 		LOG.info("Result : " + result);
> 		return response;
> 				
> 	}
> }
>
>
>
>
>
>
>
> willem.jiang wrote:
>   
>> Can you show me the SEI file  and route configuration ?
>> It looks like a wrapped and unwrapped issue.
>>
>> Willem
>> cmoulliard wrote:
>>     
>>> Hi,
>>>
>>> I have discovered a small problem between a client created using the
>>> Client
>>> ProxyFactoryBean and my webservice running with Apache Camel - CXF
>>> component.
>>>
>>> When the client calls the web service, the ClientProxyFactoryBean class
>>> of
>>> CXF generates the following SOAP message :
>>>
>>> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
>>> <soap:Body>
>>> <ns1:PostParcel xmlns:ns1="http://tracker.service.xpectis.com/">
>>> <ns2:inputTrackParcel xmlns:ns2="http://tracker.service.xpectis.com">
>>> <name>chm</name>
>>> <destination>Brussels</destination>
>>> <origin>Florennes</origin>
>>> </ns2:inputTrackParcel>
>>> </ns1:PostParcel>
>>> </soap:Body>
>>> </soap:Envelope>
>>>
>>> Unfortunately, the tag <ns1:PostParcel> is not supported by the web
>>> service
>>> called in camel. If I remove it and send the message using SOAPUI client,
>>> everything works fine.
>>>
>>> How can I solve this problem in Camel CXF component ?
>>>
>>> Charles Moulliard
>>>
>>> -----
>>> Enterprise Architect
>>>
>>> Xpectis
>>> 12, route d'Esch
>>> L-1470 Luxembourg
>>>
>>> Phone +352 25 10 70 470
>>> Mobile +352 621 45 36 22
>>>
>>> e-mail : cmoulliard@xpectis.com
>>> web site :  www.xpectis.com www.xpectis.com 
>>> My Blog :  http://cmoulliard.blogspot.com/
>>> http://cmoulliard.blogspot.com/  
>>>   
>>>       
>>
>>     
>
>
> -----
> Enterprise Architect
>
> Xpectis
> 12, route d'Esch
> L-1470 Luxembourg
>
> Phone +352 25 10 70 470
> Mobile +352 621 45 36 22
>
> e-mail : cmoulliard@xpectis.com
> web site :  www.xpectis.com www.xpectis.com 
> My Blog :  http://cmoulliard.blogspot.com/ http://cmoulliard.blogspot.com/  
>   


Re: Camel CXF component does not understand the SOAP message containing a tag for the wsdl:operation !!!

Posted by cmoulliard <cm...@gmail.com>.
Here is the route configuration in camel :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:cxf="http://activemq.apache.org/camel/schema/cxfEndpoint"
	
	xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://activemq.apache.org/camel/schema/cxfEndpoint
       http://activemq.apache.org/camel/schema/cxf/cxfEndpoint.xsd
       http://activemq.apache.org/camel/schema/spring
       http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">
       
       <import resource="classpath:META-INF/cxf/cxf.xml" />
       <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
       <import
resource="classpath:META-INF/cxf/cxf-extension-http-jetty.xml" />
       <import resource="classpath:tracker-core-services.xml" />

   <cxf:cxfEndpoint id="serviceTracker"
            address="http://localhost:9000/tracker" 
    		serviceClass="com.xpectis.service.tracker.impl.TrackerServiceImpl"
    />
    		
   <camelContext id="camel" trace="true"
xmlns="http://activemq.apache.org/camel/schema/spring">
    <route>
      <from uri="cxf:bean:serviceTracker" />
      <to uri="bean:tracker" /> 
    </route>
   </camelContext> 
   
   <bean id="tracker" class="com.xpectis.tracker.bean.ExtractParcel">
   		<property name="saveService" ref="saveService" />
   </bean>

</beans>

The WSDL file :

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions
  targetNamespace="http://tracker.service.xpectis.com"
  xmlns="http://schemas.xmlsoap.org/wsdl/" 
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:tns="http://tracker.service.xpectis.com"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  
  <!-- Type definitions for input- and output parameters for webservice -->
  <wsdl:types>
    <xsd:schema targetNamespace="http://tracker.service.xpectis.com">
      <xsd:element name="inputTrackParcel">
        <xsd:complexType>
          <xsd:sequence>
          	<xsd:element name="name" type="xsd:string" maxOccurs="1"
minOccurs="1"/>
          	<xsd:element name="destination" type="xsd:string" maxOccurs="1"
minOccurs="1"></xsd:element>
          	<xsd:element name="origin" type="xsd:string"></xsd:element>
          	<xsd:element name="deliveryDate" type="xsd:date" maxOccurs="1"
minOccurs="0"></xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="outputTrackParcel">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="reference" type="xsd:int"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
  </wsdl:types>
  
  <!-- Message definitions for input and output -->  
  <wsdl:message name="inputTrackParcel">
    <wsdl:part element="tns:inputTrackParcel" name="parameters"/>
  </wsdl:message>
  <wsdl:message name="outputTrackParcel">
    <wsdl:part element="tns:outputTrackParcel" name="parameters"/>
  </wsdl:message>
  
  <!-- Port (interface) definitions -->
  <wsdl:portType name="TrackParcelEndpoint">
    <wsdl:operation name="PostParcel">
      <wsdl:input message="tns:inputTrackParcel"/>
      <wsdl:output message="tns:outputTrackParcel"/>
    </wsdl:operation>
  </wsdl:portType>
  
  <!-- Port bindings to transports and encoding - HTTP, document literal
encoding is used -->  
  <wsdl:binding name="TrackParcelBinding" type="tns:TrackParcelEndpoint">
    <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="PostParcel">
      <soap:operation
soapAction="http://tracker.service.xpectis.com/PostParcel"/>
      <wsdl:input>
        <soap:body parts="parameters" use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body parts="parameters" use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  
  <!-- Service definition -->
  <wsdl:service name="TrackParcelService">
    <wsdl:port binding="tns:TrackParcelBinding" name="TrackParcelPort">
      <soap:address location="http://tracker.service.xpectis.com"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>


The interface :

package com.xpectis.service.tracker;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.bind.annotation.XmlSeeAlso;
import com.xpectis.service.tracker.InputTrackParcel;
import com.xpectis.service.tracker.OutputTrackParcel;
import com.xpectis.service.tracker.ObjectFactory;

/**
 * This class was generated by Apache CXF 2.1.2
 * Wed Oct 08 11:05:48 CEST 2008
 * Generated source version: 2.1.2
 * 
 */
 
@WebService(targetNamespace = "http://tracker.service.xpectis.com", name =
"TrackParcelEndpoint")
@XmlSeeAlso({ObjectFactory.class})
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface TrackParcelEndpoint {

    @WebResult(name = "outputTrackParcel", targetNamespace =
"http://tracker.service.xpectis.com", partName = "parameters")
    @WebMethod(operationName = "PostParcel", action =
"http://tracker.service.xpectis.com/PostParcel")
    public OutputTrackParcel PostParcel(@WebParam(partName = "parameters",
name = "inputTrackParcel", targetNamespace =
"http://tracker.service.xpectis.com") InputTrackParcel parameters
    );
}

And implementation

package com.xpectis.service.tracker.impl;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.xpectis.service.tracker.InputTrackParcel;
import com.xpectis.service.tracker.OutputTrackParcel;
import com.xpectis.service.tracker.TrackParcelEndpoint;

import org.apache.cxf.interceptor.*;


/**
 * The webservice we have implemented.
 */
@InInterceptors(interceptors =
"org.apache.cxf.interceptor.LoggingInInterceptor")
@OutInterceptors(interceptors =
"org.apache.cxf.interceptor.LoggingOutInterceptor")
public class TrackerServiceImpl implements TrackParcelEndpoint {
	
    private static final Log LOG =
LogFactory.getLog(TrackerServiceImpl.class);
	private static int result = 0;
	
	public OutputTrackParcel PostParcel(InputTrackParcel parameters) {
		
		OutputTrackParcel response = new OutputTrackParcel();
		response.setReference(result++);
		LOG.info("Result : " + result);
		return response;
				
	}
}







willem.jiang wrote:
> 
> Can you show me the SEI file  and route configuration ?
> It looks like a wrapped and unwrapped issue.
> 
> Willem
> cmoulliard wrote:
>> Hi,
>>
>> I have discovered a small problem between a client created using the
>> Client
>> ProxyFactoryBean and my webservice running with Apache Camel - CXF
>> component.
>>
>> When the client calls the web service, the ClientProxyFactoryBean class
>> of
>> CXF generates the following SOAP message :
>>
>> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
>> <soap:Body>
>> <ns1:PostParcel xmlns:ns1="http://tracker.service.xpectis.com/">
>> <ns2:inputTrackParcel xmlns:ns2="http://tracker.service.xpectis.com">
>> <name>chm</name>
>> <destination>Brussels</destination>
>> <origin>Florennes</origin>
>> </ns2:inputTrackParcel>
>> </ns1:PostParcel>
>> </soap:Body>
>> </soap:Envelope>
>>
>> Unfortunately, the tag <ns1:PostParcel> is not supported by the web
>> service
>> called in camel. If I remove it and send the message using SOAPUI client,
>> everything works fine.
>>
>> How can I solve this problem in Camel CXF component ?
>>
>> Charles Moulliard
>>
>> -----
>> Enterprise Architect
>>
>> Xpectis
>> 12, route d'Esch
>> L-1470 Luxembourg
>>
>> Phone +352 25 10 70 470
>> Mobile +352 621 45 36 22
>>
>> e-mail : cmoulliard@xpectis.com
>> web site :  www.xpectis.com www.xpectis.com 
>> My Blog :  http://cmoulliard.blogspot.com/
>> http://cmoulliard.blogspot.com/  
>>   
> 
> 
> 


-----
Enterprise Architect

Xpectis
12, route d'Esch
L-1470 Luxembourg

Phone +352 25 10 70 470
Mobile +352 621 45 36 22

e-mail : cmoulliard@xpectis.com
web site :  www.xpectis.com www.xpectis.com 
My Blog :  http://cmoulliard.blogspot.com/ http://cmoulliard.blogspot.com/  
-- 
View this message in context: http://www.nabble.com/Camel-CXF-component-does-not-understand-the-SOAP-message-containing-a-tag-for-the-wsdl%3Aoperation-%21%21%21-tp19881309s22882p19881834.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: Camel CXF component does not understand the SOAP message containing a tag for the wsdl:operation !!!

Posted by Willem Jiang <wi...@gmail.com>.
Can you show me the SEI file  and route configuration ?
It looks like a wrapped and unwrapped issue.

Willem
cmoulliard wrote:
> Hi,
>
> I have discovered a small problem between a client created using the Client
> ProxyFactoryBean and my webservice running with Apache Camel - CXF
> component.
>
> When the client calls the web service, the ClientProxyFactoryBean class of
> CXF generates the following SOAP message :
>
> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
> <soap:Body>
> <ns1:PostParcel xmlns:ns1="http://tracker.service.xpectis.com/">
> <ns2:inputTrackParcel xmlns:ns2="http://tracker.service.xpectis.com">
> <name>chm</name>
> <destination>Brussels</destination>
> <origin>Florennes</origin>
> </ns2:inputTrackParcel>
> </ns1:PostParcel>
> </soap:Body>
> </soap:Envelope>
>
> Unfortunately, the tag <ns1:PostParcel> is not supported by the web service
> called in camel. If I remove it and send the message using SOAPUI client,
> everything works fine.
>
> How can I solve this problem in Camel CXF component ?
>
> Charles Moulliard
>
> -----
> Enterprise Architect
>
> Xpectis
> 12, route d'Esch
> L-1470 Luxembourg
>
> Phone +352 25 10 70 470
> Mobile +352 621 45 36 22
>
> e-mail : cmoulliard@xpectis.com
> web site :  www.xpectis.com www.xpectis.com 
> My Blog :  http://cmoulliard.blogspot.com/ http://cmoulliard.blogspot.com/  
>