330 likes | 346 Views
Web Services: SOAP. SOAP. SOAP is the standard WS messaging protocol Initially SOAP meant S imple O bject A ccess P rotocol later S ervice O riented A rchitecture P rotocol but since v 1.2 it means simply SOAP. History and Versions.
E N D
SOAP • SOAP is the standard WS messaging protocol • Initially SOAP meant • Simple Object Access Protocol later • Service Oriented Architecture Protocol but since v1.2 it means simply SOAP
History and Versions • SOAP was designed in 1998 byDave Winer, Don Box, Bob Atkinson, Mohsen Al-Ghosein • SOAP 1.1 – W3C recommendationsince May 2000 • J2EE1.4 standard • SOAP 1.2 – W3C recommendationsince June 2003 • Java EE 5 standard
What is SOAP? • SOAP is a communication protocol • SOAP is for communication between applications • SOAP is a format for sending messages • SOAP is designed to communicate via Internet • SOAP is platform independent • SOAP is language independent • SOAP is based on XML • SOAP is simple and extensible • SOAP allows you to get around firewalls • SOAP is developed as a W3C standard
What SOAP is not? • SOAP is not a component model • It cannot replace object architectures like EJB, JavaBeans • SOAP is not a programming language • It only can describe some distributed modes of processing and faults • SOAP is not a one-size-fits-all solution for distributed computing • There is still place for RMI, COM+ etc. distributed technologies.
Why SOAP? • Application programs need to communicate via Internet • HTTP as it is, does not support RPC (Remote Procedure Calls) very well. Two well-known adaptations - REST and SOAP exist. • SOAP was initially designed to work on top of HTTP, it can be used on top of SMTP etc. as well. Besides RPCs, there are asynchronous modes of processing.
SOAP over HTTP, SMTP, and Raw TCP/IP A SOAP XML document instance, which is called a SOAP message,is usually carried as the payload of some other network protocol
One-Way versus Request/Response • Web services can use One-Way messaging or Request/Response messaging
What is defined by SOAP? • Message Envelope • Encoding Rules • RPC Convention • Binding with underlying protocols
SOAP Message • SOAP messageis made of • SOAP Envelope (in XML) • Zero or more attachments • Zero or more "underlying protocol" header fields • SOAP Envelope is composed of • SOAP body • Main content of the message • Zero or more SOAP header blocks • Metadata • Data aimed at intermediaries • Can also contain application data for ultimate receiver
HTTP Request HTTP Body XML Syntax SOAP Envelope SOAP Body SOAP Body Block Textual Integer 0x0b66 SOAP in HTTP Request Sender Receiver
SOAP Message Structure • A SOAP message is analogous to an envelope used in traditional postal service • A SOAP message is a kind of XML document • SOAP has its own XML schema, namespaces, and processing rules <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <!-- Header blocks go here --> </soap:Header> <soap:Body> <!-- Application data goes here --> </soap:Body> </soap:Envelope>
SOAP Message Structure • A SOAP message may have a single Body element preceded, optionally, by one Headerelement • The Envelope element cannot contain any other children! • The Header element contains information about the message: • security credentials • transaction IDs • routing instructions • debugging information • payment tokens
Example: SOAP Header <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mi="http://www.Monson-Haefel.com/message-id"> <soap:Header> <mi:message-id> 11d1def534ea:b1c5fa:f3bfb4dcd7:-8000 </mi:message-id> </soap:Header> <soap:Body> <!-- Application-specific data goes here --> </soap:Body> </soap:Envelope>
SOAP Namespaces • XML namespaces play an important role in SOAP messages • Examples of namespace prefixes:
Example: SOAP Namespaces <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sec="http://schemas.xmlsoap.org/soap/security/2000-12" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:mi="http://www.Monson-Haefel.com/jwsbook/message-id"> <soap:Header> <mi:message-id>11d1def534ea:b1c5fa:f3bfb4dcd7:-8000</mi:message-id> <sec:Signature>...</sec:Signature> </soap:Header> <soap:Body sec:id="Body"> <po:purchaseOrder orderDate="2003-09-22" xmlns:po="http://www.Monson-Haefel.com/jwsbook/PO" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> ... </po:purchaseOrder> </soap:Body> </soap:Envelope>
SOAP Message Path • Initial sender creates message • Ultimate receiverexecutes main operation • Intermediaries perform additional processing
Initial sender Security intermediary Final receiver SOAP Nodes • The applications along the message path are also called SOAP nodes • Example: • security node authenticates users and verifies message integrity • SOAP message Header blocks are intended to be processed in general by intermediary nodes
Roles and Targeting • Header blocks are targeted to node via "role" attribute (URI) • Role is either address of a node or role name • E.g. this security intermediary (address) • E.g. any security intermediary (role name) • Example <ns:myHeaderBlock role="…/logging" /> • The Body is always targeted to ultimate receiver
Roles and Targeting • SOAP defines three special roles: • none • next • ultimateReceiver • The "mustUnderstand"attribute • If set to “true”, the node must know how to process the header • If a node doesn't understand a mandatory header block, it must generate a SOAP fault
Example: Headers with Roles <?xml version='1.0' ?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Header> <m:reservation xmlns:m="…" 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=“…" env:role=" http://www.w3.org/2003/05/soap-envelope/role/next" env:mustUnderstand="true"> <n:name>Åke Jógvan Øyvind</n:name> </n:passenger> </env:Header>
Intermediary Node Algorithm • Receive message • Determine roles played • Verify all mandatory blocks targeted to node are understood • Process appropriate header blocks • Processing possibly produces a fault • Remove processed headers • Add new headers if necessary • Forward message to next node
Ultimate Receiver Algorithm • Receive message • Process appropriate header blocks • Processing possibly produces a fault • Process all body blocks • Processing possibly produces a fault
SOAP Messaging Modes • SOAP supports four modes of messaging • RPC/Literal • Document/Literal • RPC/Encoded • Document/Encoded • However, RPC/Encoded and Document/Encoded modes are explicitly prohibited
Document/Literal Mode • In the Document/Literal mode of messaging, a SOAP Body element contains an XML document fragment • A well-formed XML element that contains arbitrary application data (text and other elements) that belongs to some XML schema and namespace
Example: Document/Literal Body <soap:Body> <po:purchaseOrder orderDate="2003-09-22" xmlns:po=“http://www.Monson-Haefel.com/jwsbook/PO"> <po:accountName>Amazon.com</po:accountName> <po:accountNumber>923</po:accountNumber> ... <po:book> <po:title>J2EE Web Services</po:title> <po:quantity>300</po:quantity> <po:wholesale-price>24.99</po:wholesale-price> </po:book> </po:purchaseOrder> </soap:Body>
RPC/Literal Mode • The RPC/Literal mode of messaging enables SOAP messages to model calls to procedures or method calls with parameters and return values • The contents of the Body are always formatted as a struct • In many cases is used to expose traditional components (servlet, EJB, RMI) as Web services
Example: RPC/Literal public interface BookQuote extends java.rmi.Remote { public float getBookPrice(String ISBN) throws RemoteException, InvalidISBNException; } <soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mh="http://www.Monson-Haefel.com/jwsbook/BookQuote"> <soap:Body> <mh:getBookPrice><isbn>0321146182</isbn></mh:getBookPrice> </soap:Body> </soap:Envelope> <soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mh="http://www.Monson-Haefel.com/jwsbook/BookQuote" > <soap:Body> <mh:getBookPriceResponse><result>24.99</result> </mh:getBookPriceResponse> </soap:Body> </soap:Envelope>
SOAP Faults • SOAP fault messages are the mechanism by which SOAP applications report errors to nodes earlier in the message path • SOAP faults are returned to the receiver's immediate sender only • Fault element information items • faultcode • Client, Server, VersionMismatch, MustUnderstand • faultstring • faultactor • detail
Example: SOAP Fault <soap:Fault> <faultcode>soap:Client</faultcode> <faultstring> The ISBN value contains invalid characters </faultstring> <faultactor>http://www.xyzcorp.com</faultactor> <detail> <mh:InvalidIsbnFaultDetail> <offending-value>19318224-D</offending-value> <conformance-rules> The first nine characters must be digits. The last character may be a digit or the letter 'X'. Case is not important. </conformance-rules> </mh:InvalidIsbnFaultDetail> </detail> </soap:Fault>
SOAP over HTTP • SOAP messages sent over HTTP are placed in the payload of an HTTP request or response POST /jwsbook/BookQuote HTTP/1.1 Host: www.Monson-Haefel.com Content-Type: text/xml; charset="utf-8" Content-Length: 295 SOAPAction="" <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mh="http://www.Monson-Haefel.com/jwsbook/BookQuote"> <soap:Body> <mh:getBookPrice> <isbn>0321146182</isbn> </mh:getBookPrice> </soap:Body> </soap:Envelope>
References • SOAP Tutorial (W3C Schools)http://www.w3schools.com/soap/default.asp • SOAP-1.2 Primerhttp://www.w3.org/TR/soap12-part0/ • SOAP Version 1.2 W3C Specificationhttp://www.w3.org/TR/soap12-part1/ • Book “J2EE Web Services” by Richard Monson-Haefel http://www.amazon.ca/J2EE-Web-Services-Richard-Monson-Haefel/dp/0321146182