55
Henrik Frystyk Nielsen, <frystyk @microsoft.com > NOTE: Some slides have been changes and additional slides have been added to the original version Introduction to SOAP A Walkthrough of Core Technical Concepts Part 5

Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original [email protected] Introduction

  • View
    217

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

Henrik Frystyk Nielsen, <[email protected]>

NOTE: Some slides have been changes and additional slides have been added to the original version

Introduction to SOAPA Walkthrough of Core Technical Concepts

Part 5

Page 2: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

2

What is SOAP?

• SOAP is a simple, lightweight XML protocol for exchanging structured and typed information on the Web

• Overall design goal: KISS• Can be implemented in a weekend• Stick to absolutely minimum of functionality

• Make it Modular and Extensible• No application semantics and no transport

semantics• Think “XML datagram”

Page 3: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

3

SOAP Contains Four Parts:

• An extensible envelope expressing (mandatory)• what features and services are represented in a

message;• who should deal with them,• whether they are optional or mandatory.

• A set of encoding rules for data (optional)• Exchange instances of application-defined data types and

directed graphs• Uniform model for serializing abstract data models that

can not directly be expressed in XML schema• A Convention for representation RPC (optional)

• How to make calls and responses• A protocol binding to HTTP and HTTP-EF (optional)

Page 4: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

4

SOAP Envelope

SOAP Example in HTTP

HTTP RequestSOAP-HTTP Binding

SOAP HeaderSOAP Body

POST /Accounts/Henrik HTTP/1.1Host: www.webservicebank.comContent-Length: nnnnContent-Type: text/xml; charset="utf-8"SOAPAction: "Some-URI"

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"  SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">   <SOAP:Header>       <t:Transaction xmlns:t="some-URI" SOAP:mustUnderstand="1">               5       </t:Transaction>   </SOAP:Header>   <SOAP:Body>       <m:Deposit xmlns:m="Some-URI">           <m:amount>200</m:amount>       </m:Deposit>   </SOAP:Body></SOAP:Envelope>

Page 5: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

5

SOAP Example in SIP

SOAP Envelope

SIP RequestSOAP-SIP Binding

SOAP Body

SERVICE sip:broker.ubiquity.net SIP/2.0To: sip:broker.ubiquity.netFrom: sip:proxy.ubiquity.netCall-ID:[email protected]: 1 SERVICEVia: SIP/2.0/UDP proxy.ubiquity.netContent-Type: text/xmlContent-Length: 381

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope” SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP:Body> <m:SetCreditStatus xmlns:m="http://www.ubiquity.net/sipservices"> <m:user>sip:[email protected]</m:user> <m:status>super</m:status> </m:SetCreditStatus> </SOAP:Body></SOAP:Envelope>

for instant message (like video-conferencing)

Page 6: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

6

… or SOAP by Itself…<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope” SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP:Header> <m:MessageInfo xmlns:m="http://www.info.org/soap/message"> <m:to href="mailto:[email protected]"/> <m:from href="mailto:[email protected]"/> <m:contact href="mailto:[email protected]"> </m:MessageInfo> </SOAP:Header> <SOAP:Body> <msg:Message xmlns:m="http://www.info.org/soap/message"> <msg:subject>Your house is on fire!</msg:subject> <msg:feed href="ram://livenews.com/yourhouse"/> </msg:Message> </SOAP:Body></SOAP:Envelope>

Page 7: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

7

SOAP Stack Examples

SOAP

HTTP

TCP

Protocol Binding

SOAP

SIP

TCP

Protocol Binding

SOAP

SIP

UDP

Protocol Binding

SOAP

MIME Multipart

Protocol Binding

SOAP

SMTP

TCP

Protocol Binding

SOAP

TCP

Protocol Binding

SOAP

UDP

Protocol Binding

ServicesServices Services Services

Services Services Services

Page 8: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

8

Note Again: SOAP is a Protocol!

• What does this mean?• It is not a distributed object system• It is not an RPC system• It is not even a Web application

• Your application decides what your application is!• You can build a tightly coupled system

…or…• You can build a loosely coupled system

• Tunneling is a property of the application, not the protocol

Page 9: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

9

SOAP is Designed for Evolvability• How are features and services deployed in the Web?

• Often by extending existing applications• Spreading from in the small to the large over time

• This means that:• Applications have different capabilities at all times• We have to support this

• This requires that:• Applications supporting a particular feature or

