camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cmoulliard <cmoulli...@gmail.com>
Subject Re: Camel CXF component does not understand the SOAP message containing a tag for the wsdl:operation !!!
Date Thu, 09 Oct 2008 10:16:59 GMT

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.


Mime
View raw message