Presentation is loading. Please wait.

Presentation is loading. Please wait.

SOAP : Simple Object Access Protocol

Similar presentations


Presentation on theme: "SOAP : Simple Object Access Protocol"— Presentation transcript:

1 SOAP : Simple Object Access Protocol
Dr. Yuhong Yan NRC-IIT-Fredericton Internet logic

2 Service Oriented Architecture (SOA)/Web Service triangle
UDDI Services The correlation of SOA and Web services The principle of SOA/Web services The benefit of SOA/Web services The bridge between IT implementation and business development. WSDL SOAP From “Web Services Architecture W3C Working Draft”

3 Transport HTTP, SMTP, FTP, BEEP XML messaging XML-RPC, SOAP, XML
Web Service Stack Process BPEL4WS, WSCI, WS-CDL Discovery UDDI Transport HTTP, SMTP, FTP, BEEP Description WSDL XML messaging XML-RPC, SOAP, XML Services Many, many more specification interoperabilities

4 SOAP (Simple Object Access Protocol)
SOAP is a lightweight protocol for exchange of information in a decentralized, distributed environment. It is an XML based protocol that consists of three parts: an envelope that defines a framework for describing what is in a message and how to process it, a set of encoding rules for expressing instances of application-defined data types, and a convention for representing remote procedure calls and responses.

5 Look into a SOAP message
<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv=" xmlns:xsd=" xmlns:xsi=" <soapenv:Body> <ns1:getQuote soapenv:encodingStyle=" xmlns:ns1="urn:xmltoday-delayed-quotes"> <symbol xsi:type="xsd:string">XXX</symbol> </ns1:getQuote> </soapenv:Body> </soapenv:Envelope>

6 Response SOAP message <soapenv:Envelope xmlns:soapenv=" xmlns:xsd=" xmlns:xsi=" <soapenv:Body> <ns1:getQuoteResponse soapenv:encodingStyle=" xmlns:ns1="urn:xmltoday-delayed-quotes"> <ns1:getQuoteReturn href="#id0"/> </ns1:getQuoteResponse> <multiRef id="id0" soapenc:root="0" soapenv:encodingStyle=" xsi:type="xsd:float" xmlns:soapenc=" </soapenv:Body> </soapenv:Envelope>

7 Inside SOAP P53, figure 3-2 SOAP message Envelope (required)
Header (optional) Body (required) Fault (optional) P53, figure 3-2

8 Why SOAP Inter-application communication between systems written in arbitrary languages, across the Internet. An XML-based protocol for exchanging messages over Internet transport protocols, like HTTP, SMTP, FTP, etc. SOAP is platform-independent.

9 Apache SOAP architecture
4 Service: HelloService.java sayHello(“Yuhong”, “Yan”) “Yuhong Yan, Welcome to SOAP…” 3 SOAP client: HelloClient.java AXIS SOAP engine rpcrouter servlet 1 SOAP request: Service name: urn:HelloWorld Method name: sayHello Parameter: firstName=“Yuhong” lastName=“Yan” 2 Jakarta Tomcat server 5 SOAP response: Return value: “Yuhong Yan, welcome to SOAP” Http POST Http GET p69,. Fig 4-3

10 Anatomy of HelloWorld Server side code Client side code SOAP request
SOAP response

11 HelloWorldService.java package samples.HelloWorld;
public class HelloWorldService { public String sayHello(String firstName, String lastName) throws Exception String aString = firstName + “ " + lastName + ", welcome to SOAP Web Service World!"; return aString; } public String addString(String symbol, String dataType) throws Exception String aString = symbol + dataType;

12 Parse the arg[ ] into options (user,url,etc) and non-options args.
TestClient public class TestClient { public static void main(String args[]) try Options opts = new Options( args ); args = opts.getRemainingArgs(); Parse the arg[ ] into options (user,url,etc) and non-options args. get non-options args.

13 TestClient.java (2) Service service = new Service();
The start point of access SOAP web services Default URL " Or You can use the SOAP endpoint as in WSDL " Call invokes SOAP web services Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new java.net.URL(opts.getURL()) ); if( args[0].equals("1") ) call.setOperationName( new QName("urn:HelloWorld", "sayHello") ); else call.setOperationName( new QName("urn:HelloWorld", "addString") ); Service Name Service Method

14 TestClient.java Add the parameters for the remote method Parameter name. Arbitrary. Appear in request SOAP message XML data type for the para IN/OUT/INOUT call.addParameter( “p1", XMLType.XSD_STRING, ParameterMode.IN ); call.addParameter( “p2", XMLType.XSD_STRING, ParameterMode.IN ); call.setReturnType( XMLType.XSD_STRING ); call.setUsername( opts.getUser() ); call.setPassword( opts.getPassword() ); Define the return value Security options

15 Request SOAP message <?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv=" xmlns:xsd=" xmlns:xsi=" <soapenv:Body> <ns1:sayHello soapenv:encodingStyle=" xmlns:ns1="urn:HelloWorld"> <p1 xsi:type="xsd:string">Yuhong</p1> <p2 xsi:type="xsd:string">Yan</p2> </ns1:sayHello> </soapenv:Body> </soapenv:Envelope> Remote method name Name of the web service Parameter name. Parameter type. need to match WSDL. Value of the parameter

16 TestClient.java Invoke the web service Return value Passing parameters String res = (String) call.invoke( new Object[] { args[1], args[2] } ); System.out.println( "Return is: " + res ); } catch( Exception e ) { e.printStackTrace(); }//end of class

