Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

72
Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail
  • date post

    15-Jan-2016
  • Category

    Documents

  • view

    222
  • download

    0

Transcript of Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Page 1: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Ace104Lecture 5

The Flavor of SOAP: A study of the key concepts without all of the detail

Page 2: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Some facts about SOAP

• SOAP no longer stands for Simple Object Access Protocol– This was dropped in 2003 with publication of v1.2

– Considered to be a misleading name

• Originally was XML-RPC– Created in 1998 as a very lightweight protocol for rpc

– Was basis for development of SOAP several years later

– SOAP currently maintained by W3C XML working group

• SOAP and XML-RPC are based entirely on XML

Page 3: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAP as a messaging protocol

• SOAP is fundamentally a stateless, one-way message exchange paradigm

• However, applications can create more complex interaction patterns (e.g., request/response, request/multiple responses, etc.) by combining such one-way exchanges with features provided by an underlying protocol and/or application-specific information.

• SOAP is silent on the semantics of any application-specific data it conveys, as it is on issues such as the routing of SOAP messages, reliable data transfer, firewall traversal, etc.

• However, SOAP provides the framework by which application-specific information may be conveyed in an extensible manner. Also, SOAP provides a full description of the required actions taken by a SOAP node on receiving a SOAP message.

Page 4: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAP

• SOAP is made up of three major parts– A generic XML messaging framework

– An data encoding standard

– An RPC (remote procedure call) framework

• It is possible to use just the messaging framework or messaging framework/encoding standard without using the RPC mechanism (though latter is where much of power/usefulness lies).

Page 5: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Web Services

• Note that classic Web Services are made up of three parts– SOAP

– WSDL (Web Services Descriptor Language)

– UDDI (Universal Description, Discovery, and Integration)

• All three are based on XML

• SOAP simply defines the structure of the XML document used to transfer the message

• WSDL and UDDI are covered next

Page 6: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAP: Messaging framework

• Just defines a generic message XML schema

• Virtually any type of message you can think of can be packaged as a SOAP message.

• However, doing so without RPC mechanisms takes only very small advantage of the features defined in the SOAP standard

Page 7: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

General (Basic) Structure SOAP Message

• Envelope– Defines the content of the message

• Header (optional)– Contains destination information,

versioning, extensions

– Good place for security

• Body– Contains payload

SOAP Envelope

SOAP Header

SOAP Body

Payload Document(s)

SOAP Fault

Page 8: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

General (Basic) Structure SOAP Message

<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/encoding/"soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<soap:Header>... ...

</soap:Header><soap:Body>

<!-- User request code here --><soap:Fault>

... ...</soap:Fault>

</soap:Body></soap:Envelope>

Page 9: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAP encoding

• In order to build SOAP messages from our language of choice, we need to know how to serialize data -- ie the rules for representing an integer, string, or floating point number. The serialization of data inside a SOAP message is referred to as encoding

• The encodingStyle attribute defined by the SOAP specification is used to identify the encoding rules used in a particular message.

• SOAP does this in a language agnostic way, much like CORBA (but not in binary form)

• If the encodingStyle attribute does not appear in the message, the receiver cannot make any assumptions about how data will be represented within the message

Page 10: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAP Encoding

• You may be wondering about the relationship between encoding and XML Schemas– Encoding can make use of XML Schemas.

– The SOAP Specification defines a single set of (recommended) encoding rules call SOAP encoding. SOAP encoding is based on XML Schemas and as such it closely models many of the standard types and constructs. The value is http://schemas.xmlsoap.org/soap/encoding/, which points to the XML Schema that defines the encoding rules.

– SOAP encoding rules use XML Schemas heavily, relying on the XML Schema datatypes namespace and the type attribute.

– The key difference is that encoding does not mandate XML Schemas.

– Encoding rules are simply identified by a URI. The rules implied by that URI could be backed up by nothing more than a verbal agreement, or possibly some written documentation.

– This allows developers who do not necessarily need the capabilities of XML Schemas to forego their use and start sending messages with encoding rules based on an accepted URI.

