
 
Hugo Haas <hugo@w3.org>
W3C Web
Services Activity Lead
Charlton Barreto, Adobe Systems Inc.
Member of the W3C Web Services Description & Choreography Working
Groups
ECOWS 2005, Växjö, Sweden, 14 November 2005
Web merchant
A lot of buzzwords…
… justifying some choices:



Built on top of Web technologies:



<?xml version='1.0' ?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Header> <m:reservation xmlns:m="http://travelcompany.example.org/reservation" env:role="http://www.w3.org/2003/05/soap-envelope/role/next" env:mustUnderstand="true"> <m:reference>uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d</m:reference> <m:dateAndTime>2001-11-29T13:20:00.000-05:00</m:dateAndTime> </m:reservation> </env:Header> <env:Body> <p:itinerary xmlns:p="http://travelcompany.example.org/reservation/travel"> … </p:itinerary> </env:Body> </env:Envelope>
public class MathService
{
    static int total=0;
    // Add an integer and return the total
    public int add(int a)
    {
        total += a;
        return total;
    }
    
    // Get the total of all the additions
    public int total()
    {
        return total;
    }
    
}
Deployed with Axis 1.3
import org.apache.axis.client.Call;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.soap.SOAPConstants;
import javax.xml.rpc.ParameterMode;
public class AddClient
{
   public static void main(String [] args) throws Exception {
       if (args == null || args.length != 1) {
           System.err.println("Usage: AddClient <int>");
           return;
       }
       
       Call call = new Call("http://localhost:8080/axis/MathService.jws");
       call.setSOAPVersion(SOAPConstants.SOAP12_CONSTANTS);
       Integer i = new Integer(args[0]);
       call.setOperationName("add");
       call.addParameter("a", XMLType.XSD_INT, ParameterMode.IN);
       call.setReturnType(XMLType.XSD_INT);
       Integer ret = (Integer) call.invoke(new Object [] { i });
       
       System.out.println("Added " + i + ". Current total: " + ret);
   }
}
hugo@jibboom ~/ws-setup% java AddClient 432
Added 432. Current total: 3468
produces the following HTTP request:
POST /axis/MathService.jws HTTP/1.0
Content-Type: application/soap+xml; charset=UTF-8
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: Axis/1.3
Host: 127.0.0.1:8080
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: ""
Content-Length: 363
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <add soapenv:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
      <a xsi:type="xsd:int">432</a>
    </add>
  </soapenv:Body>
</soapenv:Envelope>
resulting in the following HTTP reply:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=16ADA5B3AB2CBE3BA1582201B4F8BC28; Path=/axis
Content-Type: application/soap+xml;charset=UTF-8
Date: Wed, 19 Oct 2005 14:34:48 GMT
Connection: close
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <addResponse soapenv:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
      <ns1:result xmlns:ns1="http://www.w3.org/2003/05/soap-rpc">addReturn</ns1:result>
      <addReturn xsi:type="xsd:int">3468</addReturn>
    </addResponse>
  </soapenv:Body>
</soapenv:Envelope>
GET /axis/MathService.jws?method=total HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.12) Gecko/20050922 Firefox/1.0.7 (Debian package 1.0.7-1)
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.8,fr;q=0.6,de;q=0.4,es;q=0.2
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: JSESSIONID=9B2EB217BEA1C3EB8DEE1FE1F5E283B9
returns:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/xml;charset=ISO-8859-1
Content-Length: 410
Date: Wed, 19 Oct 2005 14:40:30 GMT
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <totalResponse soapenv:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
      <totalReturn xsi:type="xsd:int">3468</totalReturn>
    </totalResponse>
  </soapenv:Body>
</soapenv:Envelope>
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <totalResponse soapenv:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
      <totalReturn xsi:type="xsd:int">3468</totalReturn>
    </totalResponse>
  </soapenv:Body>
</soapenv:Envelope>
  <?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <ns1:totalResponse xmlns:ns1="http://localhost:8080/axis/services/MathServiceDL">
      <ns1:totalReturn>3468</totalReturn>
    </ns1:totalResponse>
  </soapenv:Body>
</soapenv:Envelope>
    when deployed with:
    style="wrapped" use="literal"