service should be able to employ this with no prior agreement;

• Applications can require that the other party either understand and abide by the new feature or service or abort the operation

Page 10: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

10

Why Not Roll My Own XML Protocol?• SOAP allows you to define your particular feature

or service in such a way that it can co-exist with other features and services within a SOAP message

• What is a feature or a service?• Authentication service• Payment service• Security service• Transaction management service• Privacy service

• Not owning the message means easier deployment and better interoperability

Page 11: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

11

What is Interoperability?

• Interoperability is the intersection of features and service supported by two or more communicating peers:

Peer BPeer A

Interoperability

Page 12: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

12

Extensibility vs. Evolvability

• Extensibility: Cost pr new feature/service increases over time

• Evolvability: Cost pr new feature/service is flat

Time

Time

Feature set 3

Feature set 3

Feature set 2

Feature set 2

Feature set 1

Feature set 1

Page 13: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

13

Interoperability vs. Evolvability

• As evolvability goes up, interoperability goes down

Interoperability

Evolvability

SOAP

Page 14: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

14

SOAP and Composability

• We are looking at two types of composability of features and services within a message:• Vertical: multiple features and services can exist

simultaneously within the same message• Horizontal: features and services within a

message can be intended for different recipients.• This is not boxcarring but rather the HTTP

proxy model and as we shall see, the SOAP messaging model as well

Page 15: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

15

Vertical Composability

• Allows for independent features to co-exist

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope” SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP:Header> <a:authentication …>…</a:authentication> <s:security …> … </s:security> <t:transactions …> … </t:transactions> <p:payment …> … </p:payment> </SOAP:Header> <SOAP:Body> <m:mybody> … </m:mybody> </SOAP:Body></SOAP:Envelope>

<a:authentication …>…</a:authentication> <s:security …> … </s:security> <t:transactions …> … </t:transactions> <p:payment …> … </p:payment>

<m:mybody> … </m:mybody>

Page 16: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

16

Horizontal Composability

• Allows for intermediaries

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope” SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP:Header> <a:authentication actor="intermediary a"…>…</a:authentication> <s:security actor="intermediary b"…> … </s:security> <t:transactions actor="intermediary c"…> … </t:transactions> <p:payment actor="destination"…> … </p:payment> </SOAP:Header> <SOAP:Body> <m:mybody> … </m:mybody> </SOAP:Body></SOAP:Envelope>

<a:authentication actor="intermediary a"…>…</a:authentication> <s:security actor="intermediary b"…> … </s:security> <t:transactions actor="intermediary c"…> … </t:transactions> <p:payment actor="destination"…> … </p:payment>

<m:mybody> … </m:mybody>

Page 17: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

17

Modularity through XML Namespaces• The SOAP envelope namespace

• http://schemas.xmlsoap.org/soap/envelope/• Resolves to the SOAP Envelope Schema

• The SOAP encoding namespace• http://schemas.xmlsoap.org/soap/encoding/• Resolves to the SOAP Encoding Schema

• Separate namespaces help enforce modularity• SOAP Envelope Schema provides formal definition

of Envelope

Page 18: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

18

The SOAP Envelope

• A SOAP envelope defines a SOAP message• Basic unit of exchange between SOAP processors

• SOAP messages are one-way transmissions• From sender through intermediaries to receiver• Often combined to implement patterns such as

request/response• Messages are routed along a "message path"

• Allows for processing at one or more intermediate nodes in addition to the ultimate destination node.

• A node is a SOAP processor and is identified by a URI• Envelopes can be nested

• Only outer envelope is "active" to the receiving SOAP processor

Page 19: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

19

SOAP Headers

• Allows for modular addition of features and services• Open-ended set of headers

• Authentication, privacy, security etc. etc.• Can address any SOAP processor using the

"actor" attribute• Can be optional/mandatory using the

"mustUnderstand" attribute

Start web://bar web://toto web://foo

Page 20: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

20

SOAP Headers

• E.g. SOAP header that contains an intermediate child element named username. It identifies the user who is making the request.

<env:Header> <ns1:username xmlns ns1 = “JavaSoapBook”> Jessica </ns1:username></env:Header>

Page 21: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

21

Semantics of SOAP Headers

• Contract between sender and recipient• Recipient is described by "actor" attribute• For intermediaries (like proxies)

• Allows for different types of negotiation:• Take it or leave it directly supported• Let's talk about it can be built on top

