You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2004/05/17 18:24:51 UTC

cvs commit: ws-axis/java/samples/client DynamicInvoker.java readme

dims        2004/05/17 09:24:51

  Modified:    java/src/org/apache/axis/client Call.java
               java/samples/client DynamicInvoker.java readme
  Log:
  - Get DynamicInvoker to work again with simple samples
  - Get DynamicInvoker to work with complex return type (result is stored in a dom element)
  
  Revision  Changes    Path
  1.224     +2 -2      ws-axis/java/src/org/apache/axis/client/Call.java
  
  Index: Call.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/client/Call.java,v
  retrieving revision 1.223
  retrieving revision 1.224
  diff -u -r1.223 -r1.224
  --- Call.java	9 May 2004 09:55:43 -0000	1.223
  +++ Call.java	17 May 2004 16:24:50 -0000	1.224
  @@ -937,7 +937,7 @@
   
           //if (parmAndRetReq) {
           ParameterDesc param = new ParameterDesc();
  -        param.setQName( paramName );
  +        param.setQName(new QName(paramName.getNamespaceURI(),Utils.getLastLocalPart(paramName.getLocalPart())));
           param.setTypeQName( xmlType );
           param.setJavaType( javaType );
           byte mode = ParameterDesc.IN;
  @@ -1024,7 +1024,7 @@
               operation = new OperationDesc();
   
           ParameterDesc param = new ParameterDesc();
  -        param.setQName(paramName);
  +        param.setQName(new QName(paramName.getNamespaceURI(),Utils.getLastLocalPart(paramName.getLocalPart())));
           param.setTypeQName(xmlType);
           param.setJavaType(javaType);
           if (parameterMode == ParameterMode.IN) {
  
  
  
  1.11      +25 -5     ws-axis/java/samples/client/DynamicInvoker.java
  
  Index: DynamicInvoker.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/samples/client/DynamicInvoker.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- DynamicInvoker.java	25 Feb 2004 14:02:22 -0000	1.10
  +++ DynamicInvoker.java	17 May 2004 16:24:51 -0000	1.11
  @@ -16,7 +16,11 @@
   package samples.client;
   
   import org.apache.axis.Constants;
  +import org.apache.axis.utils.XMLUtils;
   import org.apache.axis.encoding.ser.SimpleDeserializer;
  +import org.apache.axis.encoding.ser.ElementSerializerFactory;
  +import org.apache.axis.encoding.ser.ElementDeserializerFactory;
  +import org.apache.axis.encoding.ser.ElementDeserializer;
   import org.apache.axis.wsdl.gen.Parser;
   import org.apache.axis.wsdl.symbolTable.BaseType;
   import org.apache.axis.wsdl.symbolTable.BindingEntry;
  @@ -26,6 +30,7 @@
   import org.apache.axis.wsdl.symbolTable.SymTabEntry;
   import org.apache.axis.wsdl.symbolTable.SymbolTable;
   import org.apache.axis.wsdl.symbolTable.TypeEntry;
  +import org.w3c.dom.Element;
   
   import javax.wsdl.Binding;
   import javax.wsdl.Operation;
  @@ -108,11 +113,17 @@
           DynamicInvoker invoker = new DynamicInvoker(wsdlLocation);
           HashMap map = invoker.invokeMethod(operationName, portName, args);
   
  -        // print result
  -        System.out.println("Result:");
  -        for (Iterator it = map.keySet().iterator(); it.hasNext();) {
  -            String name = (String) it.next();
  -            System.out.println(name + "=" + map.get(name));
  +        for (Iterator it = map.entrySet().iterator(); it.hasNext();) {
  +            Map.Entry entry = (Map.Entry) it.next();
  +            String key = (String) entry.getKey();
  +            Object value = entry.getValue();
  +            if (value instanceof Element) {
  +                System.out.println("====== " + key + " ======");
  +                XMLUtils.ElementToStream((Element) value, System.out);
  +                System.out.println("=========================");
  +            } else {
  +                System.out.println(key + "=" + value);
  +            }
           }
           System.out.println("\nDone!");
       }
  @@ -152,6 +163,8 @@
           Call call = dpf.createCall(QName.valueOf(portName),
                                      QName.valueOf(operationName));
           ((org.apache.axis.client.Call)call).setTimeout(new Integer(15*1000));
  +        ((org.apache.axis.client.Call)call).setProperty(ElementDeserializer.DESERIALIZE_CURRENT_ELEMENT, Boolean.TRUE);
  +        
           // Output types and names
           Vector outNames = new Vector();
   
  @@ -194,6 +207,13 @@
   
           // set output type
           if (parameters.returnParam != null) {
  +
  +            if(!parameters.returnParam.getType().isBaseType()) {
  +                ((org.apache.axis.client.Call)call).registerTypeMapping(org.w3c.dom.Element.class, parameters.returnParam.getType().getQName(),
  +                            new ElementSerializerFactory(),
  +                            new ElementDeserializerFactory());
  +            }
  +
               // Get the QName for the return Type
               QName returnType = org.apache.axis.wsdl.toJava.Utils.getXSIType(
                       parameters.returnParam);
  
  
  
  1.3       +2 -2      ws-axis/java/samples/client/readme
  
  Index: readme
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/samples/client/readme,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- readme	25 Oct 2002 19:54:27 -0000	1.2
  +++ readme	17 May 2004 16:24:51 -0000	1.3
  @@ -14,7 +14,7 @@
   
   3.  Run the sample.
       Finally, to run the client, run:
  -        java samples.client.DynamicInvoker http://www.xmethods.net/sd/2001/TemperatureService.wsdl getTemp 02067
  -        java samples.client.DynamicInvoker http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl getQuote IBM
   	java samples.client.DynamicInvoker http://mssoapinterop.org/asmx/xsd/round4XSD.wsdl echoString "Hello World!!!"
   	java samples.client.DynamicInvoker http://samples.gotdotnet.com/quickstart/aspplus/samples/services/MathService/VB/MathService.asmx?WSDL Add 3 4
  +    http://api.google.com/GoogleSearch.wsdl doGoogleSearch 00000000000000000000000000000000 davanum 0 10 false "" false "" latin1 latin1
  +	[NOTE: Replace the 00000 with your google api key]
  
  
  

supporting Posted by Aleksander Slominski <as...@cs.indiana.edu>.
dims@apache.org wrote:

>http://samples.gotdotnet.com/quickstart/aspplus/samples/services/MathService/VB/MathService.asmx?WSDL Add 3 4
>  
>
hi Dims,

do you know what is the status of this WSDL file - it seems it uses 
*incorrect* style='document' on soap:binding
(allowed is* style="rpc|document"* only as per 
http://www.w3.org/TR/wsdl#_soap:binding)

  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />

shouldnt AXIS generate at least warning that it is incorrect style 
(maybe AXIS already does it)?

thanks.

alek

ps. here is whole WSDL - did i miss something?

<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://tempuri.org/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://tempuri.org/" xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
      <s:element name="Add">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="A" type="s:float" />
            <s:element minOccurs="1" maxOccurs="1" name="B" type="s:float" />
          </s:sequence>

        </s:complexType>
      </s:element>
      <s:element name="AddResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="AddResult" type="s:float" />
          </s:sequence>
        </s:complexType>
      </s:element>

      <s:element name="Subtract">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="A" type="s:float" />
            <s:element minOccurs="1" maxOccurs="1" name="B" type="s:float" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="SubtractResponse">

        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="SubtractResult" type="s:float" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="Multiply">
        <s:complexType>
          <s:sequence>

            <s:element minOccurs="1" maxOccurs="1" name="A" type="s:float" />
            <s:element minOccurs="1" maxOccurs="1" name="B" type="s:float" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="MultiplyResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="MultiplyResult" type="s:float" />

          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="Divide">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="A" type="s:float" />
            <s:element minOccurs="1" maxOccurs="1" name="B" type="s:float" />
          </s:sequence>

        </s:complexType>
      </s:element>
      <s:element name="DivideResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="DivideResult" type="s:float" />
          </s:sequence>
        </s:complexType>
      </s:element>

      <s:element name="float" type="s:float" />
    </s:schema>
  </types>
  <message name="AddSoapIn">
    <part name="parameters" element="s0:Add" />
  </message>
  <message name="AddSoapOut">
    <part name="parameters" element="s0:AddResponse" />
  </message>

  <message name="SubtractSoapIn">
    <part name="parameters" element="s0:Subtract" />
  </message>
  <message name="SubtractSoapOut">
    <part name="parameters" element="s0:SubtractResponse" />
  </message>
  <message name="MultiplySoapIn">
    <part name="parameters" element="s0:Multiply" />
  </message>

  <message name="MultiplySoapOut">
    <part name="parameters" element="s0:MultiplyResponse" />
  </message>
  <message name="DivideSoapIn">
    <part name="parameters" element="s0:Divide" />
  </message>
  <message name="DivideSoapOut">
    <part name="parameters" element="s0:DivideResponse" />
  </message>

  <message name="AddHttpGetIn">
    <part name="A" type="s:string" />
    <part name="B" type="s:string" />
  </message>
  <message name="AddHttpGetOut">
    <part name="Body" element="s0:float" />
  </message>
  <message name="SubtractHttpGetIn">
    <part name="A" type="s:string" />

    <part name="B" type="s:string" />
  </message>
  <message name="SubtractHttpGetOut">
    <part name="Body" element="s0:float" />
  </message>
  <message name="MultiplyHttpGetIn">
    <part name="A" type="s:string" />
    <part name="B" type="s:string" />
  </message>

  <message name="MultiplyHttpGetOut">
    <part name="Body" element="s0:float" />
  </message>
  <message name="DivideHttpGetIn">
    <part name="A" type="s:string" />
    <part name="B" type="s:string" />
  </message>
  <message name="DivideHttpGetOut">
    <part name="Body" element="s0:float" />

  </message>
  <message name="AddHttpPostIn">
    <part name="A" type="s:string" />
    <part name="B" type="s:string" />
  </message>
  <message name="AddHttpPostOut">
    <part name="Body" element="s0:float" />
  </message>
  <message name="SubtractHttpPostIn">

    <part name="A" type="s:string" />
    <part name="B" type="s:string" />
  </message>
  <message name="SubtractHttpPostOut">
    <part name="Body" element="s0:float" />
  </message>
  <message name="MultiplyHttpPostIn">
    <part name="A" type="s:string" />
    <part name="B" type="s:string" />

  </message>
  <message name="MultiplyHttpPostOut">
    <part name="Body" element="s0:float" />
  </message>
  <message name="DivideHttpPostIn">
    <part name="A" type="s:string" />
    <part name="B" type="s:string" />
  </message>
  <message name="DivideHttpPostOut">

    <part name="Body" element="s0:float" />
  </message>
  <portType name="MathServiceSoap">
    <operation name="Add">
      <input message="s0:AddSoapIn" />
      <output message="s0:AddSoapOut" />
    </operation>
    <operation name="Subtract">
      <input message="s0:SubtractSoapIn" />

      <output message="s0:SubtractSoapOut" />
    </operation>
    <operation name="Multiply">
      <input message="s0:MultiplySoapIn" />
      <output message="s0:MultiplySoapOut" />
    </operation>
    <operation name="Divide">
      <input message="s0:DivideSoapIn" />
      <output message="s0:DivideSoapOut" />

    </operation>
  </portType>
  <portType name="MathServiceHttpGet">
    <operation name="Add">
      <input message="s0:AddHttpGetIn" />
      <output message="s0:AddHttpGetOut" />
    </operation>
    <operation name="Subtract">
      <input message="s0:SubtractHttpGetIn" />

      <output message="s0:SubtractHttpGetOut" />
    </operation>
    <operation name="Multiply">
      <input message="s0:MultiplyHttpGetIn" />
      <output message="s0:MultiplyHttpGetOut" />
    </operation>
    <operation name="Divide">
      <input message="s0:DivideHttpGetIn" />
      <output message="s0:DivideHttpGetOut" />

    </operation>
  </portType>
  <portType name="MathServiceHttpPost">
    <operation name="Add">
      <input message="s0:AddHttpPostIn" />
      <output message="s0:AddHttpPostOut" />
    </operation>
    <operation name="Subtract">
      <input message="s0:SubtractHttpPostIn" />

      <output message="s0:SubtractHttpPostOut" />
    </operation>
    <operation name="Multiply">
      <input message="s0:MultiplyHttpPostIn" />
      <output message="s0:MultiplyHttpPostOut" />
    </operation>
    <operation name="Divide">
      <input message="s0:DivideHttpPostIn" />
      <output message="s0:DivideHttpPostOut" />

    </operation>
  </portType>
  <binding name="MathServiceSoap" type="s0:MathServiceSoap">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
    <operation name="Add">
      <soap:operation soapAction="http://tempuri.org/Add" style="document" />
      <input>
        <soap:body use="literal" />
      </input>

      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="Subtract">
      <soap:operation soapAction="http://tempuri.org/Subtract" style="document" />
      <input>
        <soap:body use="literal" />
      </input>

      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="Multiply">
      <soap:operation soapAction="http://tempuri.org/Multiply" style="document" />
      <input>
        <soap:body use="literal" />
      </input>

      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="Divide">
      <soap:operation soapAction="http://tempuri.org/Divide" style="document" />
      <input>
        <soap:body use="literal" />
      </input>

      <output>
        <soap:body use="literal" />
      </output>
    </operation>
  </binding>
  <binding name="MathServiceHttpGet" type="s0:MathServiceHttpGet">
    <http:binding verb="GET" />
    <operation name="Add">
      <http:operation location="/Add" />

      <input>
        <http:urlEncoded />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>
    </operation>
    <operation name="Subtract">
      <http:operation location="/Subtract" />

      <input>
        <http:urlEncoded />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>
    </operation>
    <operation name="Multiply">
      <http:operation location="/Multiply" />

      <input>
        <http:urlEncoded />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>
    </operation>
    <operation name="Divide">
      <http:operation location="/Divide" />

      <input>
        <http:urlEncoded />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>
    </operation>
  </binding>
  <binding name="MathServiceHttpPost" type="s0:MathServiceHttpPost">

    <http:binding verb="POST" />
    <operation name="Add">
      <http:operation location="/Add" />
      <input>
        <mime:content type="application/x-www-form-urlencoded" />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>

    </operation>
    <operation name="Subtract">
      <http:operation location="/Subtract" />
      <input>
        <mime:content type="application/x-www-form-urlencoded" />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>

    </operation>
    <operation name="Multiply">
      <http:operation location="/Multiply" />
      <input>
        <mime:content type="application/x-www-form-urlencoded" />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>

    </operation>
    <operation name="Divide">
      <http:operation location="/Divide" />
      <input>
        <mime:content type="application/x-www-form-urlencoded" />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>

    </operation>
  </binding>
  <service name="MathService">
    <port name="MathServiceSoap" binding="s0:MathServiceSoap">
      <soap:address location="http://samples.gotdotnet.com/quickstart/aspplus/samples/services/MathService/VB/MathService.asmx" />
    </port>
    <port name="MathServiceHttpGet" binding="s0:MathServiceHttpGet">
      <http:address location="http://samples.gotdotnet.com/quickstart/aspplus/samples/services/MathService/VB/MathService.asmx" />
    </port>

    <port name="MathServiceHttpPost" binding="s0:MathServiceHttpPost">
      <http:address location="http://samples.gotdotnet.com/quickstart/aspplus/samples/services/MathService/VB/MathService.asmx" />
    </port>
  </service>
</definitions>


-- 
The best way to predict the future is to invent it - Alan Kay


supporting Posted by Aleksander Slominski <as...@cs.indiana.edu>.
dims@apache.org wrote:

>http://samples.gotdotnet.com/quickstart/aspplus/samples/services/MathService/VB/MathService.asmx?WSDL Add 3 4
>  
>
hi Dims,

do you know what is the status of this WSDL file - it seems it uses 
*incorrect* style='document' on soap:binding
(allowed is* style="rpc|document"* only as per 
http://www.w3.org/TR/wsdl#_soap:binding)

  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />

shouldnt AXIS generate at least warning that it is incorrect style 
(maybe AXIS already does it)?

thanks.

alek

ps. here is whole WSDL - did i miss something?

<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://tempuri.org/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://tempuri.org/" xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
      <s:element name="Add">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="A" type="s:float" />
            <s:element minOccurs="1" maxOccurs="1" name="B" type="s:float" />
          </s:sequence>

        </s:complexType>
      </s:element>
      <s:element name="AddResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="AddResult" type="s:float" />
          </s:sequence>
        </s:complexType>
      </s:element>

      <s:element name="Subtract">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="A" type="s:float" />
            <s:element minOccurs="1" maxOccurs="1" name="B" type="s:float" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="SubtractResponse">

        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="SubtractResult" type="s:float" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="Multiply">
        <s:complexType>
          <s:sequence>

            <s:element minOccurs="1" maxOccurs="1" name="A" type="s:float" />
            <s:element minOccurs="1" maxOccurs="1" name="B" type="s:float" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="MultiplyResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="MultiplyResult" type="s:float" />

          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="Divide">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="A" type="s:float" />
            <s:element minOccurs="1" maxOccurs="1" name="B" type="s:float" />
          </s:sequence>

        </s:complexType>
      </s:element>
      <s:element name="DivideResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="DivideResult" type="s:float" />
          </s:sequence>
        </s:complexType>
      </s:element>

      <s:element name="float" type="s:float" />
    </s:schema>
  </types>
  <message name="AddSoapIn">
    <part name="parameters" element="s0:Add" />
  </message>
  <message name="AddSoapOut">
    <part name="parameters" element="s0:AddResponse" />
  </message>

  <message name="SubtractSoapIn">
    <part name="parameters" element="s0:Subtract" />
  </message>
  <message name="SubtractSoapOut">
    <part name="parameters" element="s0:SubtractResponse" />
  </message>
  <message name="MultiplySoapIn">
    <part name="parameters" element="s0:Multiply" />
  </message>

  <message name="MultiplySoapOut">
    <part name="parameters" element="s0:MultiplyResponse" />
  </message>
  <message name="DivideSoapIn">
    <part name="parameters" element="s0:Divide" />
  </message>
  <message name="DivideSoapOut">
    <part name="parameters" element="s0:DivideResponse" />
  </message>

  <message name="AddHttpGetIn">
    <part name="A" type="s:string" />
    <part name="B" type="s:string" />
  </message>
  <message name="AddHttpGetOut">
    <part name="Body" element="s0:float" />
  </message>
  <message name="SubtractHttpGetIn">
    <part name="A" type="s:string" />

    <part name="B" type="s:string" />
  </message>
  <message name="SubtractHttpGetOut">
    <part name="Body" element="s0:float" />
  </message>
  <message name="MultiplyHttpGetIn">
    <part name="A" type="s:string" />
    <part name="B" type="s:string" />
  </message>

  <message name="MultiplyHttpGetOut">
    <part name="Body" element="s0:float" />
  </message>
  <message name="DivideHttpGetIn">
    <part name="A" type="s:string" />
    <part name="B" type="s:string" />
  </message>
  <message name="DivideHttpGetOut">
    <part name="Body" element="s0:float" />

  </message>
  <message name="AddHttpPostIn">
    <part name="A" type="s:string" />
    <part name="B" type="s:string" />
  </message>
  <message name="AddHttpPostOut">
    <part name="Body" element="s0:float" />
  </message>
  <message name="SubtractHttpPostIn">

    <part name="A" type="s:string" />
    <part name="B" type="s:string" />
  </message>
  <message name="SubtractHttpPostOut">
    <part name="Body" element="s0:float" />
  </message>
  <message name="MultiplyHttpPostIn">
    <part name="A" type="s:string" />
    <part name="B" type="s:string" />

  </message>
  <message name="MultiplyHttpPostOut">
    <part name="Body" element="s0:float" />
  </message>
  <message name="DivideHttpPostIn">
    <part name="A" type="s:string" />
    <part name="B" type="s:string" />
  </message>
  <message name="DivideHttpPostOut">

    <part name="Body" element="s0:float" />
  </message>
  <portType name="MathServiceSoap">
    <operation name="Add">
      <input message="s0:AddSoapIn" />
      <output message="s0:AddSoapOut" />
    </operation>
    <operation name="Subtract">
      <input message="s0:SubtractSoapIn" />

      <output message="s0:SubtractSoapOut" />
    </operation>
    <operation name="Multiply">
      <input message="s0:MultiplySoapIn" />
      <output message="s0:MultiplySoapOut" />
    </operation>
    <operation name="Divide">
      <input message="s0:DivideSoapIn" />
      <output message="s0:DivideSoapOut" />

    </operation>
  </portType>
  <portType name="MathServiceHttpGet">
    <operation name="Add">
      <input message="s0:AddHttpGetIn" />
      <output message="s0:AddHttpGetOut" />
    </operation>
    <operation name="Subtract">
      <input message="s0:SubtractHttpGetIn" />

      <output message="s0:SubtractHttpGetOut" />
    </operation>
    <operation name="Multiply">
      <input message="s0:MultiplyHttpGetIn" />
      <output message="s0:MultiplyHttpGetOut" />
    </operation>
    <operation name="Divide">
      <input message="s0:DivideHttpGetIn" />
      <output message="s0:DivideHttpGetOut" />

    </operation>
  </portType>
  <portType name="MathServiceHttpPost">
    <operation name="Add">
      <input message="s0:AddHttpPostIn" />
      <output message="s0:AddHttpPostOut" />
    </operation>
    <operation name="Subtract">
      <input message="s0:SubtractHttpPostIn" />

      <output message="s0:SubtractHttpPostOut" />
    </operation>
    <operation name="Multiply">
      <input message="s0:MultiplyHttpPostIn" />
      <output message="s0:MultiplyHttpPostOut" />
    </operation>
    <operation name="Divide">
      <input message="s0:DivideHttpPostIn" />
      <output message="s0:DivideHttpPostOut" />

    </operation>
  </portType>
  <binding name="MathServiceSoap" type="s0:MathServiceSoap">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
    <operation name="Add">
      <soap:operation soapAction="http://tempuri.org/Add" style="document" />
      <input>
        <soap:body use="literal" />
      </input>

      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="Subtract">
      <soap:operation soapAction="http://tempuri.org/Subtract" style="document" />
      <input>
        <soap:body use="literal" />
      </input>

      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="Multiply">
      <soap:operation soapAction="http://tempuri.org/Multiply" style="document" />
      <input>
        <soap:body use="literal" />
      </input>

      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="Divide">
      <soap:operation soapAction="http://tempuri.org/Divide" style="document" />
      <input>
        <soap:body use="literal" />
      </input>

      <output>
        <soap:body use="literal" />
      </output>
    </operation>
  </binding>
  <binding name="MathServiceHttpGet" type="s0:MathServiceHttpGet">
    <http:binding verb="GET" />
    <operation name="Add">
      <http:operation location="/Add" />

      <input>
        <http:urlEncoded />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>
    </operation>
    <operation name="Subtract">
      <http:operation location="/Subtract" />

      <input>
        <http:urlEncoded />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>
    </operation>
    <operation name="Multiply">
      <http:operation location="/Multiply" />

      <input>
        <http:urlEncoded />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>
    </operation>
    <operation name="Divide">
      <http:operation location="/Divide" />

      <input>
        <http:urlEncoded />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>
    </operation>
  </binding>
  <binding name="MathServiceHttpPost" type="s0:MathServiceHttpPost">

    <http:binding verb="POST" />
    <operation name="Add">
      <http:operation location="/Add" />
      <input>
        <mime:content type="application/x-www-form-urlencoded" />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>

    </operation>
    <operation name="Subtract">
      <http:operation location="/Subtract" />
      <input>
        <mime:content type="application/x-www-form-urlencoded" />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>

    </operation>
    <operation name="Multiply">
      <http:operation location="/Multiply" />
      <input>
        <mime:content type="application/x-www-form-urlencoded" />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>

    </operation>
    <operation name="Divide">
      <http:operation location="/Divide" />
      <input>
        <mime:content type="application/x-www-form-urlencoded" />
      </input>
      <output>
        <mime:mimeXml part="Body" />
      </output>

    </operation>
  </binding>
  <service name="MathService">
    <port name="MathServiceSoap" binding="s0:MathServiceSoap">
      <soap:address location="http://samples.gotdotnet.com/quickstart/aspplus/samples/services/MathService/VB/MathService.asmx" />
    </port>
    <port name="MathServiceHttpGet" binding="s0:MathServiceHttpGet">
      <http:address location="http://samples.gotdotnet.com/quickstart/aspplus/samples/services/MathService/VB/MathService.asmx" />
    </port>

    <port name="MathServiceHttpPost" binding="s0:MathServiceHttpPost">
      <http:address location="http://samples.gotdotnet.com/quickstart/aspplus/samples/services/MathService/VB/MathService.asmx" />
    </port>
  </service>
</definitions>


-- 
The best way to predict the future is to invent it - Alan Kay