camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem Jiang <willem.ji...@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 09:01:50 GMT
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/  
>   


Mime
View raw message