Three - Tier No More: Integration - Ready Applications with AJAX and WS Samisa Abeysinghe ([email protected]) WSO2 Inc.

Download Report

Transcript Three - Tier No More: Integration - Ready Applications with AJAX and WS Samisa Abeysinghe ([email protected]) WSO2 Inc.

Three - Tier No More: Integration - Ready
Applications with AJAX and WS
Samisa Abeysinghe ([email protected])
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
Server
Web Client
HTTP
App
Server
SOAP
App
Server
Web Client
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 node
var req_node = document.createElementNS ("urn:GoogleSearch", "ns1:doSpellingSuggestion" );
req_node. setAttribute ("xmlns:xsd", "http://www.w3.org/2001/XMLSchema" );
//create the node for key
var 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 nodes
req_node. appendChild (key_node );
req_node. appendChild (phrase_node );
reqContent = req_node;
//attach nodes
req_node. appendChild (key_node );
req_node. appendChild (phrase_node );
reqContent = req_node;
Consuming Web Services - Callback

Captures result
// responseXML contains response dom
var resultContent = req. responseXML;
// Process result content as you wish
HandleResponse (resultContent);
XML in/out Model
Request
<?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>
Response
<?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" SOAPENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<return xsi:type="xsd:string">tungsten</return>
</ns1:doSpellingSuggestionResponse>
</SOAP-ENV:Body>
Non-Blocking

Set the third parameter of open to true
req.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:Acti
on>
<wsa:MessageID>cb00ebf2-39ad-1db1-36e2001125ce1ac4</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.h
tml
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