17 Response SOAP message <soapenv:Envelope xmlns:soapenv=" xmlns:xsd=" xmlns:xsi=" <soapenv:Body> <ns1:sayHelloResponse soapenv:encodingStyle=" xmlns:ns1="urn:HelloWorld"> <ns1:sayHelloReturn xsi:type="soapenc:string" xmlns:soapenc=" Welcome to SOAP Web Service World!</ns1:sayHelloReturn> </ns1:sayHelloResponse> </soapenv:Body> </soapenv:Envelope>

18 Inside SOAP P53, figure 3-2 SOAP message Envelope (required)
Header (optional) Body (required) Fault (optional) P53, figure 3-2

19 Envelope The root element of SOAP message
Uses XML namespaces to differentiate versions Two versions 1.1, 1.2 No third string <soapenv:Envelope xmlns:soapenv="

20 Header (optional) For authentication, transaction management, and payment authorization Two defined attributes Actor attribute: the chained node MustUnderstand attribute: force the recipient to process the element, if not understandable, return a fault

21 Header (optional) (2) <SOAP-ENV:Header>
<ns1:PaymentAccount xmlns:ns1=“urn:ecerami” SOAP-ENV:mustUnderstand=“true”> orsenigo473 </ns1:PaymentAccount> </SOAP-ENV:Header> P54. the soapheader

22 Body Where the transferred data is Data encoding via XML Schemas
<soapenv:Body> <ns1:sayHello soapenv:encodingStyle=" xmlns:ns1="urn:HelloWorld"> <p1 xsi:type="xsd:string">Yuhong</p1> <p2 xsi:type="xsd:string">Yan</p2> </ns1:sayHello> </soapenv:Body>

23 Fault (optional) faultCode SOAP-ENV:VersionMismatch
SOAP-ENV:MustUnderstand SOAP-ENV:Client (non existing methods) SOAP-ENV:Server (not able to access DB) faultString faultActor detail

24 Fault (optional)-2 P55. xml part (for faults)
<?xml version=‘1.0’ encoding=‘UTF-8’?> <SOAP-ENV:Envelope xmlns:SOAP-ENV=“ xmlns:xsi=“ xmlns:xsd=“ <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode xsi:type=“xsd:string”>SOAP-ENV:Client</faultcode> <faultstring xsi:type=“xsd:string”> Failed to locate method (ValidateCreditCard) in class (examplesCreditCard) at /usr/local/ActivePerl-5.6/lib/ site_perl/5.6.0/SOAP/Lite.pm line 1555. </faultstring> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope> P55. xml part (for faults)

25 SOAP message inside HTTP message
SOAP is inside a HTTP message How client-server talks in HTTP The client identifies the server via a URI connects to it using the underlying TCP/IP network issues a HTTP request message (POST) receives a HTTP response message (GET)

26 SOAP request message is within HTTP POST
Here is the HTTP header you see from the log POST /axis/services/urn:HelloWorld HTTP/1.0 Content-Type: text/xml; charset=utf-8 Accept: application/soap+xml, application/dime, multipart/related, text/* User-Agent: Axis/1.2alpha Host: localhost:8080 Cache-Control: no-cache Pragma: no-cache SOAPAction: "" Content-Length: 474 Authorization: Basic dXNlcjE6cGFzczE=

27 SOAP request message is within HTTP POST
Here is the HTTP body – That is the SOAP message <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv=" xmlns:xsd=" xmlns:xsi=" <soapenv:Body> <ns1:sayHello soapenv:encodingStyle=" xmlns:ns1="urn:HelloWorld"> <p1 xsi:type="xsd:string">Yuhong</p1> <p2 xsi:type="xsd:string">Yan</p2> </ns1:sayHello> </soapenv:Body> </soapenv:Envelope>

28 SOAP response message is within HTTP GET
This should be in HTTP header GET /axis/services/urn:HelloWorld HTTP/1.0 Content-Type: text/xml; charset=utf-8 Accept: application/soap+xml, application/dime, multipart/related, text/* User-Agent: Axis/1.2alpha Host: localhost:8080 ……

29 SOAP response message is within HTTP GET
<soapenv:Envelope xmlns:soapenv=" xmlns:xsd=" xmlns:xsi=" <soapenv:Body> <ns1:sayHelloResponse soapenv:encodingStyle=" xmlns:ns1="urn:HelloWorld"> <ns1:sayHelloReturn xsi:type="soapenc:string" xmlns:soapenc=" Welcome to SOAP Web Service World!</ns1:sayHelloReturn> </ns1:sayHelloResponse> </soapenv:Body> </soapenv:Envelope>

30 Axis Client Client XML Schema Java Objects and data types XML
follows Java Objects and data types XML data types SOAP Server

31 Axis client Map java data types to XSD data type
Serialize java objects into XML Send SOAP request to server (not necessarily Axis server) Interpret SOAP response

32 XML <-> Java Data Mapping in Axis
Primitives Beans User Defined Types (classes) Code Demo References: AXIS User Guide AXIS sample code

33 Primitives: the mapping table
xsd:base64Binary byte[] xsd:boolean boolean xsd:byte byte xsd:dateTime java.util.Calendar xsd:decimal java.math.BigDecimal xsd:double double xsd:float float xsd:hexBinary byte[] xsd:int int xsd:integer java.math.BigInteger xsd:long long xsd:QName javax.xml.namespace.QName xsd:short short xsd:string java.lang.String


Download ppt "SOAP : Simple Object Access Protocol"

Similar presentations


Ads by Google