When defining a document/literal style service, your input message must
contain at most one body part. You cannot list each of your input elements
as separate parts in the input message definition. You must define a wrapper
element for your two input parameters and reference this one element in your
message part:

<element name="double>
  <complexType>
     <sequence>
        <element ref="tns1:in0"/>
        <element ref="tns1:in1"/>
     </sequence>
  </complexType>
</element>

<wsdl:message name="echoString_doubleRequest">
  <wsdl:part element="impl:double" name="input" /> 
</wsdl:message> 

Note that you must not include the parameterOrder attribute in your
operation description when using document/literal. 

Also note that when using a document/literal style service the service
interface would need to look like this:

  in3 echoString(double) (where double is a bean containing in0 and in1)

rather than like this:

  in3 echoString(in0, in1)

If you prefer the second type of interface, then you must use either the
"rpc" style or the "wrapped" style. "rpc" style will generate an rpc/encoded
service. "wrapped" style will generate a doc/literal service that supports
an RPC style invocation interface.

The "wrapped" style is a convention that requires you to give your input
message element the same name as the operation, and that element must be
defined as a complex type with a sequence group containing your input
parameters. A "wrapped" style wsdl for this service would look like this:

<?xml version="1.0" encoding="UTF-8" ?> 
  <wsdl:definitions
targetNamespace="http://localhost:8080/axis/services/EchoTest";
xmlns:apachesoap="http://xml.apache.org/xml-soap";
xmlns:impl="http://localhost:8080/axis/services/EchoTest";
xmlns:intf="http://localhost:8080/axis/services/EchoTest";
xmlns:tns1="http://DefaultNamespace";
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
  <!-- 
WSDL created by Apache Axis version: 1.2RC1
Built on Oct 29, 2004 (05:51:30 IST)

  --> 
  <wsdl:types>
  <schema elementFormDefault="qualified"
targetNamespace="http://DefaultNamespace";
xmlns="http://www.w3.org/2001/XMLSchema";>
  <element name="in0" type="xsd:string" /> 
  <element name="in1" type="xsd:string" /> 
  <element name="in2" type="xsd:string" />
  </schema>
  <schema elementFormDefault="qualified"
targetNamespace="http://localhost:8080/axis/services/EchoTest";
xmlns="http://www.w3.org/2001/XMLSchema";>
  <import namespace=" http://DefaultNamespace"/>
  <element name="echoStringReturn" type="xsd:string" /> 
  <element name="echoString_doubleReturn" type="xsd:string" /> 
  <element name="echoString_double>
    <complexType>
     <sequence>
        <element ref="tns1:in0"/>
        <element ref="tns1:in1"/>
     </sequence>
    </complexType>
  </element>
  </schema>
  </wsdl:types>
  <wsdl:message name="echoStringResponse">
  <wsdl:part element="impl:echoStringReturn" name="echoStringReturn" /> 
  </wsdl:message>
  <wsdl:message name="echoString_doubleResponse">
  <wsdl:part element="impl:echoString_doubleReturn"
name="echoString_doubleReturn" />
  </wsdl:message>
  <wsdl:message name="echoStringRequest">
  <wsdl:part element="tns1:in0" name="parameters" /> 
  </wsdl:message>
  <wsdl:message name="echoString_doubleRequest">
  <wsdl:part element="impl:echoString_double" name="parameters" /> 
  </wsdl:message>
  <wsdl:portType name="EchoTest">
  <wsdl:operation name="echoString">
  <wsdl:input message="impl:echoStringRequest" name="echoStringRequest" /> 
  <wsdl:output message="impl:echoStringResponse" name="echoStringResponse"
/> 
  </wsdl:operation>
  <wsdl:operation name="echoString_double">
  <wsdl:input message="impl:echoString_doubleRequest"
name="echoString_doubleRequest" />
  <wsdl:output message="impl:echoString_doubleResponse"
name="echoString_doubleResponse" />
  </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="EchoTestSoapBinding" type="impl:EchoTest">
  <wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"; />
  <wsdl:operation name="echoString">
  <wsdlsoap:operation soapAction="" /> 
  <wsdl:input name="echoStringRequest">
  <wsdlsoap:body use="literal" /> 
  </wsdl:input>
  <wsdl:output name="echoStringResponse">
  <wsdlsoap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
  <wsdl:operation name="echoString_double">
  <wsdlsoap:operation soapAction="" /> 
  <wsdl:input name="echoString_doubleRequest">
  <wsdlsoap:body use="literal" /> 
  </wsdl:input>
  <wsdl:output name="echoString_doubleResponse">
  <wsdlsoap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="EchoTestService">
  <wsdl:port binding="impl:EchoTestSoapBinding" name="EchoTest">
  <wsdlsoap:address location="http://localhost:8080/axis/services/EchoTest";
