1 / 17

CS603 Communication Mechanisms: SOAP

CS603 Communication Mechanisms: SOAP. 25 January 2002. SOAP: Simple Object Access Protocol. Overview Goal: RPC protocol that works over wide area networks Interoperable Language independent Problem: Firewalls Solution: HTTP/XML History Work started in 1998 – produced XML-RPC

guri
Download Presentation

CS603 Communication Mechanisms: SOAP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CS603Communication Mechanisms:SOAP 25 January 2002

  2. SOAP:Simple Object Access Protocol • Overview • Goal: RPC protocol that works over wide area networks • Interoperable • Language independent • Problem: Firewalls • Solution: HTTP/XML • History • Work started in 1998 – produced XML-RPC • Vendor-led, big Microsoft influence • 1999: SOAP 1 – type system from XML Schemas • More vendors • 2001: Picked up by W3C – XML Protocol working group • Now called XP (XML Protocol) • Microsoft using it for their .NET replacement for DCOM

  3. SOAP • Advantages • Goes anywhere • http is universal protocol • Open standard • Based on XML, defined by W3C working group • Disadvantages • Type semantics must be defined • Extra work for users • Pure text protocol • High cost to translate at endpoints • Eats bandwidth

  4. SOAPComponents • Client side: Ability to generate http calls and listen for response Sounds like a browser! • Server: • Listen for HTTP • Bind to procedure • Respond with HTTP First and last are Web Server!

  5. SOAP call <soap:Envelope> <soap:Body> <xmlns:m="http://www.stock.org/stock" /> <m:GetStockPrice> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope>

  6. SOAP response <soap:Envelope> <soap:Body> <xmlns:m="http://www.stock.org/stock" /> <m:GetStockPriceResponse> <m:Price>34.5</m:Price> </m:GetStockPriceResponse> </soap:Body> </soap:Envelope>

  7. SOAP Template <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <soap:Header> User-created definitions, e.g. language of message </soap:Header> <soap:Body> Call and arguments, or results for a response </soap:Body> <soap:Fault> Errors (response only) </soap:Fault> </soap:Envelope>

  8. Key SOAP Attributes • Header • Actor: URI of intended recipient • encodingStyle: URI of definition of types used • mustUnderstand: True if receiver MUST process element • Fault • <faultcode>: VersionMismatch, MustUnderstand, Client, Server • <faultstring>: Error as a string • <faultactor>: Who caused it • <detail>: Additional information

  9. Building a client:Apache SOAP • Open source web server driven by IBM • SOAP available as integral part • Java packages to interface between java programs and SOAP • Also supports javascript SOAP clients/servers

  10. SOAPSample Client import java.net.URL; import java.util.Vector; import org.apache.soap.SOAPException; import org.apache.soap.Constants; import org.apache.soap.Fault; import org.apache.soap.rpc.Call; import org.apache.soap.rpc.Parameter; import org.apache.soap.rpc.Response; public class Client { public static void main(String[] args) throws Exception { URL url = new URL("http://localhost:8080/apache-soap/servlet/rpcrouter"); Call call = new Call(); call.setTargetObjectURI("urn:Hello"); call.setMethodName(“HelloWorld"); call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector(); params.addElement(new Parameter("name", String.class, “Argument”, null)); call.setParams(params);

  11. SOAPSample Client Response resp = null; try { resp = call.invoke(url, ""); } catch( SOAPException e ) { System.err.println("Caught SOAPException (" + e.getFaultCode() + "): " +e.getMessage()); System.exit(-1); } // Check the response. if( !resp.generatedFault() ) { Parameter ret = resp.getReturnValue(); Object value = ret.getValue(); System.out.println(value); } else { Fault fault = resp.getFault(); System.err.println("Generated fault: "); System.out.println (" Fault Code = " + fault.getFaultCode()); System.out.println (" Fault String = " + fault.getFaultString()); } }

  12. SOAPServer code public class HelloServer { public String HelloWorld(String name) { System.out.println(name); return "Hello World!”; } }

  13. Activating the server • org.apache.soap.server.ServiceManagerClienthttp://localhost:8080/apache-soap/servlet/rpcrouter deploy DeploymentDescriptor.xml • DeploymentDescripter.xml: <isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:Hello"> <isd:provider type="java" scope="Application“ methods=“HelloWorld"> <isd:java class="HelloServer" static="false"/> </isd:provider> </isd:service>

  14. Client-generated call <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <soap:Header> </soap:Header> <soap:Body> <ns1:HelloWorld xmlns:ns1="Hello" soap:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/"> <name xsi:type="xsd:string">Arguments</name> </ns1:HelloWorld> </soap:Body> </soap:Envelope>

  15. Server-generated response <soap:Envelope xmlns:soap= "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <soap:Body> <ns1:HelloWorld xmlns:ns1="Hello" soap:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:string">Hello World!</return> </ns1:HelloWorld> </soap:Body> </soap:Envelope>

  16. DCE vs. Java RMI vs. SOAP • Philosophy • DCE RPC: generic interface • Define “clean sheet” system • Port to variety of protocols/systems/languages • Java RMI: “proprietary” interface • Coupled to single language/run time system • Port entire system to multiple platforms • SOAP: single standard interface • Define interface on single protocol • Pick protocol that is universal

  17. Which do I use? • All-JAVA world? RMI • Need security / fault tolerance? RPC • Need to get through firewalls? SOAP • Performance? • Objects as arguments?

More Related