three - tier no more: integration - ready applications with ajax and ws samisa abeysinghe...

Post on 29-Jan-2016

216 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Three - Tier No More: Integration - Ready Applications with AJAX and WS

Samisa Abeysinghe (samisa@wso2.com)

WSO2 Inc.

Who am I?

A developer Apache Axis2/C and Axis C++

Member of Apache Software Foundation

Software Architect WSO2 Inc.

Agenda

Three-tier to Two-tier

XMLHttpRequest Characteristics

Introducing SOAPHttpRequest

Consuming Web Services

WS-* Support

REST vs. SOAP

Present and the Future

Three-tier to Two-tier

Web ClientWeb Server

App Server

HTTP SOAP

Web ClientApp Server

HTTP / SOAP

Case for Dropping a Tier

Web services – SOAP over HTTP

Web browser can handle XML

Let browser talk SOAP

First Generation - XMLHttpRequest

Construct XML representing SOAP envelope

SOAP is XML<envelope>

<header>...headers...</header><body>...payload...</body>

</envelope>

Send over HTTP

Concerns

You need to build the request SOAP envelope

Need to strip SOAP in response

First Generation Example

xmlhttp = new XMLHttpRequest();

xmlhttp.open("POST", "http://api.google.com/search/beta2",true);

xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4) { alert(xmlhttp.responseText) } }

xmlhttp.setRequestHeader("Man", "POST http://api.google.com/search/beta2 HTTP/1.1")

xmlhttp.setRequestHeader("MessageType", "CALL")

xmlhttp.setRequestHeader("Content-Type", "text/xml")

First Generation Example (Contd.) xmlhttp.send("<?xml version='1.0' encoding='UTF-8'?>"+"\n\n"+

'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">'+

'<soapenv:Body>'+

'<ns1:doSpellingSuggestion xmlns:ns1="urn:GoogleSearch"'+

' soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"'+

' xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"'+

' xmlns:xsd="http://www.w3.org/1999/XMLSchema">'+

'<key xsi:type="xsd:string">TcP7PPxQFHJtaZQO2OzWIPwdu2bUjYKD</key>'+

'<phrase xsi:type="xsd:string">salvasion</phrase>'+

'</ns1:doSpellingSuggestion>'+

'</soapenv:Body>'+

'</soapenv:Envelope>')

Next Generation - SOAPHttpRequest

Let AJAX handle SOAP for you

You just worry about request payload and response payload

Inherited form XMLHttpRequest

Hence same familiar API

Benefit

SOAP envelope is handled for you

Behind the Scenes

Used Apache Axis2/C as base

Implemented a Firefox extension

Extended Firefox AJAX API

Works both on Windows and Linux

Planning on an ActiveX object to support Microsoft IE

Objectives for SOAPHttpRequest

Use an API similar to XMLHttpRequest

Shorten learning curve

Leverage the power of an existing SOAP engine

Axis2/C is written with integration in mind as a portable C library

Written to support full web services stack

Consuming Web Services Invoking Google spell checker:

// create request object

var req = new SOAPHttpRequest();

// set SOAP version to be SOAP 1.1

req.soapVer = 1.1;

// set callback to be called on response

req.onreadystatechange = listenStatus;

// set up endpoint information; syntax:open(method, uri, isAsynchronous)

req.open("POST", "http://api.google.com/search/beta2", false);

// send request with payload

req.send (reqContent);

Consuming Web Services - Payload XML payload build using DOM API

//create the root nodevar req_node = document.createElementNS ("urn:GoogleSearch", "ns1:doSpellingSuggestion" );req_node. setAttribute ("xmlns:xsd", "http://www.w3.org/2001/XMLSchema" );//create the node for keyvar key_node = document.createElement ("key");key_node. setAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "type", "xsd:string" );var key_text = document.createTextNode (key );key_node.appendChild(key_text);//create the node for phrase|var phrase_node = document.createElement ("phrase");phrase_node. setAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "type", "xsd:string" );var phrase_text = document.createTextNode (phrase);phrase_node. appendChild(phrase_text );//attach nodesreq_node. appendChild (key_node );req_node. appendChild (phrase_node );reqContent = req_node; //attach nodesreq_node. appendChild (key_node );req_node. appendChild (phrase_node );reqContent = req_node;

Consuming Web Services - Callback

Captures result// responseXML contains response domvar resultContent = req. responseXML;

// Process result content as you wishHandleResponse (resultContent);

XML in/out Model

<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header></soapenv:Header><soapenv:Body> <ns1:doSpellingSuggestion xmlns:ns1="urn:GoogleSearch" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <key xsi:type="xsd:string">wCumFQpQFHL7+coIxlNKUGtyVsgrVAnb</key> <phrase xsi:type="xsd:string">tungsston</phrase> </ns1:doSpellingSuggestion> </soapenv:Body></soapenv:Envelope>

<?xml version='1.0' encoding='UTF-8'?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:doSpellingSuggestionResponse xmlns:ns1="urn:GoogleSearch" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:string">tungsten</return> </ns1:doSpellingSuggestionResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

Request

Response

Non-Blocking

Set the third parameter of open to truereq.open("POST", "http://api.google.com/search/beta2",

true);

WS-* Support

Axis2/C designed to support WS-*

Concept of modules

WS-Addressing built in

WS-Security and WS-Reliable Messaging available as separate modules

Advantage of using Axis2/C as base

Any module available at C level freely available at AJAX level

Axis2 Architecture

WS-Addressing

SOAP Header sample<soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"> <wsa:To>http://localhost:9090/axis2/services/echo</wsa:To> <wsa:Action>http://ws.apache.org/axis2/c/samples/echoString</wsa:Action> <wsa:MessageID>cb00ebf2-39ad-1db1-36e2-001125ce1ac4</wsa:MessageID></soapenv:Header>

Need for addressing in enterprise

reply to : where to send the reply

fault to : where to send the fault

e.g. Booking flight: send bill to finance, if error let me know

WS-Addressing with AJAX

// engage addressing

req.engage ( "addressing", "version" );

// set WSA action

req.options({ wsa_action:"http://ws.apache.org/axis2/c/samples/echoString" } );

API allows you to select the version Addressing specific parameters could

be set as options

REST vs. SOAP

REST and SOAP are different religions

Both have devotees

At 30,000 feet

REST is light weight; SOAP is heavy weight

REST QoS based on transport; SOAP has array of message level QoS options

Both has use cases

You will need SOAP for some use cases

Present

You can try WSO2 Tungsten Firefox (v 1.5.0.1) extension

Open source with Apache 2.0 license

http://dist.wso2.net/products/tungsten/ajax/xpi/installation.html

Can consume Web services with XML in/out model

WS-Addressing and WS-Security UsernameToken integrated

Can use both on Linux and Windows with Firefox

Future

Full WS-Security, MTOM and WS-RM support

ActiveX object for Windows IE

WS-Policy, WS-Eventing coming up with Axis2/C

Would be available to AJAX extension

Conclusion

Full power of Web services stack available to AJAX programmer

Familiar API

Based on well designed, proved Apache Axis2 Web services architecture

Designed by industry leaders

C implementation: fast and portable design

Links

• WSO2 Tungsten XPI– http://dist.wso2.net/products/tungsten/ajax/xpi/

• Apache Axis2/C– http://ws.apache.org/axis2/c/

• This Presentation– http://people.apache.org/~samisa/

Thank you

Time for Q&A

top related