You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by ha...@raceeend-2.demon.nl on 2008/09/23 20:25:59 UTC

Ambigues Webmethods?

Hi,

I have 3 operations A, B, C, with an empty parameterlist.
Whichever Webmethod I call, at the serverside always the same webmethod is called.
How can I solve this?

Here are parts of my WSDL from which I generate my classes:


		<element name="ArrayOfCustomers">
		  <complexType>
		    <sequence>
		      <element name="Customer" minOccurs="0" maxOccurs="unbounded" type="tns:Customer"/>
		    </sequence>
		  </complexType>
		</element>

		<complexType name="Customer">
			<sequence>
				<element name="name" type="string"/>
				<element name="street" type="string"/>
				<element name="city" type="string"/>
			</sequence>
		</complexType>

 		<element name="ShopException" type="xsd:string"/>

		/schema>
	</types>

	<message name="CustomerRequest"/>
	<message name="CustomerResponse">
		<part name="result" element="tns:ArrayOfCustomers"/>
	</message>

	<message name="HandlerRequest"/>
	<message name="HandlerResponse">
		<part name="result" element="tns:ArrayOfHandlers"/>
	</message>

	<message name="ShopException">
		<part name="ShopException" element="tns:ShopException"/>
	</message>


	<portType name="RequestPortType">
		<operation name="getCustomers">
			<input message="tns:CustomerRequest"/>
			<output message="tns:CustomerResponse"/>
			<fault name="ShopException" message="tns:ShopException"/>
		</operation>
		<operation name="getHandlers">
			<input message="tns:HandlerRequest"/>
			<output message="tns:HandlerResponse"/>
			<fault name="ShopException" message="tns:ShopException"/>
		</operation>

the WSDL is literal/document one.



Re: Ambigues Webmethods?

Posted by ha...@raceeend-2.demon.nl.
Hi Daniel,

I adjusted my WSDL according to your suggestion,
now the webservices do function as expected
Thanks you very much for the information.

Harry


>
> Yea, this won't work.   There is nothing on the wire to indicate which method
> to call.    Basically, the soap:body is empty so we pretty much just grab one
> of the methods that will work for that.
>
> Technically, this wsdl is not WSI-BP compliant at all and the tools should
> probably flag it.   The request messages need to have a part that points to a
> unique element.  Example:
> <element name="CustomerRequest">
>    <complexType>
>       <sequence/>
>    </complexType>
> </element>
>
> <message name="CustomerRequest">
>     <part name="parameters" element="tns:CustomerRequest"/>
> </message>
>
>
> Dan
>
>
>
> On Tuesday 23 September 2008 2:25:59 pm harry@raceeend-2.demon.nl wrote:
>> Hi,
>>
>> I have 3 operations A, B, C, with an empty parameterlist.
>> Whichever Webmethod I call, at the serverside always the same webmethod is
>> called. How can I solve this?
>>
>> Here are parts of my WSDL from which I generate my classes:
>>
>>
>> 		<element name="ArrayOfCustomers">
>> 		  <complexType>
>> 		    <sequence>
>> 		      <element name="Customer" minOccurs="0" maxOccurs="unbounded"
>> type="tns:Customer"/> </sequence>
>> 		  </complexType>
>> 		</element>
>>
>> 		<complexType name="Customer">
>> 			<sequence>
>> 				<element name="name" type="string"/>
>> 				<element name="street" type="string"/>
>> 				<element name="city" type="string"/>
>> 			</sequence>
>> 		</complexType>
>>
>>  		<element name="ShopException" type="xsd:string"/>
>>
>> 		/schema>
>> 	</types>
>>
>> 	<message name="CustomerRequest"/>
>> 	<message name="CustomerResponse">
>> 		<part name="result" element="tns:ArrayOfCustomers"/>
>> 	</message>
>>
>> 	<message name="HandlerRequest"/>
>> 	<message name="HandlerResponse">
>> 		<part name="result" element="tns:ArrayOfHandlers"/>
>> 	</message>
>>
>> 	<message name="ShopException">
>> 		<part name="ShopException" element="tns:ShopException"/>
>> 	</message>
>>
>>
>> 	<portType name="RequestPortType">
>> 		<operation name="getCustomers">
>> 			<input message="tns:CustomerRequest"/>
>> 			<output message="tns:CustomerResponse"/>
>> 			<fault name="ShopException" message="tns:ShopException"/>
>> 		</operation>
>> 		<operation name="getHandlers">
>> 			<input message="tns:HandlerRequest"/>
>> 			<output message="tns:HandlerResponse"/>
>> 			<fault name="ShopException" message="tns:ShopException"/>
>> 		</operation>
>>
>> the WSDL is literal/document one.
>
>
>
> --
> Daniel Kulp
> dkulp@apache.org
> http://www.dankulp.com/blog
>


Re: Ambigues Webmethods?

Posted by Daniel Kulp <dk...@apache.org>.
Yea, this won't work.   There is nothing on the wire to indicate which method 
to call.    Basically, the soap:body is empty so we pretty much just grab one 
of the methods that will work for that.  

Technically, this wsdl is not WSI-BP compliant at all and the tools should 
probably flag it.   The request messages need to have a part that points to a 
unique element.  Example:
<element name="CustomerRequest">
   <complexType>
      <sequence/>
   </complexType>
</element>

<message name="CustomerRequest">
    <part name="parameters" element="tns:CustomerRequest"/>
</message>


Dan



On Tuesday 23 September 2008 2:25:59 pm harry@raceeend-2.demon.nl wrote:
> Hi,
>
> I have 3 operations A, B, C, with an empty parameterlist.
> Whichever Webmethod I call, at the serverside always the same webmethod is
> called. How can I solve this?
>
> Here are parts of my WSDL from which I generate my classes:
>
>
> 		<element name="ArrayOfCustomers">
> 		  <complexType>
> 		    <sequence>
> 		      <element name="Customer" minOccurs="0" maxOccurs="unbounded"
> type="tns:Customer"/> </sequence>
> 		  </complexType>
> 		</element>
>
> 		<complexType name="Customer">
> 			<sequence>
> 				<element name="name" type="string"/>
> 				<element name="street" type="string"/>
> 				<element name="city" type="string"/>
> 			</sequence>
> 		</complexType>
>
>  		<element name="ShopException" type="xsd:string"/>
>
> 		/schema>
> 	</types>
>
> 	<message name="CustomerRequest"/>
> 	<message name="CustomerResponse">
> 		<part name="result" element="tns:ArrayOfCustomers"/>
> 	</message>
>
> 	<message name="HandlerRequest"/>
> 	<message name="HandlerResponse">
> 		<part name="result" element="tns:ArrayOfHandlers"/>
> 	</message>
>
> 	<message name="ShopException">
> 		<part name="ShopException" element="tns:ShopException"/>
> 	</message>
>
>
> 	<portType name="RequestPortType">
> 		<operation name="getCustomers">
> 			<input message="tns:CustomerRequest"/>
> 			<output message="tns:CustomerResponse"/>
> 			<fault name="ShopException" message="tns:ShopException"/>
> 		</operation>
> 		<operation name="getHandlers">
> 			<input message="tns:HandlerRequest"/>
> 			<output message="tns:HandlerResponse"/>
> 			<fault name="ShopException" message="tns:ShopException"/>
> 		</operation>
>
> the WSDL is literal/document one.



-- 
Daniel Kulp
dkulp@apache.org
http://www.dankulp.com/blog