the simple object access protocol soap n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
The Simple Object Access Protocol (SOAP) PowerPoint Presentation
Download Presentation
The Simple Object Access Protocol (SOAP)

Loading in 2 Seconds...

play fullscreen
1 / 42

The Simple Object Access Protocol (SOAP) - PowerPoint PPT Presentation


  • 86 Views
  • Uploaded on

The Simple Object Access Protocol (SOAP). Ted Huffmire October 17, 2003. SOAP. An application of the XML specification Relies on XML Schema, XML Namespaces www.w3c.org Platform independent Provides a standard way to structure XML Messages. XML Message. Application. Application.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'The Simple Object Access Protocol (SOAP)' - vienna


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
the simple object access protocol soap

The Simple Object Access Protocol (SOAP)

Ted Huffmire

October 17, 2003

slide2
SOAP
  • An application of the XML specification
  • Relies on XML Schema, XML Namespaces
    • www.w3c.org
  • Platform independent
  • Provides a standard way to structure XML Messages
slide3

XML Message

Application

Application

Discovery

Description

Packaging

Transport

Network

it is necessary to define
It is necessary to define:
  • The types of information to be exchanged
  • How to express the information as XML
  • How to send the information
soap messages

SOAP Envelope

SOAP Header

Header block

Header block

SOAP Body

Message Body

SOAP Messages
  • Header contains blocks of information regarding how to process the message:
  • Routing and delivery settings
  • Authentication/authorization assertions
  • Transaction contexts
  • Body contains actual message to be delivered and processed
purchase order in document style soap
Purchase order in document-style SOAP

<s:Envelope xmlns:s=http://www.w3.org/2001/06/soap-envelope>

<s:Header>

<m:transaction xmlns:m=“soap-transaction” s:mustUnderstand=“true”>

<transactionID>1234</transactionID>

</transaction>

</Header>

<s:Body>

<n:purchaseOrder xmlns:n=“urn:OrderService”>

<from><person>Christopher Robin</person>

<dept>Accounting</dept></from>

<to><person>Pooh Bear</person>

<dept>Honey></dept></to>

<order><quantity>1</quantity>

<item>Pooh Stick</item></order>

</n:purchaseOrder>

</s:Body>

</s:Envelope>

rpc messages
RPC Messages

Request Message

Soap Client

Soap Server

Response Message

rpc style soap message
RPC-style SOAP Message

public Float getQuote(String symbol);

<s:Envelope xmlns:s=http://www.w3.org/2001/06/soap-envelope>

<s:Header>

<m:transaction xmlns:m=“soap-transaction” s:mustUnderstand=“true”>

<transactionID>1234</transactionID>

</m:transaction>

</s:Header>

<s:Body>

<n:getQuote xmlns:n=“urn:QuoteService”>

<symbol xsi:type=“xsd:string”>

IBM

</symbol>

</n:getQuote>

</s:Body>

</s:Envelope>

soap response
SOAP response

<s:Envelope xmlns:s=http://www.w3.org/2001/06/soap-envelope>

<s:Body>

<n:getQuoteResponse xmnls:n=“urn:QuoteService”>

<value xsi:type=“xsd:float”>

98.06

</value>

</n:getQuoteResponse>

</s:Body>

</s:Envelope>

soap faults
SOAP Faults

<s:Envelope xmlns:s=“…”>

<s:Body>

<s:Fault>

<faultcode>Client.Authentication</faultcode>

<faultstring>Invalid credentials</faultstring>

<faultactor>http://acme.com/</faultactor>

<details> <!-- application specific details></details>

</s:Fault>

</s:Body>

</s:Envelope>

standard soap fault codes
Standard SOAP Fault Codes
  • Version Mismatch
  • MustUnderstand: specify which header blocks were not understood
  • Server: error can’t be directly linked to the processing of the message
  • Client: there is a problem in the message (e.g. invalid authentication credentials)
misunderstood header
Misunderstood header

<s:Envelope xmlns:s=http://www.w3.org/2001/06/soap-envelope>

<s:Header>

<f:Misunderstood qname=“abc:transaction” xmlns:=“soap-transactions” />

</s:Header>

<s:Body>

<s:Fault>

<faultcode>MustUnderstand</faultcode>

<faultstring>Header(s) not understood</faultstring>

<faultactor>http://acme.com/</faultactor>

</s:Fault>

</s:Body>

</s:Envelope>

soap message exchange model
SOAP Message Exchange Model
  • SOAP intermediary, or actor, sits between a service consumer and provider and adds value or functionality to the transaction
  • The set of intermediaries that the message travels through is called the message path
  • No standard way of expressing the message path
  • “targeting:” SOAP has a mechanism for identifying which parts of the SOAP message are intented for processing by specific actors in its message path
    • Only for header blocks: targeted to a specific actor on its message path by using “actor” attribute
intermediary example
Intermediary example

1) Submit signed P.Order

Buyer

Purchasing service

2) Validate signature

3) Process the P.Order

Signature validation service

the actor header
The actor header