Page 11: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAP Encoding

• For example, SOAP stipulates that an array of three integers be represented as:

<SOAP-ENC:Array SOAP-ENC:arrayType="xsd:int[3]"><SOAP-ENC:int>8</SOAP-ENC:int><SOAP-ENC:int>5</SOAP-ENC:int><SOAP-ENC:int>9</SOAP-ENC:int>

</SOAP-ENC:Array>

• SOAP also provides a type for representing binary data

One approach for working with binary data is to use the base64 type. We can represent binary data, such as an image file, as an array of bytes in the message.

The base64 type converts binary data to text using the base64-encoding algorithm of XML Schemas. There is no relationship between SOAP and base64-encoding;

If we use it, our application (or implementation of SOAP for your platform) must be able to understand and work with base64-encoding.

Page 12: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAP RPC

• The third part of SOAP is an RPC mechanism that turns messages into method calls

• We have a generic message structure + data. It requires just a little more work to turn the message into a function call.

• Must be a standard way to represent parameters and return values, exceptions, etc.

• Note that the encoding and rpc mechanisms are only important if

SOAP is being automatically generated/read from the application level

(see next slide) in a general way

Page 13: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAP RPC cartoon

VB application

InvoiceVB-Structure

SOAP client

SOAP Server

InvoiceJava-Structure

Java application

SOAP Message

The client application thinks its making a procedure call to a remote module

Page 14: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Sample RPC rules

• This is intended just to give you a flavor. Best to allowapplications to do this automatically:

Consider the following three method signatures

// Reverse the string, s, and return the new string.string ReverseString ( [in] string s );// Reverse the string, s, and return the new string.void ReverseString ( [in] string s, [out] string sRev );// Reverse the string, s, passed in by reference.void ReverseString ( [in, out] string s );

See next slide for SOAP rpc encoding

Page 15: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Sample rpc rules

The first version reverses the string and returns the result as the return value of the method

<x:ReverseStringResponse xmlns:x="http://www.wrox.com/"> <x:ret xsi:type="xsd:string">THOR</x:ret></x:ReverseString>

The second version has no return value, but instead uses an out parameter called sRev:

<x:ReverseStringResponse xmlns:x="http://www.wrox.com/"> <x:sRev xsi:type="xsd:string">THOR</x:sRev></x:ReverseString>

The final version reverses the string after passing it by reference, so the parameter s is both an in and out parameter:

<x:ReverseStringResponse xmlns:x="http://www.wrox.com/"> <x:s xsi:type="xsd:string">THOR</x:s></x:ReverseString>

Page 16: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAP transport

• Recall that SOAP is just a generic message envelope

• Augmented by encodingstyle and simple rpc rules, it becomes a powerful middleware layer for remote procedure calls, if one chooses to use it that way

• Now we must consider how to transport SOAP messages -- this is the final ingredient in making it something useful

Page 17: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAP protocol bindings

• Question:how are SOAP messages transmitted?

• Answer: using existing protocols (http, SMTP, etc.)

• This has some obvious advantages vs. defining its own protocol– Piggybacks on security model, general robustness

• This has some disadvantages also– What are these?

• SOAP defines bindings to different protocols that specify how SOAP is used with that protocol to send messages.– http is most popular

Page 18: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Inside http

• http is a simple, flexible protocol

• Some examplesGET http://people.cs.uchicago.edu/~asiegel/lottery/lotto.html

POST /path/script.cgi HTTP/1.0From: [email protected]: HTTPTool/1.0Content-Type: application/x-www-form-urlencodedContent-Length: 32home=Cosby&favorite+flavor=flies

POST /path/script.cgi HTTP/1.0From: [email protected]: HTTPTool/1.0Content-Type: text/xmlContent-Length: 32<greeting>hello world</greeting>

Page 19: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Testing http

• Good idea to play around with http by connecting to server and issuing http commands

• There are a two typical ways to do this:– Using telnet, which allows arbitrary commands to be passed to a server

• telnet people.cs.uchicago.edu 80