• And for different settings:• Server dictated• Peer-to-peer • Dictated by third party

Page 22: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

22

Semantics of SOAP Headers

• E.g. We want an intermediate application server located at http://www.cs.rmit.edu.au/AppServer to log the names of users that made requests and than pass them to the final destination

<env:Header> <ns1:username xmlns:ns1 = “JavaSOAPBook” env:actor = “http://www.cs.rmit.edu.au/AppServer”> Jessica </ns1:username></env:Header>

Page 23: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

23

The SOAP actor Attribute

• The "Actor" attribute is a generalization of the HTTP Connection header field• Instead of hop-by-hop vs. end-to-end, the actor

attribute can address any SOAP processor because it is a URI

• Special cases:• "next hop" has a special URI assigned to it• "end" is the default destination for a header• "end" is the destination for the body

Page 24: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

24

The SOAP mustUnderstand Attribute• The "mustUnderstand" is the same as

"mandatory" in the HTTP Extension Framework• Requires that the receiving SOAP processor

must accept, understand and obey semantics of header or fail

• It is up to the application to define what "understand" means

• This allows old applications to gracefully fail on services that they do not understand

Page 25: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

25

• E.g. sending application is upgraded with a new version. This new version may use some new information that has to be processed by the server. Of course, you expect the server to be upgraded. However if this did not happened, the message should be returned by SOAP with “VersionMistmatch”.<env:Header>

<ns1:username xmlns:ns1 = “JavaSOAPBook” env:actor = “http://www.cs.rmit.edu.au/AppServer” env:mustUnderstand = “1”> Jessica </ns1:username></env:Header>

Page 26: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

26

• An answer could be

HTTP/1.0 5000 Internal Server ErrorContent-Type: text/xml….

<env:Envelope xmlns:env=“http://schemas.xmlsoap.org/…” <env:Body> <env:Fault> <faultcode> env:MustUnderstand </faultcode> <faultstring> SOAP Must Understand Error </faultstring> <faultactor> http://www.cs.rmit.edu.au/AppServer </faultactor> </env:fault> </env:Body></env:Envelope>

Page 27: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

27

SOAP Body

• Special case of header• Default contract between sender and ultimate

recipient• Different from HTTP's header/body separation• Defined as a header with attributes set to:

• Implicit mustUnderstand attribute is always "yes"

• Implicit actor attribute is always "the end"Start web://bar web://toto web://foo

Page 28: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

28

SOAP Fault

• The SOAP Fault mechanism is designed to support the composability model• Is not a scarce resource as in HTTP where there can be

only one (the Highlander principle)• A SOAP message can carry one SOAP Fault element

• Must be placed in the Body of the message• The Fault Detail element carries information for faults

resulting from the body• Detail information for faults resulting from headers are

carried in the header• Different types of faults

• VersionMismatch• MustUnderstand• Client (e.g. errors in formatting of the SOAP message)• Server (e.g. sever currently offline)

Page 29: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

29

SOAP Fault Example

• A SOAP message containing an authentication service:<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope”

SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP:Header> <m:Authentication xmlns:m="http://www.auth.org/simple"> <m:credentials>Henrik</m:credentials> </m:Authentication> </SOAP:Header> <SOAP:Body> … body goes here … </SOAP:Body></SOAP:Envelope>

Page 30: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

30

SOAP Fault Example… 2

• …results in a fault because the credentials were bad:<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope”

SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP:Header> <m:Authentication xmlns:m="http://www.auth.org/simple"> <m:realm>Magic Kindom</m:realm> </m:Authentication> </SOAP:Header> <SOAP:Body>      <SOAP:Fault>           <SOAP:faultcode>SOAP:Client</faultcode>           <SOAP:faultstring>Client Error</faultstring>       </SOAP:Fault> </SOAP:Body></SOAP:Envelope>

Page 31: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

31

SOAP Versioning Model

• Bad experiences with version numbers in decentralized environments• Extremely confusing in HTTP – whole RFC on the topic

• Typical uses of number based "versioning"• Backwards compatible (minor version number)• Backwards incompatible (major version number)

• SOAP supports "minor" versioning within the envelope using header and body elements• The SOAP composability model ("WYSIWYG on the wire")

• The SOAP Envelope Namespace URI defines the "major" of the SOAP envelope• Changing Namespace URI is equivalent to change major

version number• Possible to negotiate major versioning change using SOAP