/> 
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>  

-----Original Message-----
From: jayachandra [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, November 17, 2004 7:39 AM
To: [EMAIL PROTECTED]
Subject: Help needed in invoking a doc/lit web service.

Hi all,
I've with me the following wsdl of a document literal style deployed
EchoTest web service. It has two basic methods echoString (this takes
one string parameter asn input and echoes it as is) and
echoString_double (this takes two strings as input parameters and
echoes their concatenated result as output).
If I were to invoke the echoString_double method of this service how
should the body of my soap message look like. Any help in this
direction will be appreciated a lot.

wsdl of the deployed EchoTest service (obtained with the ?wsdl option
in the browser)

 <?xml version="1.0" encoding="UTF-8" ?> 
  <wsdl:definitions
targetNamespace="http://localhost:8080/axis/services/EchoTest";
xmlns:apachesoap="http://xml.apache.org/xml-soap";
xmlns:impl="http://localhost:8080/axis/services/EchoTest";
xmlns:intf="http://localhost:8080/axis/services/EchoTest";
xmlns:tns1="http://DefaultNamespace";
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
  <!-- 
WSDL created by Apache Axis version: 1.2RC1
Built on Oct 29, 2004 (05:51:30 IST)

  --> 
  <wsdl:types>
  <schema elementFormDefault="qualified"
targetNamespace="http://DefaultNamespace";
xmlns="http://www.w3.org/2001/XMLSchema";>
  <element name="in0" type="xsd:string" /> 
  <element name="in1" type="xsd:string" /> 
  <element name="in2" type="xsd:string" /> 
  </schema>
  <schema elementFormDefault="qualified"
targetNamespace="http://localhost:8080/axis/services/EchoTest";
xmlns="http://www.w3.org/2001/XMLSchema";>
  <element name="echoStringReturn" type="xsd:string" /> 
  <element name="echoString_doubleReturn" type="xsd:string" /> 
  </schema>
  </wsdl:types>
  <wsdl:message name="echoStringResponse">
  <wsdl:part element="impl:echoStringReturn" name="echoStringReturn" /> 
  </wsdl:message>
  <wsdl:message name="echoString_doubleResponse">
  <wsdl:part element="impl:echoString_doubleReturn"
name="echoString_doubleReturn" />
  </wsdl:message>
  <wsdl:message name="echoStringRequest">
  <wsdl:part element="tns1:in0" name="in0" /> 
  </wsdl:message>
  <wsdl:message name="echoString_doubleRequest">
  <wsdl:part element="tns1:in1" name="in0" /> 
  <wsdl:part element="tns1:in2" name="in1" /> 
  </wsdl:message>
  <wsdl:portType name="EchoTest">
  <wsdl:operation name="echoString" parameterOrder="in0">
  <wsdl:input message="impl:echoStringRequest" name="echoStringRequest" /> 
  <wsdl:output message="impl:echoStringResponse" name="echoStringResponse"
/> 
  </wsdl:operation>
  <wsdl:operation name="echoString_double" parameterOrder="in0 in1">
  <wsdl:input message="impl:echoString_doubleRequest"
name="echoString_doubleRequest" />
  <wsdl:output message="impl:echoString_doubleResponse"
name="echoString_doubleResponse" />
  </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="EchoTestSoapBinding" type="impl:EchoTest">
  <wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"; />
  <wsdl:operation name="echoString">
  <wsdlsoap:operation soapAction="" /> 
  <wsdl:input name="echoStringRequest">
  <wsdlsoap:body use="literal" /> 
  </wsdl:input>
  <wsdl:output name="echoStringResponse">
  <wsdlsoap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
  <wsdl:operation name="echoString_double">
  <wsdlsoap:operation soapAction="" /> 
  <wsdl:input name="echoString_doubleRequest">
  <wsdlsoap:body use="literal" /> 
  </wsdl:input>
  <wsdl:output name="echoString_doubleResponse">
  <wsdlsoap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="EchoTestService">
  <wsdl:port binding="impl:EchoTestSoapBinding" name="EchoTest">
  <wsdlsoap:address location="http://localhost:8080/axis/services/EchoTest";
/> 
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>

---------end of wsdl-----------

Thank you,
Jayachandra
-- 
-- Jaya

Reply via email to