import org.apache.axis.client.Call;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.soap.SOAPConstants;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.message.SOAPHeaderElement;
import org.apache.axis.Constants;
public class AddClientMU
{
   public static void main(String [] args) throws Exception {
       
       if (args == null || args.length != 1) {
           System.err.println("Usage: AddClient <int>");
           return;
       }
       
       Call call = new Call("http://localhost:8080/axis/MathService.jws");
       call.setSOAPVersion(SOAPConstants.SOAP12_CONSTANTS);
       SOAPHeaderElement header = new SOAPHeaderElement("http://example.com/header",
                                                        "very-important-info", "blah");
       header.setMustUnderstand(true);
       header.setActor(Constants.URI_SOAP12_ULTIMATE_ROLE);
       call.addHeader(header);
       Integer i = new Integer(args[0]);
       call.setOperationName("add");
       call.addParameter("a", XMLType.XSD_INT, ParameterMode.IN);
       call.setReturnType(XMLType.XSD_INT);
       Integer ret = (Integer) call.invoke(new Object [] { i });
       
       System.out.println("Added " + i + ". Current total: " + ret);
   }
}
gives on error:
hugo@jibboom ~/ws-setup% java AddClientMU 2
Exception in thread "main" AxisFault
 faultCode: {http://www.w3.org/2003/05/soap-envelope}MustUnderstand
 faultSubcode:
 faultString: Did not understand "MustUnderstand" header(s):{http://example.com/he
ader}very-important-info
 faultActor:
 faultNode:
 faultDetail:
        {http://xml.apache.org/axis/}stackTrace:Did not understand "MustUnderstand" header(s):{http://example.com/header}very-important-info
        at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
        at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
        at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext
.java:1087)
[…]
POST /axis/MathService.jws HTTP/1.0 Content-Type: application/soap+xml; charset=UTF-8 Accept: application/soap+xml, application/dime, multipart/related, text/* User-Agent: Axis/1.3 Host: 127.0.0.1:8080 Cache-Control: no-cache Pragma: no-cache SOAPAction: "" Content-Length: 616 <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Header> <ns1:very-important-info soapenv:role="http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver" soapenv:mustUnderstand="true" xsi:type="xsd:string" xmlns:ns1="http://example.com/header"> blah </ns1:very-important-info> </soapenv:Header> <soapenv:Body> <add soapenv:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <a xsi:type="xsd:int">2</a> </add> </soapenv:Body> </soapenv:Envelope>
HTTP/1.1 500 Internal Server Error Server: Apache-Coyote/1.1 Content-Type: application/soap+xml;charset=UTF-8 Date: Fri, 04 Nov 2005 12:38:56 GMT Connection: close <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Header> <soapenv:NotUnderstood qname="ns1:very-important-info" soapenv:role="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="false" xmlns:ns1="http://example.com/header"/> </soapenv:Header> <soapenv:Body> <soapenv:Fault> <soapenv:Code> <soapenv:Value>soapenv:MustUnderstand</soapenv:Value> </soapenv:Code> <soapenv:Reason> <soapenv:Text xml:lang="en"> Did not understand "MustUnderstand" header(s):{http://example.com/header}very-important-info </soapenv:Text> </soapenv:Reason> <soapenv:Detail> <ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">jibboom</ns2:hostname> </soapenv:Detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope>
<wsa:EndpointReference
     xmlns:wsa="http://www.w3.org/2005/04/addressing"
     xmlns:fabrikam="http://example.com/fabrikam"
     xmlns:wsdli="http://www.w3.org/2005/05/wsdl-instance"
     wsdli:wsdlLocation="http://example.com/fabrikam
       http://example.com/fabrikam/fabrikam.wsdl">
  <wsa:Address>
    http://example.com/fabrikam/acct
  </wsa:Address>
  <wsa:Metadata>
    <wsaw:InterfaceName>
      fabrikam:Inventory
    </wsaw:InterfaceName>
  </wsa:Metadata>
  <wsa:ReferenceParameters>
    <fabrikam:CustomerKey>
      412
    </fabrikam:CustomerKey>
  </wsa:ReferenceParameters>
</wsa:EndpointReference>
wsa:Fromwsa:Towsa:ReplyTowsa:FaultTowsa:MessageIdwsa:RelatesTowsa:Action
<soap:Envelope
    xmlns:soap="http://www.w3.org/2003/05/soap-envelope"      
    xmlns:wsa="http://www.w3.org/2005/03/addressing">
  <soap:Header>
    <wsa:To>
      http://example.com/fabrikam/Purchasing
    </wsa:To>
    <wsa:Action>
      http://example.com/fabrikam/SubmitPO
    </wsa:Action>
    <wsa:MessageID>
      http://example.com/6B29FC40-CA47-1067
    </wsa:MessageID>
    <wsa:RelatesTo
        RelationshipType="http://www.w3.org/2005/03/addressing/reply">
      http://example.com/fabrikam/mid/1234
    </wsa:RelatesTo>
    <wsa:ReplyTo>
      <wsa:Address>
        mailto:client1@example.com
      </wsa:Address>
    </wsa:ReplyTo>
  </soap:Header>
  <soap:Body>
    …
  </soap:Body>
</soap:Envelope>
wsa:Reply-To<soap:Envelope
    xmlns:soap="http://www.w3.org/2003/05/soap-envelope"      
    xmlns:wsa="http://www.w3.org/2005/03/addressing">
  <soap:Header>
    <wsa:To>
      mailto:client1@example.com
    </wsa:To>
    <wsa:Action>
      http://example.com/fabrikam/POAcceptance
    </wsa:Action>
    <wsa:From>
      <wsa:Address>
        http://example.com/fabrikam/Purchasing
      </wsa:Address>
    </wsa:From>
    <wsa:MessageID>
      mid:123@example.com
    </wsa:MessageID>
    <wsa:RelatesTo
        RelationshipType="http://www.w3.org/2005/03/addressing/reply">
      http://example.com/6B29FC40-CA47-1067
    </wsa:RelatesTo>
  </soap:Header>
  <soap:Body>
    …
  </soap:Body>
</soap:Envelope>
xs:base64Binary in the SOAP envelope<soap:Envelope
    xmlns:soap='http://www.w3.org/2003/05/soap-envelope' 
    xmlns:xmlmime='http://www.w3.org/2004/11/xmlmime'>
  <soap:Body>
    <m:data xmlns:m='http://example.org/stuff'>
      <!-- Two binary components: a photo and a signature -->
      <m:photo>/aWKKapGGyQ=</m:photo>
      <m:sig>Faa7vROi2VQ=</m:sig>
    </m:data>
  </soap:Body>
</soap:Envelope>

MIME-Version: 1.0 Content-Type: Multipart/Related;boundary=MIME_boundary; type="application/xop+xml"; start="<mymessage.xml@example.org>"; startinfo="application/soap+xml; action=\"ProcessData\"" Content-Description: SOAP message with my pic and sig in it --MIME_boundary Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml; action=\"ProcessData\"" Content-Transfer-Encoding: 8bit Content-ID: <mymessage.xml@example.org> <soap:Envelope xmlns:soap='http://www.w3.org/2003/05/soap-envelope' xmlns:xmlmime='http://www.w3.org/2004/11/xmlmime'> <soap:Body> <m:data xmlns:m='http://example.org/stuff'> <!-- Two binary components: a photo and a signature --> <m:photo><xop:Include xmlns:xop='http://www.w3.org/2004/08/xop/include' href='cid:http://example.org/me.jpg'/></m:photo> <m:sig><xop:Include xmlns:xop='http://www.w3.org/2004/08/xop/include' href='cid:http://example.org/my.hsh'/></m:sig> </m:data> </soap:Body> </soap:Envelope> --MIME_boundary Content-Type: image/jpeg Content-Transfer-Encoding: binary Content-ID: <http://example.org/me.jpg> // binary octets for JPEG image --MIME_boundary Content-Type: application/pkcs7-signature Content-Transfer-Encoding: binary Content-ID: <http://example.org/my.hsh> // binary octets for signature --MIME_boundary--
<soap:Envelope
    xmlns:soap='http://www.w3.org/2003/05/soap-envelope'
    xmlns:rep='http://www.w3.org/2004/08/representation'
    xmlns:xmlmime='http://www.w3.org/2005/05/xmlmime'>
 <soap:Header>
  <rep:Representation resource='http://example.org/me.jpg'>
   <rep:Data
   xmlmime:contentType='image/jpeg'>/aWKKapGGyQ=</rep:Data>
  </rep:Representation>
 </soap:Header>
 <soap:Body>
  <x:MyData xmlns:x='http://example.org/mystuff'>
   <x:name>John Q. Public</x:name>
   <x:img src='http://example.org/me.jpg'/>
  </x:MyData>
 </soap:Body>
</soap:Envelope>
But:

Description document:
<description targetNamespace="…">
Message formats (schema types):
<types> … </types>
Abstract interface of the service:
  <interface>
    <operation> … </operation>*
  </interface>
Binding of these messages to a protocol:
<binding> … </binding>
Location of the service:
  <service>
    <endpoint> … </endpoint>*
  </service>
</description>

@wsdl:required attribute tells WSDL processor whether
        it must be understoodSpecifying that WS-Addressing 1.0 must be used:
<binding name="reservationSOAPBinding" 
    interface="tns:reservationInterface"
    type="http://www.w3.org/2005/08/wsdl/soap12"
    wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP">
  <wsaw:UsingAddressing wsdl:required="true" 
        xmlns:wsaw="http://www.w3.org/2005/03/addressing/wsdl"/>
  <operation ref="tns:opCheckAvailability"
      wsoap:mep="http://www.w3.org/2003/05/soap/mep/request-response" />
  <fault ref="tns:invalidDataFault" wsoap:code="soap:Sender" />
</binding>
<operation> specifies logical message
    exchange<operation name="location" wsdlx:safe="true"
           pattern="http://www.w3.org/2004/08/wsdl/in-out">
  <input element="s:location"
    style="http://www.w3.org/2005/05/wsdl/style/uri-style"/>
  <output element="s:temperature"/>
</operation>
<operation name="location" wsdlx:safe="true"
           pattern="http://www.w3.org/2005/05/wsdl/in-out">
  <input element="s:location"
    style="http://www.w3.org/2005/05/wsdl/style/uri-style"/>
  <output element="s:temperature"/>
</operation>
<binding name="SoapBinding" interface="m:CompleteInterface" type="http://www.w3.org/2005/05/wsdl/soap" wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP/"/> <!-- Use of MTOM --> <wsoap:module uri="http://www.w3.org/2004/08/soap/features/http-optimization"/> <operation ref="m:location"/> <operation ref="m:set"> <input messageLabel="In"> <!-- Required use of a security extension --> <wsoap:module required="true" uri="http://accurateweather.example/mySecurityExtension"/> </input> <output messageLabel="Out"/> </operation> </binding>
Only WSDL 1.1 is supported by Axis 1.3:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
    targetNamespace="http://localhost:8080/axis/services/MathServiceDL"
    xmlns:apachesoap="http://xml.apache.org/xml-soap"
    xmlns:impl="http://localhost:8080/axis/services/MathServiceDL"
    xmlns:intf="http://localhost:8080/axis/services/MathServiceDL"
    xmlns:tns1="http://doclit"
    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.3
Built on Oct 05, 2005 (05:23:37 EDT)-->
 <wsdl:types>
  <schema elementFormDefault="qualified" targetNamespace="http://doclit" xmlns="http://www.w3.org/2001/XMLSchema">
   <element name="add">
    <complexType>
     <sequence>
      <element name="in0" type="xsd:int"/>
     </sequence>
    </complexType>
   </element>
   <element name="addResponse">
    <complexType>
     <sequence>
      <element name="addReturn" type="xsd:int"/>
     </sequence>
    </complexType>
    </element>
   <element name="total">
    <complexType/>
   </element>
   <element name="totalResponse">
    <complexType>
     <sequence>
      <element name="totalReturn" type="xsd:int"/>
     </sequence>
    </complexType>
   </element>
  </schema>
 </wsdl:types>
   <wsdl:message name="totalResponse">
      <wsdl:part element="tns1:totalResponse" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="totalRequest">
      <wsdl:part element="tns1:total" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="addResponse">
      <wsdl:part element="tns1:addResponse" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="addRequest">
      <wsdl:part element="tns1:add" name="parameters"/>
   </wsdl:message>
   <wsdl:portType name="MathServiceDL">
      <wsdl:operation name="add">
         <wsdl:input message="impl:addRequest" name="addRequest"/>
         <wsdl:output message="impl:addResponse" name="addResponse"/>
      </wsdl:operation>
      <wsdl:operation name="total">
         <wsdl:input message="impl:totalRequest" name="totalRequest"/>
         <wsdl:output message="impl:totalResponse" name="totalResponse"/>
      </wsdl:operation>
   </wsdl:portType>
   <wsdl:binding name="MathServiceDLSoapBinding" type="impl:MathServiceDL">
      <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name="add">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="addRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="addResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="total">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="totalRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="totalResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
   </wsdl:binding>
   <wsdl:service name="MathServiceDLService">
      <wsdl:port binding="impl:MathServiceDLSoapBinding" name="MathServiceDL">
         <wsdlsoap:address location="http://localhost:8080/axis/services/MathServiceDL"/>
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>
<?xml version="1.0" encoding="UTF-8"?>
<description
    targetNamespace="http://localhost:8080/axis/services/MathServiceDL" 
    xmlns:tns="http://localhost:8080/axis/services/MathServiceDL"
    xmlns:sns="http://doclit"
    xmlns="http://www.w3.org/2005/08/wsdl"
    xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:wsoap="http://www.w3.org/2005/08/wsdl/soap"
    xmlns:whttp="http://www.w3.org/2005/08/wsdl/http"
    xmlns:wsdlx= "http://www.w3.org/2005/08/wsdl-extensions">
   <types>
    <xsd:schema targetNamespace="http://doclit">
      <xsd:element name="total"/>
      <xsd:element name="totalResponse">
        <xsd:complexType>     
	  <xsd:sequence>      
	    <xsd:element name="totalReturn" type="xsd:int"/>
	  </xsd:sequence>
	</xsd:complexType>
      </xsd:element>
      <xsd:element name="add">
        <xsd:complexType>
	  <xsd:sequence> 
	    <xsd:element name="a" type="xsd:int"/>
	  </xsd:sequence>
	</xsd:complexType>
      </xsd:element>
            
      <xsd:element name="addResponse">
        <xsd:complexType>
	  <xsd:sequence>      
	    <xsd:element name="addReturn" type="xsd:int"/>
	  </xsd:sequence>
	</xsd:complexType>
      </xsd:element>
            
    </xsd:schema>    
   </types>
   <interface name="MathService">
      <operation name="add" pattern="http://www.w3.org/2005/08/wsdl/in-out"
                       style="http://www.w3.org/2005/08/wsdl/rpc">
         <input element="sns:add"/>
         <output element="sns:addResponse"/>
      </operation>
      <operation name="total" pattern="http://www.w3.org/2005/08/wsdl/in-out"
                      wsdlx:safe="true">
         <input element="sns:total"/>
         <output element="sns:totalResponse"/>
      </operation>
   </interface>
   <binding name="MathServiceSoapBinding"
            type="http://www.w3.org/2005/08/wsdl/soap"
            wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP">
     <operation ref="add" wsoap:mep="http://www.w3.org/2003/05/soap/mep/request-response/"/>
     <operation ref="total" whttp:location="?method=total"
                     wsoap:mep="http://www.w3.org/2003/05/soap/mep/soap-response/"/>
   </binding>
   <service name="MathServiceService"
            interface="tns:MathService">
     <endpoint binding="tns:MathServiceSoapBinding" name="MathEndpoint"
              address="http://localhost:8080/axis/services/MathServiceDL"/>
   </service>
</description>
hugo@jibboom ~/ws-setup% java org.apache.axis.wsdl.WSDL2Java \ http://localhost:8080/axis/services/MathServiceDL\?WSDL hugo@jibboom ~/ws-setup% ls localhost/axis/services/MathServiceDL MathServiceDL.class MathServiceDLServiceLocator.class MathServiceDL.java MathServiceDLServiceLocator.java MathServiceDLService.class MathServiceDLSoapBindingStub.class MathServiceDLService.java MathServiceDLSoapBindingStub.java
import localhost.axis.services.MathServiceDL.*; public class WSDLMathClientDL { public static void main(String[] args) { Integer i = new Integer(args[0]); try { MathServiceDLService service = new MathServiceDLServiceLocator(); MathServiceDL endpoint = service.getMathServiceDL(); int ret = endpoint.add(i); System.out.println("Added " + i + ". Current total: " + ret); } catch (Exception e) { System.err.println("Exception caught: " + e); } } }
whttp:location="http://ws.foo.example/{country}/{city}"
    can be serialized as:
http://ws.foo.example/Sweden/V%C3%A4xj%C3%B6
Presentation by Charlton Barreto, Adobe Systems Inc.
<env:Envelope>
 <env:Header>
  <i18n:international>
   <i18n:locale>en-US</i18n:locale>
   <i18n:preferences>
    <ldml:collation>
     <ldml:alias source="de_DE" type="phonebook"/>
    </ldml:collation>
   </i18n:preferences>
  </i18n:international>
  …
 </env:Header>
 <env:Body>
  …
 </env:Body>
</env:Envelope>
    <operation
     name="OperationAddr" 
     pattern="http://www.w3.org/2003/11/wsdl/in-out"
     p3patt:p3p="http://example.com/p3p-pol1.xml">
      <input message="mytypes:addrUpdate"/>
      <output message="mytypes:updateResp"/>
    </operation>