<s:Envelope xmlns:s=http://www.w3.org/2001/06/soap-envelope>

<s:Header>

<x:signature actor=“uri:SignatureVerifier”>

</x:signature>

<s:Body>

<abc:purchaseOrder>…</abc:purchaseOrder>

</s:Body>

</s:Envelope>

microsoft soap routing protocol
Microsoft SOAP Routing Protocol

<s:Envelope xmlns:s=http://www.w3.org/2001/06/soap-envelope>

<s:Header>

<m:path xmlns:m=http://schemas.xmlsopa.org/rp/

s:mustUnderstand=“true”>

<m:action>http://www.im.org/chat</m:action>

<m:to>http://D.com/some/endpoint</m:to>

<m:fwd>

<m:via>http://B.com</m:via>

<m:via>http://C.com</m:via>

</m:fwd>

<m:from>mailto:johndoe@acme.com</m:from>

<m:id>uuid:849bfs-33fb-4a81-b02b-5b7650549dac16</m:id>

</m:path>

</s:Header>

<s:Body>

</s:Body>

</s:Envelope>

soap s data encoding
SOAP’s Data Encoding
  • Method of serializing the data intended for packaging
  • Rules outline how basic application data types are to be mapped and encoded into XML
  • A simple type system that is a generalization of the common features found in type systems in programming languages, databases, etc.
  • Rules can be applied in nearly any programming environment
  • Encoding styles are completely optional and not always useful.
data encoding terminology
Data Encoding Terminology
  • “value:” represents a single data unit or combination of data units
  • “accessor:” represents an element that contains or allows access to a value
  • <firstname>Joe</firstname>
  • “firstname” is an accessor; “Joe” is a value.
compound values
Compound Values
  • A compound value represents a combination of two or more accessors grouped as children of a single accessor
  • <name>
    • <firstname>Joe</firstname>
    • <lastname>Smith</lastname>

</name>

compound values1
Compound Values
  • Two types of compound values: structs and arrays
  • A struct is a compound value in which each accessor has a different name
  • <person>
    • <firstname>Joe</firstname>
    • <lastname>Smith</lastname>

</person>

compound values2
Compound Values
  • An array is a compound value in which the accessors have the same name.
  • <people>
    • <person name=‘joe smith’ />
    • <person name=‘john doe’ />

</people>

multifererenced accessor
Multifererenced accessor

<people>

<person name=‘joe smith’>

<address href=‘#address-1’>

</person>

<person name=‘john doe’>

<address href=‘#address-1’>

</person>

</people>

<address id=‘address-1’>

<street>111 First Street</street>

<city>New York</city>

<state>New York</state>

</address>

3 methods to express the data type of an accessor
3 Methods to express the data type of an accessor:
  • Use the xsi:type attribute on each accessor, explicitly referencing the data type according to the XML Schema specification:
  • <person><name xsi:type=“xsd:string”>John Doe</name>
  • Reference an XML Schema document that defines the exact data type of a particular element within its definition:
  • <person xmlns=“personschema.xsd”>
  • <name>John Doe</name></person>
  • Reference some other type of schema document that defines the data type of a particular element within its definition:
  • <person xmlns=“urn:some_namespace”>
  • <name>John Doe</name>
soap data types
SOAP Data Types
  • Two alternate syntaxes for expressing instances of data types
  • Anonymous accessor:
  • <SOAP-ENC:int>36</SOAP-ENC:int>
  • Anonymous because its name is its type rather than a meaningful id for the value
  • Named accessor:
  • <value xsi:type=“xsd:int”>36</value>
arrays
Arrays
  • <some_array xsi:type=“SOAP-ENC:arrayType=“se:string[3]”>
    • <se:string>Joe</se:string>
    • <se:string>John</se:string>
    • <se:string>Marsha</se:string>
  • </some_array>
2d arrays
2D Arrays
  • <data xsi:type=“SOAP-ENC:Array” SOAP-ENC:arrayType=“xsd:string[2][]”>
    • <names href=“#names-1”/>
    • <names href=“#names-2”/>
  • </data>
  • <names id=“names-1” xsi:type=“SOAP-ENC:Array” SOAP-ENC:arrayType=“xsd:string[2]”>
    • <name>joe</name>
    • <name>john</name>
  • </names>
  • <names id=“names-2” xsi:type=“SOAP-ENC:Array” SOAP-ENC:arrayType=“xsd:string[2]”>
    • <name>mike</name>
    • <name>bill</name>
  • </names>
sparse arrays
Sparse Arrays
  • <names xsi:type=“SOAP-ENC:Array SOAP-ENC:arrayType=“xsd:string[10,10]”>
    • <name SOAP-ENC:position=“[2,5]”>data</name>
    • <name SOAP-ENC:position=“[5,2]”>data</name>
  • </name>
deployment of web service
Deployment of Web Service
  • Listener to receive message
  • Proxy to take message and translate it into an action to be carried out
  • Application code to implement that action
soap implementations
SOAP Implementations
  • Apache SOAP for Java
  • SOAP::Lite for Perl
  • Microsoft.NET
  • More: soaplite.com, soaplite.org
