apache axis2

13
Apache Axis2 SOAP Primer

Upload: sanjiv

Post on 07-Jan-2016

23 views

Category:

Documents


1 download

DESCRIPTION

SOAP Primer. Apache Axis2. Agenda. What is SOAP? Characteristics SOAP message structure Header blocks Fault notification Exercises. What is SOAP?. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Apache Axis2

Apache Axis2

SOAP Primer

Page 2: Apache Axis2

Agenda What is SOAP? Characteristics SOAP message structure Header blocks Fault notification Exercises

Page 3: Apache Axis2

What is SOAP? Provides the definition of the XML-based

information which can be used for exchanging structured and typed information between peers in a decentralized, distributed environment

Specification: http://www.w3.org/TR/soap/

Initial Sender

Intermediary

Ultimate Receiver

Page 4: Apache Axis2

Characteristics A SOAP message is formally specified as an

XML infoset "on-the-wire" representation can be anything

SOAP describes a stateless, one-way message exchange mechanism between a SOAP sender and a SOAP receiver

But applications can create more complex interaction patterns on top of this one-way exchange mechanism request/response request/multiple responses back-and-forth conversations

Page 5: Apache Axis2

SOAP Message Structure

Envelope

Header (Optional)

Header Block 1

Header Block 2

Body

Page 6: Apache Axis2

Example SOAP Message

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

<soapenv:Envelope xmlns:soapenv="...">

<soapenv:Body>

<ns1:c2f xmlns:ns1="http://mypkg"> <ns1:cTemp>100.0</ns1:cTemp> </ns1:c2f>

</soapenv:Body>

</soapenv:Envelope>

SOAP 1.2: http://www.w3.org/2003/05/soap-envelope

Page 7: Apache Axis2

Example SOAP Message 2

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

<soapenv:Envelope xmlns:soapenv="...">

<soapenv:Header> <exh:client xmlns:exh="..." soapenv:mustUnderstand="true"> <exh:id>AS223@12</exh:id> </exh:client> </soapenv:Header>

<soapenv:Body> <ns1:c2f xmlns:ns1="http://mypkg"> <ns1:cTemp>100.0</ns1:cTemp> </ns1:c2f> </soapenv:Body>

</soapenv:Envelope>

Page 8: Apache Axis2

Header Blocks Each header block may contain an optional

“role” attribute Any URI can be the value

Some predefined roles Next

http://www.w3.org/2003/05/soap-envelope/role/next Ultimate Receiver

http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver None

http://www.w3.org/2003/05/soap-envelope/role/none Empty (“”)

Page 9: Apache Axis2

Header Blocks (Cont.) A header block may contain “mustUnderstand”

attribute true: Targeted node must process the header false: Targeted node may process the header

A header block may contain “relay” attribute true: Header block targeted at the node must be

relayed if it is not processed false: Header block targeted at the node is not

forwarded if it is not processed

Page 10: Apache Axis2

Fault Notification SOAP fault notification mechanism is based on

fault details put inside SOAP body<soapenv:Body> <soapenv:Fault>

<soapenv:Code> <soapenv:Value> soapenv:Receiver </soapenv:Value> </soapenv:Code>

<soapenv:Reason> <soapenv:Text xml:lang="en-US"> Undeclared namespace prefix "ns1" </soapenv:Text> </soapenv:Reason>

<soapenv:Detail />

</soapenv:Fault></soapenv:Body>

Page 11: Apache Axis2

Fault Notification (Cont.) Nested fault details can be placed inside

“Subcode”<soapenv:Body> <soapenv:Fault>

<soapenv:Code> <soapenv:Value> ... </soapenv:Value> <soapenv:Subcode> <soapenv:Value> ... </soapenv:Value> <soapenv:Subcode> ... </soapenv:Subcode> </soapenv:Subcode> </soapenv:Code>

...

Page 12: Apache Axis2

Fault Notification (Cont.)

<soapenv:Fault>

<soapenv:Code> </soapenv:Code>

<soapenv:Reason> </soapenv:Reason>

<soapenv:Detail> </soapenv:Detail>

<soapenv:Node> </soapenv:Node>

<soapenv:Role> </soapenv:Role>

</soapenv:Fault>

The node that generated the fault

The role played by the node that generated the fault

Page 13: Apache Axis2

Exercises In Module 01 (“Introduction to Web Services

With Apache Axis2”), we used TCPMon to intercept and inspect SOAP messages between a SOAP client and server. Capture the communication between

TemperatureConverterClient and Server. Attempt to resend the request and make sure

server responds properly. Add an arbitrary SOAP header block and try. Set the “role” attribute of the header so that the

message is targeted at the next SOAP node. Resend the message.

Set the “mustUnderstand” attribute to “true” and try. Carefully note if there are differences between

responses and HTTP headers in each case.