header• Equivalent to the HTTP Upgrade header field

Page 32: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

32

• E.g. SOAP used name space for version control http://schemas.xmlsoap.rog/soap/envelope for SOAP 1.1

http://www.w3.org/2001/09/soap-envelope for SOAP 1.2

Based on SOAP rules (that nodes need to enforce)

1. A complaint SOAP 1.1 node receiving a SOAP 1.2 message will generate a VersionMismatch SOAP fault using an envelope qualified by the “http://schemas.xmlsoap.org/soap/envelope” namespace identifier.

2. A SOAP 1.2 node receiving a SOAP 1.1. Message may either process the message as SOAP 1.1 or generate a SOAP VersionMismatch fault using “http://schemas.xmlsoap.org/soap/envelope” namespace identifier.

Page 33: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

33

SOAP and "Binary" Data

• "Binary" can in fact mean any data that is to be tunneled through SOAP• Encrypted data, images, XML documents, SOAP

envelopes as data• Can be carried in two ways

• Within the envelope as binary blob (i.e. binary large objects)

• Referenced from within the SOAP envelope• References can point to anything including

• MIME multipart, HTTP accessible resources etc.• Integrity can be obtained through manifest

Page 34: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

34

Binding to HTTP

• The purpose of the HTTP protocol binding is two-fold• To ensure that SOAP is carried in a way that is

consistent with HTTP’s message model• Intent is not to break HTTP

• To indicate to HTTP servers that this is a SOAP message• Allows HTTP servers to act on a SOAP message

without knowing SOAP• Binding only works for HTTP POST requests• SOAP intermediary is not the same as HTTP

intermediary• Only HTTP origin server can be SOAP intermediary

Page 35: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

35

HTTP Request

POST /Accounts/Henrik HTTP/1.1Content-Type: text/xml; charset="utf-8“Content-Length: nnnnSOAPAction: "http://electrocommerce.org/MyMessage"

<SOAP:Envelope...

• Use HTTP POST request method name• Use the SOAPAction HTTP header field

• It cannot be computed – the sender must know• It should indicate the intent – not the

destination• SOAP request doesn't require SOAP response

SOAPAction: "http://electrocommerce.org/MyMessage"

Page 36: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

36

HTTP Response

• Successful responses can 2xx status codes• All 3xx, 4xx, and 5xx status codes work as normal• SOAP faults must use 500 status code• SOAP response doesn't require SOAP request

• Response can in fact be empty

HTTP/1.1 200 OkContent-Type: text/xml; charset="utf-8“Content-Length: nnnn

<SOAP:Envelope...

Page 37: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

37

Purpose of SOAP Encoding

• Given a schema in any notation consistent with the data model defined by SOAP, a schema for an XML grammar may be constructed

TypeModelingLanguage

XMLSchema

Page 38: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

38

Purpose of SOAP Encoding… 2

• Given a type-system schema and a particular graph of values conforming to that schema, an XML instance may be constructed.

XMLSchema

XMLInstance

ValueGraph

Page 39: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

39

Purpose of SOAP Encoding… 3

• Given an XML instance produced in accordance with these rules, and given also the original schema, a copy of the original value graph may be constructed.

XMLInstance

ValueGraph

XMLSchema

Page 40: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

40

Simple Example

<Address id="Address-3"> <street>28 Sea Dr #103</street> <city>Unicity</city> <state>CA</state></Address>

<Student id="Student-2567"> <name>Michael</name> <dormaddr href="#Address-3"/> <attends href="#Course-19"/> <attends href="#Course-253"/></Student>

Page 41: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

41

Basic Rules (in part)

• All values are represented as element content• An element may be "independent" (top level of

serialization) or "embedded" (everything else) • Values can be single-reference or multi-reference• A multi-reference value is represented as the

content of an independent element. It has an unqualified attribute named "id" and of type "ID".

• An accessor can point to a multi-reference value with a local, unqualified attribute named "href" and of type "uri-reference“

• The root attribute can be used to indicate roots that are not true roots in a graph

Page 42: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

42

Using references

<member> <firstName> Rob </firstName> <lastName> Englander </lastName></member><member> <firstName> Jessica </firstName> <lastName> Englander </lastName></member><member> <firstName> Arnold </firstName> <lastName> Englander </lastName></member>….