• Note that expect can be useful in automating this

– Using a socket library in a programming language (see sock.py on website)

• Question: how does the server obtain the uploaded data in each case?

Page 20: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Role of SOAP

• Note that the http + XML is the important thing here

• SOAP only helps standardize the meaning of the messages that are sent– In terms of datatypes for rpc

– In terms of headers, faults, etc.

• Note that it is still possible to bypass SOAP and define your own xml-based protocol, retaining many of the advantages of SOAP.

Page 21: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Sorting out the API’s

• In Java the following directly related API’s are available:– SAAJ

• SOAP with Attachments API for Java• Provides a relatively low-level interface that allows one to programmatically

construct/decompose SOAP messages and send to web server• Intended more tool writers. Good for learning.

– JAX-RPC• Java API form XML-based RPC• Java’s rmi framework over SOAP

– Compare RMI, CORBA, etc.

• Makes developer unaware of SOAP internals

– Apache XML-RPC for Java• A framework for remote procedure calls using XML-RPC• Recall that XML-RPC is an alternative protocol to SOAP

Page 22: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Looking deeper into SOAP

Page 23: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Envelope

• MUST be the root element of the SOAP message

• MUST be associated with SOAP envelope namespace– http://schemas.xmlsoap.org/soap/envelope– http://www.w3.org/2001/06/soap-envelope in SOAP 1.2 (Oct 15,

2002)

• SOAP serialization namespace– Encoding Style attributes can contain a URI describing how the data should be

serialized.

– Two usual styles (more on this later)

• "SOAP Section 5" encoding: http://www.w3.org/2001/06/soap-encoding

• Literal encoding: (no namespace used – or set to empty string)

• SOAP message MUST NOT contain– DTD

– Processing Instructions.

Page 24: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Envelope versioning

• Version determined by the namespace associated with the Envelope element– SOAP 1.1 Envelope version: http://schemas.xmlsoap.org/soap/envelope– If any other namespace used, assume it's a version problem– Versioning problems must generate a SOAP Fault

• Example SOAP fault:HTTP/1.0 500 Internal Server ErrorContent-Type: text/html; charset="utf-8"Content-length: 311

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body>

<env:Fault><faultcode>env:VersionMismatch</faultcode><faultstring>SOAP Envelope Version Mismatch</faultstring>

</env:Fault></env:Body>

</env:Envelope>

Page 25: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Envelope Versioning Fault in SOAP 1.2

• SOAP 1.2 (Oct 15, 2002) has defined an Upgrade element in the header for the versioning fault:

<?xml version="1.0" ?><env:Envelope

xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Header>

<upg:Upgrade xmlns:upg="http://www.w3.org/2002/06/soap-upgrade"

><envelope qname="ns1:Envelope" xmlns:ns1="http://www.w3.org/2002/06/soap-envelope"

/></upg:Upgrade>

</env:Header><env:Body>

<env:Fault><faultcode>env:VersionMismatch</faultcode><faultstring>Version Mismatch</faultstring>

</env:Fault></env:Body>

</env:Envelope>

Note that 1.2 Envelope Version Fault Response is versioned 1.1 (or whatever incoming request is)

Page 26: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Header

• Optional

• If present, must immediately follow the SOAP Envelope XML element followed by any header entries

• Uses same namespace as Envelope

• Often contains meta-information regarding the method call.

• Examples:– Security

• No security mechanisms yet, but soon

– Transaction IDs

Page 27: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Header

• actor attribute defines the URI for which the header elements are intended (i.e. who should process a Header element)

• mustUnderstand attribute how to process (default is “0” if not present)• encodingStyle attribute used to describe how data (such as binary integers)

are marshaled into characters in the XML document

<env:Header><t:TransactionID xmlns:t="http

://www.cs.uchicago.edu/dangulo/transact" env:mustUnderstand="1" env:actor="http://www.cs.uchicago.edu/dangulo/transact"

>42

</t:TransactionID><m:localizations xmlns:m="http://www.cs.uchicago.edu/dangulo/localize/" env:actor="http://www.cs.uchicago.edu/dangulo/currency">