handling soap methods
Handling SOAP methods
  • Varies with transport layer
  • Some implement their own HTTP servers
  • Some expect to be installed as part of a particular web server
    • HTTP daemon hands the SOAP message to the toolkit’s proxy, which invokes the code
  • Some support a pluggable transport mechanism
    • Can select different transport protocols
proxy component
Proxy component
  • All SOAP toolkits have this
  • Parses and interprets the SOAP message to invoke the application code
  • When the proxy component is handed a SOAP message by a listener, it must:
    • Deserialize the message from XML into native format
    • Invoke the code
    • Serialize the response to the message back into XML and hand it back to the transport listener for delivery back to the requester
deploying web services
Deploying Web Services
  • Involves telling the proxy which code to invoke when a particular type of message is received
  • For example, Apache SOAP uses a deployment descriptor file, which describes the Java class and rules for mapping Java objects used in the service to their XML equivalents
soap lite
SOAP::Lite
  • Perl-based toolkit
  • Perl module must be in Perl’s module search path
  • Available at www.cpan.org
hello server example
Hello Server Example
  • #Hello.pm – simple Hello module
  • package Hello;
  • sub sayHello {
  • shift; #remove class name
  • return “Hello “ . Shift;
  • }
  • 1;
hello cgi cgi script
Hello.cgi (cgi script)
  • #!/usr/bin/perl –w
  • #hello.cgi – Hello SOAP handler
  • User SOAP::Transport::HTTP;
  • SOAP::Transport::HTTP::CGI
  • -> dispatch_to(‘Hello::(?:sayHello)’)
  • -> handle
  • ;
  • #this script is the glue that ties the listener (HTTP server daemon) to the proxy (SOAP::Lite module).
hello client hw client pl
Hello Client: hw_client.pl

#!/usr/bin/perl –w

# hw_client.pl – Hello Client

use SOAP::Lite;

my $name = shift;

print “\n\nCalling the SOAP Server to say hello\n\n”;

print “The SOAP Server says: “;

print SOAP::Lite

-> uri(‘urn:Example1’)

-> proxy(‘http://localhost/cgi-bin/helloworld.cgi’)

-> sayHello($name)

-> result . “\n\n”;

running the hello client
Running the Hello Client
  • % perl hw_client.pl James
  • Calling the SOAP Server to say hello
  • The SOAP Server says: Hello James
  • %
apache soap version of hello server
Apache SOAP version of Hello Server
  • Package samples;
  • public class Hello {
  • public String sayHello(String name) {
  • return “Hello “ + name;
  • }
  • }
apache version of hello client
Apache version of Hello Client
  • import org.apache.soap.*; import org.apache.soap.rpc.*;
  • public class Example1_client {
  • public static void main(String[] args) throws Exception {
  • System.out.println(“\n\nCalling the SOAP Server to say hello\n\n”);
  • URL url = new URL(args[0]);
  • String name = args[1];
  • Call call = new Call();
  • call.setTargetObjectURI(“urn:Example1”);
  • call.setMethodName(“sayHello”);
  • call.setEncodingStyleURI( Constants.NS_URI_SOAP_ENC;);
  • Vector params = new Vector();
  • params.addElement(new Parameter(“name”, String.class, name, null));
  • call.setParams(params);
  • System.out.println(“The SOAP Server says: “);
  • Response resp = call.invoke(url, “”);
  • if (resp.generatedFault()) {
  • Fault fault = resp.getFault();
  • System.out.println(“\nOuch, the call failed: “);
  • System.out.println(“ Fault Code = “ + fault.getFaultCode());
  • System.out.println(“ Fault String = “ + fault.getFaultString());
  • } else {
  • Parameter result = resp.getReturnValue();
  • System.out.println(result.getValue());
  • }
  • }
  • }
running the apache client
Running the Apache client
  • % java samples.Hello http://localhost/soap/servlet/rpcrouter James
  • Calling the SOAP Server to say hello
  • The SOAP Server says: Hello James
  • %
apache deployment descriptor
Apache Deployment Descriptor

<dd:service xmlns:dd=http://xml.apache.org/xml-soap/deployment

id=“urn:Example1”>

<dd:provider type=“java” scope=“Application” method=“sayHello”>

<dd java class=“samples.Hello” static=“false” />

</dd:provider>

<dd:faultListener>

org.apache.soap.server.DOMFaultListener

</dd:faultListener>

<dd:mappings />

</dd:service>

apache soap configwuration file
Apache SOAP configwuration file
  • <root>
  • <dd:service xmlns:dd=http://xml.apache.org/xml-
  • soap/deployment id=“urn:Example1”>
  • <dd:provider type=“java” scope=“Application”
  • methods=“sayHello”>
  • <dd:java class=“samples.Hello” static=“false” />
  • </dd:provider>
  • <faultListener>
  • org.apache.soap.server.DOMFaultListener
  • </dd:faultListener>
  • <dd:mappings />
  • </dd:service>
  • </root>