Hugo Haas <[email protected]>
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:From
wsa:To
wsa:ReplyTo
wsa:FaultTo
wsa:MessageId
wsa:RelatesTo
wsa: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:[email protected]
</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:[email protected]
</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:[email protected]
</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="<[email protected]>"; 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: <[email protected]> <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>