<m:language>en</m:language><m:currency>USD</m:currency>

</m:localizations></env:Header>

Page 28: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

actor Attribute

• The SOAP message often gets passed through several intermediaries before being processed– For example, a SOAP proxy service might get the message before the target

SOAP service

• Header may contain information for both– intermediary service

– target service

• actor attribute specifies which service should process a specific Header element

• actor attribute is replaced by role attribute in SOAP 1.2

Page 29: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Intermediary Services

• SOAP requires that an intermediary strip off Header elements specified for that intermediary before passing the message to the next service in the chain.

• If information in a Header element targeted for an intermediary is also needed by another service in the chain– The intermediary service may insert additional Header elements with an actor

attribute that specifies the downstream service

• In fact, any service may insert any Header elements that it deems necessary

• If a Header element has no actor attribute– It is assumed to be destined for the final recipient

– This is equivalent to adding an actor attribute with the URL of the final recipient

Page 30: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

mustUnderstand Attribute

• Also put on a Header element

• If its value is "1"– recipient is required to understand and make proper use of the information

supplied by that element– intended for situations where recipient can't do its job unless it knows what to

do with the specific information supplied by this particular element

• Examples of use– Client is upgraded to a new version which includes extra information– username– security

Page 31: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

mustUnderstand Attribute

• If the recipient does not understand this element– Must respond with a SOAP Fault

HTTP/1.0 500 Internal Server ErrorContent-Type: text/xml; charst="utf-8"Content-length: 287

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body>

<env:Fault><faultcode>env:MustUnderstand</faultcode><faultstring>SOAP Must Understand Error</faultcode><faultactor>http://www.cs.uchicago.edu/dangulo/transact</faultactor>

</env:Fault></env:Body>

</env:Envelope>

• faultactor indicates where fault took place• We'll look at Faults in more detail later• Attribute values change to "true" / "false" in SOAP 1.2

Page 32: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Some examples

Taken from W3C primer

Page 33: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Sample SOAP message for travel reservation<?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> <n:passenger xmlns:n="http://mycompany.example.com/employees" env:role="http://www.w3.org/2003/05/soap-envelope/role/next" env:mustUnderstand="true"> <n:name>Andrew Siegel</n:name> </n:passenger> </env:Header> Next slide ..

Page 34: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

<env:Body> <p:itinerary xmlns:p="http://travelcompany.example.org/reservation/travel"> <p:departure> <p:departing>New York</p:departing> <p:arriving>Los Angeles</p:arriving> <p:departureDate>2001-12-14</p:departureDate> <p:departureTime>late afternoon</p:departureTime> <p:seatPreference>aisle</p:seatPreference> </p:departure> <p:return> <p:departing>Los Angeles</p:departing> <p:arriving>New York</p:arriving> <p:departureDate>2001-12-20</p:departureDate> <p:departureTime>mid-morning</p:departureTime> <p:seatPreference/> </p:return> </p:itinerary> <q:lodging xmlns:q="http://travelcompany.example.org/reservation/hotels"> <q:preference>none</q:preference> </q:lodging> </env:Body></env:Envelope>

Page 35: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Sample SOAP reply

<?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:35:00.000-05:00</m:dateAndTime> </m:reservation> <n:passenger xmlns:n="http://mycompany.example.com/employees" env:role="http://www.w3.org/2003/05/soap-envelope/role/next" env:mustUnderstand="true"> <n:name>Andrew Siegel</n:name> </n:passenger> </env:Header> Next slide …

Page 36: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

<env:Body> <p:itineraryClarification xmlns:p="http://travelcompany.example.org/reservation/travel"> <p:departure> <p:departing> <p:airportChoices> JFK LGA EWR </p:airportChoices> </p:departing> </p:departure> <p:return> <p:arriving> <p:airportChoices> JFK LGA EWR </p:airportChoices> </p:arriving> </p:return> </p:itineraryClarification> </env:Body></env:Envelope>