<surName id=“LastN”>Englander</surName><member> <firstName> Rob </firstName> <lastName href=“#LastN”/></member><member> <firstName> Jessica </firstName> <lastName href=“#LastN”/></member><member> <firstName> Arnold </firstName> <lastName href=“#LastN”/></member>….

Page 43: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

43

Indicating the Type

• For each element containing a value, the type of the value is represented by at least one of the following conditions:• The containing element instance contains an

xsi:type attribute,• The containing element instance is itself

contained within an element containing a (possibly defaulted) SOAP-ENC:arrayType attribute or

• The name of the element bears a definite relation to the type, that type then determinable from a schema.

Page 44: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

44

Simple Types

• A "simple type" is a class of simple values• SOAP uses all the types found in the section "Built-

in data types" of "XML Schema Part 2: Datatypes"• A simple value is represented as character data,

that is, without any sub-elements

Page 45: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

45

Simple Type Examples<element name="age" type="int"/><element name="height" type="float"/><element name="displacement" type="negativeInteger"/><element name="color">  <simpleType base="xsd:string">    <enumeration value="Green"/>    <enumeration value="Blue"/>  </simpleType></element><age>45</age><height>5.9</height><displacement>-450</displacement><color>Blue</color>

Page 46: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

46

Compound Types

• A “compound” type is a class of compound values• Each related value is potentially distinguished by a

role name, ordinal or both (accessor)• Supports traditional types like structs and arrays• Supports nodes with with many distinct accessors,

some of which occur more than once• Preserves order but doesn't require ordering

distinction in the underlying data model

Page 47: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

47

Struct Compound Type

• A compound value in which accessor name is the only distinction among member values, and no accessor has the same name as any other<e:Book> <author>Henry Ford</author> <preface>When I…</preface> <intro>This is a book.</intro></e:Book>

Page 48: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

48

Array Compound Type

• A compound value in which ordinal position serves as the only distinction among member values

<SOAP-ENC:Array SOAP-ENC:arrayType="xyz:Order[2]">   <Order>       <Product>Apple</Product>       <Price>1.56</Price>   </Order>   <Order>       <Product>Peach</Product>       <Price>1.48</Price>   </Order></SOAP-ENC:Array>

Page 49: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

49

General Compound Type

• A compound value with a mixture of accessors distinguished by name and accessors distinguished by both name and ordinal position<PurchaseLineItems>   <Order>       <Product>Apple</Product>       <Price>1.56</Price>   </Order>   <Order>       <Product>Peach</Product>       <Price>1.48</Price>   </Order></PurchaseLineItems>

Page 50: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

50

Serializing Relationships

• The root element of the serialization serves only as lexical container.

• Elements can reflect arcs or nodes• Independent elements always reflect nodes• Embedded elements always reflect arcs• Element names correspond to node or arc labels• Arcs are always encoded as embedded elements

Page 51: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

51

1:1 Relationships

• A 1:1 relationship is expressed by simple containment. For example, if a student attends a course, the canonical XML looks like

<Student> <name>Alice</name> <attends> <name>Greek</name> </attends></Student>

Page 52: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

52

1:n and n:1 Relationships

• A 1:many relationship is expressed by multiple elements for the 1:many direction or single element for the many:1 direction. <Teacher id="Teacher-1"> <name>Alice</name> <teaches> <name>Greek</name> </teaches> <teaches > <name>English History</name> </teaches></Teacher>

Page 53: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

53

m:n Relationships

• A many:many relationship is expressed by using references in both directions.

<Student id="Student-1"> <name>Alice<name> <attends href="#Course-1"/> <attends href="#Course-2"/></Student><Course id="Course-1"> <name>Greek</name> <attendee href="Student-1"/></Course>

Page 54: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

54

SOAP and RPC

• A method invocation is modeled as a struct• A method response is modeled as a struct• Struct contains an accessor for each [in] or [in/out]

or [out] parameter.• The request struct is both named and typed

identically to the method name.• The response struct name is not important• The first accessor is the return value followed by

the parameters in the same order as in the method signature

Page 55: Henrik Frystyk Nielsen, NOTE: Some slides have been changes and additional slides have been added to the original versionfrystyk@microsoft.com Introduction

55

Summary

• SOAP envelope provides• Composability in the vertical (Shopping basket)• Composability in the horizontal (Amtrak)

• SOAP can be used with many protocols• Easy to deploy with existing infrastructure

• SOAP is fundamentally a one-way message• Supports request/response, RPC etc.• Your application decides what it is!