Thanks for very speedy and helpful reply! I never realised the
limitations of the document/literal style until now. :)
For other newbies: I found a good reference that explains the
different WSDL styles with examples:
http://www-128.ibm.com/developerworks/webservices/library/ws-whichwsdl/
cheers
Joey
On 10/25/06, Tomek Sztelak <[EMAIL PROTECTED]> wrote:
The solution is simple :) Change server settings from document/literal
to document/wrapped. The problem you encountered is limitation of
literal style.
On 10/25/06, Joey Dirk <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I'm having a weird problem where calls to a web service operation gets
> routed to the incorrect method. I'm new to web services and XFire so
> please be patient with me :)
>
> For example I have 2 SOAP operations defined in the (generated) WSDL,
> named "foo" and "bar". They are using named parameters specific to the
> operation, but both methods on the underlying java class happen to
> have the same native types as args.
>
> What I've found is that no matter which web service operation is
> invoked, "foo" or "bar", the foo() method is always called on the web
> service class.
>
> If I change the java class to have different input arguments on each
> method then the problem goes away. I am using Castor with Aegis to
> handle the bindings, with Spring to tie it all together. Please see my
> code snippets below.
>
> How can I fix this? I'm sure I'm missing something, as I don't imagine
> that ignoring method signatures is default behaviour in XFire!
>
>
> Thanks in advance,
> Joey
>
>
>
> The web service class:
>
> public interface MyWebService {
> public Integer foo(String input) throws Exception;
> public Integer bar(String input) throws Exception;
> // E.g. if I change the method bar() to be as below i.e. with
> different input args, then the web service calls are routed to the
> correct method
> // public Integer bar(Integer aDifferentTypedArg) throws Exception;
> }
>
>
> The aegis mapping file:
>
> <mappings>
> <mapping>
> <method name="foo">
> <return-type mappedName="FooOutput"/>
> <parameter index="0" mappedName="FooInput"/>
> </method>
> <method name="bar">
> <return-type mappedName="BarOutput"/>
> <parameter index="0" mappedName="BarInput"/>
> </method>
> </mapping>
> </mappings>
>
>
> The Spring config:
>
> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
> "http://www.springframework.org/dtd/spring-beans.dtd">
>
> <beans>
> <import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>
>
> <bean id="addressingHandler"
> class="org.codehaus.xfire.addressing.AddressingInHandler"/>
> <bean id="castorTypeRegistry"
> class="org.codehaus.xfire.castor.CastorTypeMappingRegistry" />
> <bean id="bindingProvider"
> class="org.codehaus.xfire.aegis.AegisBindingProvider">
> <constructor-arg ref="castorTypeRegistry" />
> </bean>
> <bean id="castorServiceFactory"
> class="org.codehaus.xfire.service.binding.ObjectServiceFactory">
> <constructor-arg index="0" ref="xfire.transportManager" />
> <constructor-arg index="1" ref="bindingProvider" />
> </bean>
>
> <bean id="myWebService" class="net.xyz.MyWebServiceImpl"/>
> <bean name="myWebServiceBean"
> class="org.codehaus.xfire.spring.ServiceBean">
> <property name="serviceBean" ref="myWebService"/>
> <property name="namespace" value="http://www.example.com"/>
> <property name="serviceClass" value="net.xyz.MyWebService"/>
> <property name="schemas">
> <list>
>
<value>META-INF/schema/MyWebService.xsd</value>
> </list>
> </property>
> <property name="style" value="document"/>
> <property name="serviceFactory" ref="castorServiceFactory"/>
> <property name="inHandlers">
> <list>
> <ref bean="addressingHandler"/>
> </list>
> </property>
> </bean>
>
> </beans>
>
>
> The (generated) WSDL:
> <wsdl:types>
> <xsd:schema>
> <xsd:element name="FooInputBean" type="xsd:string"/>
> <xsd:element name="FooOutputBean" type="xsd:integer"/>
> </xsd:schema>
> </wsdl:types>
> <wsdl:message name="FooResponse">
> <wsdl:part name="FooOutput" element="FooOutputBean"/>
> </wsdl:message>
> <wsdl:message name="FooRequest">
> <wsdl:part name="FooInput" element="FooInputBean"/>
> </wsdl:message>
>
> etc...
>
> <wsdl:operation name="foo">
> <wsdlsoap:operation soapAction=""/>
> <wsdl:input name="FooRequest">
> <wsdlsoap:body use="literal"/>
> </wsdl:input>
> <wsdl:output name="FooResponse">
> <wsdlsoap:body use="literal"/>
> </wsdl:output>
> </wsdl:operation>
>
> <wsdl:operation name="bar">
> <wsdlsoap:operation soapAction=""/>
> <wsdl:input name="barRequest">
> <wsdlsoap:body use="literal"/>
> </wsdl:input>
> <wsdl:output name="barResponse">
> <wsdlsoap:body use="literal"/>
> </wsdl:output>
> </wsdl:operation>
>
> ---------------------------------------------------------------------
> To unsubscribe from this list please visit:
>
> http://xircles.codehaus.org/manage_email
>
>
--
-----
When one of our products stops working, we'll blame another vendor
within 24 hours.
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email