Page 37: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Reply continuing conversational exchange<?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:36:50.000-05:00</m:dateAndTime> </m:reservation> <n:passenger xmlns:n="http://mycompany.example.com/employees" env:role="http://www.w3.org/2003/05/soap-envelope/role/next" env:mustUnderstand="true"> <n:name>Andrew Siegel</n:name> </n:passenger> </env:Header> <env:Body> <p:itinerary xmlns:p="http://travelcompany.example.org/reservation/travel"> <p:departure> <p:departing>LGA</p:departing> </p:departure> <p:return> <p:arriving>EWR</p:arriving> </p:return> </p:itinerary> </env:Body></env:Envelope>

Page 38: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

RPC

Notice that previous did not include rpc capability

To invoke a SOAP RPC, the following information is needed:

1. The address of the target SOAP node.2. The procedure or method name.3. The identities and values of any arguments to be passed to the procedure or method together with any output parameters and return value.4. A clear separation of the arguments used to identify the Web resource which is the actual target for the RPC, as contrasted with those that convey data or control information used for processing the call by the target resource.5. The message exchange pattern which will be employed to convey the RPC, together with an identification of the so-called "Web Method” (on which more later) to be used.6. Optionally, data which may be carried as a part of SOAP header blocks.

Page 39: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAP RPC request with a mandatory header and two input (or "in") parameters

<?xml version='1.0' ?><env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" > <env:Header> <t:transaction xmlns:t="http://thirdparty.example.org/transaction" env:encodingStyle="http://example.com/encoding" env:mustUnderstand="true" >5</t:transaction> </env:Header> <env:Body> <m:chargeReservation env:encodingStyle="http://www.w3.org/2003/05/soap-encoding" xmlns:m="http://travelcompany.example.org/"> <m:reservation xmlns:m="http://travelcompany.example.org/reservation"> <m:code>FT35ZBQ</m:code> </m:reservation> <o:creditCard xmlns:o="http://mycompany.example.com/financial"> <n:name xmlns:n="http://mycompany.example.com/employees">Andrew Siegel</n:name> <o:number>123456789099999</o:number> <o:expiration>2005-02</o:expiration> </o:creditCard> </m:chargeReservation> </env:Body></env:Envelope>

Page 40: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

RPC response with two output (or "out") parameters

?xml version='1.0' ?><env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" > <env:Header> <t:transaction xmlns:t="http://thirdparty.example.org/transaction" env:encodingStyle="http://example.com/encoding" env:mustUnderstand="true">5</t:transaction> </env:Header> <env:Body> <m:chargeReservationResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding" xmlns:m="http://travelcompany.example.org/"> <m:code>FT35ZBQ</m:code> <m:viewAt> http://travelcompany.example.org/reservations?code=FT35ZBQ </m:viewAt> </m:chargeReservationResponse> </env:Body></env:Envelope>

Page 41: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

RPC response with a "return" value and two "out" parameters

<?xml version='1.0' ?><env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" > <env:Header> <t:transaction xmlns:t="http://thirdparty.example.org/transaction" env:encodingStyle="http://example.com/encoding" env:mustUnderstand="true">5</t:transaction> </env:Header> <env:Body> <m:chargeReservationResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding" xmlns:rpc="http://www.w3.org/2003/05/soap-rpc" xmlns:m="http://travelcompany.example.org/"> <rpc:result>m:status</rpc:result> <m:status>confirmed</m:status> <m:code>FT35ZBQ</m:code> <m:viewAt> http://travelcompany.example.org/reservations?code=FT35ZBQ </m:viewAt> </m:chargeReservationResponse> </env:Body></env:Envelope>

Page 42: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Extra Slides

In progress, read to get a sense of underlying details

Page 43: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Marshalling / Serialization

• To be interoperable, we use XML

• XML is ASCII, not binary

• End points use binary

• Must Marshall (Serialize) and UnMarshall (DeSerialize) on the ends

VB application

InvoiceVB-Structure

SOAP client

SOAP Server

InvoiceJava-Structure

Java application

SOAP Message

Data here is binary Data here

is ASCII

Data here is binary

Must Marshall or Serialize

Must UnMarshall or DeSerialize

Page 44: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Body

• Message to exchange.– Most often for RPC calls and error reporting.

• Immediate child element of SOAP Envelope XML element– follows Header, if present

• Uses same namespace as Envelope and Header

• Contains serialized method arguments.

• Remote method name– Used to name the method call’s XML element

– Must immediately follow the SOAP body opening XML tag.

• SOAP Fault goes in the Body (of a response) too

• The only Body elements actually defined in the SOAP specification are the SOAP Fault elements– Other elements are user defined

Page 45: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Example

• A simple SOAP XML document requesting the price of soap (leaving off the required namespaces declarations)

<env:Envelope> <env:Body> <m:GetPrice> <Item>Lever2000</Item>

</m:GetPrice> </env:Body></env:Envelope>

• Note that namespaces qualifiers are not required on elements in the Body.

Page 46: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Client/Server…

• In order for SOAP to work– Client must have code running that is responsible for building the SOAP

request. – Server must also be responsible for

• Understanding the SOAP request• Invoking the specified method• Building the response message• Returning it to the client.

• These details are up to you.

• There already exist SOAP implementations for languages such as C++, Perl, VB, and Java.

Page 47: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Binding

• SOAP is transport independent– SOAP usually transported over HTTP

– SOAP can be transported over any protocol

• e.g. SMTP (e-mail)

• GSI (Globus Secure Transport)

• HTTPS

• pure sockets

• HTTP is the default binding

Page 48: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAPAction HTTP header• When using SOAP over HTTP, must include SOAPAction header

• SOAPAction HTTP request header field indicates that it is a SOAP HTTP request (contains a SOAP message)

• The value– Indicates the intent of the request in a manner readily accessible to the HTTP

server.– Is a URI– Is up to the application – not specified by SOAP specs– Doesn't have to be resolvable

• An HTTP client must use SOAPAction header field when issuing a SOAP HTTP Request.

• An HTTP server must not process an HTTP request as a SOAP HTTP request if it does not contain a SOAPAction header field.

• It may be used by firewalls to filter request messages

• It may be used by servers to facilitate dispatching of SOAP messages to internal message handlers

• It should not be used as an insecure form of access authorization.

Page 49: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAPAction HTTP header

• Example

POST /xt/services/ColorRequest HTTP/1.0Content Length: 442Host: localhostContent-type: text/xml; charset=utf-8SOAPAction: "/getColor"

<!?xml version="1.0" encoding="UFT.8"?><env:Envelope env:encodingStyle="http://schemas.xmlsoap.org/SOAP/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:env="http://schemas.xmlsoap.org/SOAP/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">...

Page 50: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAP Messages with Attachments

• SOAP messages often have attachments, such as pictures

• The attachments don't have to be XML encoded, but may be binary

• The SOAP message becomes the root of a Multipart/Related MIME structure

• The SOAP message refers to the attachment using a URI with the cid: protocol– cid = "content ID"

Page 51: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

SOAP Messages with Attachments

MIME-version: 1.0Content-Type: Multipart/Related; ...

--MIME_boundaryContent-Type: text/xml; ...

<?xml version="1.0" ?><env:Envelope ...

<someTag href="cid:[email protected]"/>...</end:Envelope>

--MIME_boundaryContent-Type: image/gifContent-Transfer-Encoding: binaryContent-ID: <"[email protected]">... binary gif image ...

Page 52: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Encoding

• One type of encoding specified in "section 5" of the SOAP spec

• No default encoding (not even "section 5" encoding)

• Encoding rules exist to define mapping between abstract data types and XML syntax (binary to character mapping)

• Encoding style is specified with the encodingStyle attribute

Page 53: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Encoding• The encodingStyle attribute can be placed on any element –

allowing mixed encoding styles

• Two values most often used (anything possible):– "SOAP Section 5" encoding: http://www.w3.org/2001/06/soap-encoding– Literal encoding: (no namespace used – or set to empty string)

• Also can do base64 encoding

• Can turn it off currently scoped style using an empty string as URL ("")– parent scoped style becomes default again

Page 54: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Response

• No Special HTTP Response headers (doesn't use SOAPAction: header)

• Only special SOAP element is the Fault element and its children• Otherwise, looks like a normal SOAP message<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">

 <soap:Body> <m:FavoriteColorResponseMsg

xmlns:m="http://www.cs.uchicago.edu/dangulo/soap-methods">

  <answer xsi:type="xsd:string">Red...No, Blue...Aarrgh!</answer >  </m:FavoriteColorResponseMsg> </soap:Body></soap:Envelope>

Page 55: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Fault

• The <fault> element is in the body of the SOAP message• 0 or 1 <fault> elements may be in the message• The following subelements may be in the <fault> element

<faultcode> One of the following codes (note: the codes are strings)

<faultstring> The error as a string

<faultactor> Who reported the error

<detail> Details of the problem

VersionMismatch The SOAP namespace is incorrect

MustUnderstand The client sent a header element with a MustUnderstand set to 1, and the server did not understand it

Client The message was incorrectly formed

Server The server had a problem

Page 56: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Fault Code (faultcode)

• One of Two required elements in Fault element– Other required element is faultstring

• Must be associated with SOAP envelope namespace

• Server error code could be something like a back-end database couldn't be reached– Might try resending without modification

• Fault codes are extensible using "dot" notation– Server.BridgeKeeperAbsent– Server.BridgeKeeperAbsent.ThrownInGorge

Page 57: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

HTTP Headers with Faults

• Response code can only be 2xx or 500

• If message is received and understood, the response should use 2xx

Page 58: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

HTTP Headers with Faults

• If message cannot be processed for any reason– server does not understand the message

– message is improperly formatted

– message is missing information

– message cannot be processed for any other reason

– Response should be "500 Internal Server Error"

• 500 response should be followed by a SOAP envelope which includes its own fault code

• Reasoning: the error is internal to the server as far as HTTP is concerned

Page 59: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Example Fault with HTTP and SOAP

HTTP/1.0 500 Internal Server ErrorContent-Type: text/xml; charst="utf-8"Content-length: 287

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body>

<env:Fault><faultcode>env:MustUnderstand</faultcode><faultstring>SOAP Must Understand Error</faultcode><faultactor>http://www.cs.uchicago.edu/dangulo/transact</faultactor>

</env:Fault></env:Body>

</env:Envelope>

Page 60: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Bridge of Death Example• Request

<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">

<soap:Body> <m:FavoriteColorRequestMsg xmlns:m="http://www.cs.uchicago.edu/dangulo/soap-methods/"> <question xsi:type="xsd:string"> What is your favorite color? </question > </m:FavoriteColorRequestMsg> </soap:Body></soap:Envelope>

Page 61: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Bridge of Death Response Example• Response

<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">

 <soap:Body> <m:FavoriteColorResponseMsg

xmlns:m="http://www.cs.uchicago.edu/dangulo/soap-methods">

  <answer xsi:type="xsd:string">Red...No, Blue...Aarrgh!</answer >  </m:FavoriteColorResponseMsg> </soap:Body></soap:Envelope>

Page 62: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Data Encoding

• When sending data over a network– Data must comply with the underlying transmission protocol

– Data must be formatted in such a way that both the sending and receiving entities understand its meaning

• Even if endpoints are different platforms or languages

• Model for SOAP encoding is based on XML data encoding

• Encoding style given in Section 5 of the SOAP specification used to be most common encoding style used– Commonly called "SOAP-Section-5 encoding"

– namespace: http://schemas.xmlsoap.org/encoding/– Commonly aliased as SOAP-ENC:

Page 63: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Data Encoding and Schemas

• In SOAP, Schemas are used as references to definitions of data elements– Aren't used to validate SOAP message data in standard SOAP

processing• However, there's nothing stopping you from doing that

– References to Schemas are often used as namespaces in order to disambiguate a serialized data element

Page 64: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Data Encoding and Schemas

• SOAP Section 5 uses all of the build-in data types defined in the "XML Schema Part 2 Datatypes" specification (at w3c.org)– These data types need to be disambiguated

• namespace: http://www.w3.org/2001/XMLSchema• Commonly aliased as xsd:• used with the data type names• e.g. xsd:string

– A datum is given a data type using the type attribute• This attribute must also be disambiguated• namespace: http://www.w3.org/2001/XMLSchema-instance• Commonly aliased as xsi:• e.g. <dialog xsi:type="xsd:string">What is your favorite color?</dialog>

Page 65: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Other Common Namespaces

• Envelope– namespace: http://schemas.xmlsoap.org/soap/envelope/– Common aliases: env or SOAP-ENV or SOAP or soap

• Example (we've seen this before)

<!?xml version="1.0" encoding="UFT.8"?>

<SOAP-ENV:Envelope

SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/SOAP/encoding/"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:SOAP-ENV="http://schemas.xmlsoap.org/SOAP/envelope/"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

Page 66: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Data Types

• The data type for a given value is never undefined in SOAP

• SOAP distinguished between simple types and complex types– A simple type does not contain any named parts, it just contains a single piece

of data

• Example: string

• Example: int

– A complex type contains multiple pieces of data that have some relation to each other

• Similar to structs or classes or arrays

• Individual pieces of data may be accessed by using– an ordinal position in a sequence of values (like arrays)

– values that are keys to an associative array (like hash tables)

– the names of the constituent parts (like C structs)

• There is always a way to distinguish a specific data value within a complex value

– referred to as the "accessor"

• A names subcomponent of a complex type may be a complex type itself

Page 67: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Built-in Data Types

string byte int unsignedInt boolean unsignedLong duration unsignedShort datetime token date more! time float double anyURI decimal long nonPositiveInteger nonNegativeInteger positiveInteger short

Page 68: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

References

• We briefly saw how to declare these in DTDs• Let's see how to use these<roundTableMembers>

<member><name>King Arthur</name><position>King</position>

</member><member>

<name>Sir Robin</name><position>Knight</position><king>King Arthur</king>

</member><member>

<name>Sir Galahad</name><position>Knight</position><king>King Arthur</king>

</member>

...

Lots of unnecessary duplication

Page 69: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

References

• References help you eliminate unnecessary duplication (normalization)

<roundTableMembers><member id="Arthur">

<name>King Arthur</name><position>King</position>

</member><member>

<name>Sir Robin</name><position>Knight</position><king href="#Arthur" />

</member><member>

<name>Sir Galahad</name><position>Knight</position><king href="#Arthur" />

</member>

...

No more unnecessary duplication

Page 70: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

References

• May not save space if the data items are small

• Should save space if the data items are larger

• Are necessary to link objects.– Graphs

– Organizational structure (like round table in previous slide)

– Students' class enrollment

Page 71: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Indicating Type

• Every element that contains a value must also indicate the type of the data

• In SOAP, these types may be specified– By using the xsi:type attribute

• with a valid type identifier, such as xsd:string or xsd:int– By being an element of an array that already constrains the type of its contents

– By being related to some type that is defined in an XML Schema

• So far, we've only seen examples of the first method

• SOAP (by itself – without WSDL), usually uses the first method (and the second)

• There are two different string type declarations:– xsd:string from XML Schema– SOAP-ENC:string from SOAP Section 5

• This one allows for id and href attributes

Page 72: Ace104 Lecture 5 The Flavor of SOAP: A study of the key concepts without all of the detail.

Indicating Type

• Example of dynamically declaring the type inside the XML document itself

<?xml version="1.0" encoding="UTF-8"?>

<SOAP-ENV:Envelope ...

...

<SOAP-ENV:Body>

...

<lue xsi:type="xsd:int">42</lue>

<bq xsi:type="xsd:string">What is your color?</bq>

<bq xsi:type="SOAP-ENC:string">Color?</bq>

...

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>