Web Services with JAX-RPC and Apache Axis - PowerPoint PPT Presentation

About This Presentation
Title:

Web Services with JAX-RPC and Apache Axis

Description:

A presentation for Web Developers conference on Sep. 18, 2002. ... JAX-RPC and Apache Axis Sep. 18, 2002 Pankaj Kumar (pankaj_kumar_at_hp.com), Software Architect, – PowerPoint PPT presentation

Number of Views:145
Avg rating:3.0/5.0
Slides: 39
Provided by: Pankaj8
Category:
Tags: jax | rpc | apache | axis | proxy | server | services | web

less

Transcript and Presenter's Notes

Title: Web Services with JAX-RPC and Apache Axis


1
Web Services withJAX-RPC and Apache Axis
Sep. 18, 2002
  • Pankaj Kumar (pankaj_kumar_at_hp.com),
  • Software Architect,
  • Web Services Management Organization,
  • Hewlett Packard Co.

2
Session Objectives
  • Web Services in Perspective
  • Learn about Web Services, wire-level
    interoperability standards and portable Java
    APIs.
  • Get to know JAX-RPC and Apache Axis to consume
    and produce Web Services.

3
Speaker Introduction
  • More than 12 years of development and project
    management experience
  • Worked on Web Services product development at HP
  • Expert Group Member of JAX-RPC and JSR109
  • Contributor to Apache Axis and Cocoon projects
  • Author of open source project XPB4J
    (http//xpb4j.sf.net)
  • Frequent speaker at developer conferences
  • Authoring a book on J2EE and Web Services
    Security
  • Architect with HP Web Services Mgmt. Operation
  • Home Page http//www.pankaj-k.net

4
Outline of the Session
  • Introduction to Web Services
  • Web Services Standards
  • Java support for Web Services
  • Apache Axis
  • Installing Apache Axis
  • Invoking a service
  • Deploying a service
  • Handlers
  • Serializers and Deserializers
  • Where to find more information

5
Web Services Infrastructure
  • Language and platform independent infrastructure
    for loosely-coupled, inter-operable, app2app
    communication over the Internet.

6
Web Services (Contd.)
Language and platform independent gt separation
of specification and implementation Loosely
coupled gt message based, synchronous and
asynchronous interactions. Over the Internet
gt No centralized control, use of established
protocols, security considerations. Inter-operable
gt Standards based.
7
Early (Internet) Technologies
  • SMTP/MIME
  • e-mail is still the killer app
  • FTP, NNTP
  • HTTP/HTTPS, HTML
  • the protocol behind Internets popularity

Most of these facilitated app to human
interaction over the Internet/intranet
8
Early (intranet) Technologies
  • DCE from OSF -- RPC based, procedural
  • ORB -- object oriented, mostly synchronous
  • CORBA, COM/DCOM from Microsoft, Java RMI/EJBs
  • MOM -- message oriented, synchronous as well as
    asynchronous
  • JMS ( Java API standard )
  • Many proprietary implementations

Most of these facilitated app2app interaction
within a trusted intranet and without much
consideration to interoperability across
different implementations.
9
App2App Interaction -- the Web Services Way
  • Transport protocol
  • HTTP/HTTPS
  • Data Encoding
  • SOAP (Simple Object Access Protocol), XML Schema
  • Interface Description
  • WSDL (Web Services Description Language)
  • Service Description and Discovery
  • UDDI (Universal Description, Discovery and
    Integration)
  • Security
  • WS-Security, XML-Signature, XML-Encryption, ...

10
The Web Services Way
  • Web Services standards (SOAP, WSDL, ) based
    on widely accepted Internet friendly technologies
    (HTTP/HTTPS, XML, ), are mostly orthogonal to
    each other and enjoy broad support from vendors

Web Services Network accessible programs,
expose functionality by receiving/sending SOAP
messages over HTTP/HTTPS, and describe this
interface as WSDL descriptions.
11
Additional Web Services Infrastructure Components
  • Key Management (Security)
  • XKMS
  • Web Services Management
  • OMI (Open Management Interface)
  • ...

Interesting thing to note is that these are Web
Services in themselves
12
SOAP In One Slide
SOAP1.1 Message Structure
  • XML based protocol for exchange of information
  • Encoding rules for datatype instances
  • Convention for representing RPC invocations
  • Designed for loosely-coupled distributed
    computing
  • No remote references
  • Used with XML Schema
  • Transport independent
  • SOAP with Attachments allow arbitrary data to be
    packaged.

SOAP Envelope
Header Entries
Header Element
Body Element
Fault Element
13
WSDL in One Slide
WSDL1.1 Document Structure
  • A WSDL document describes
  • What the service can do
  • Where it resides
  • How to invoke it
  • WSDL are like IDL but lot more flexible and
    extensible
  • Defines binding for SOAP1.1, HTTP GET/POST and
    MIME
  • WSDL descriptions can be made available from an
    UDDI registry

WSDL Document
Types
Messages
Port Types
Bindings
Services
14
Java APIs for Web Services
  • SOAP messages as Java objects
  • SAAJ ( SOAP with Attachments API for Java)
  • Programming Model
  • JAX-RPC ( JSR101), JSR109, EJB2.1
  • Accessing WSDL descriptions
  • JWSDL (JSR110)
  • Accessing Web Services Registries
  • JAXR (Java API for XML Registries)

15
SAAJ Object Model
16
JAX-RPC
  • WSDL/XML to Java Mapping
  • Java to WSDL/XML Mapping
  • SOAP Message with Attachments
  • Client API
  • Classes generated from WSDL
  • Dynamic Proxy
  • DII call Interface
  • SOAP Message Handler
  • Extensible Type Mapping

17
JAX-RPC Physical Architecture
18
Interoperability and JAX-RPC
19
Apache Axis
  • A SOAP Processing Engine
  • JAX-RPC Client System
  • JAX-RPC Server System ( Servlet based )
  • SAAJ implementation
  • Flexible and extensible architecture
  • Tools, Examples, Documentation,
  • A great place to learn about Web Services !!
  • Open-source, hosted by Apache Software Foundation
  • Ready for use ( RC1 released on Sep. 6)

20
Install Deploy Apache Axis
  • Make sure that you have
  • J2SE SDK 1.3 or 1.4 We will use 1.4
  • A Servlet Container We will use Tomcat4.0.1
  • Download xml-axis-rc1-bin.zip from
    http//xml.apache.org/axis
  • Unzip it and look at the dir. tree. Note that
    Axis runs as a Servlet.
  • Deploy Axis.
  • Copy webapps\axis tree to webapps directory of
    Tomcat.
  • Alternatively, modify server.xml of Tomcat.
  • Run Tomcat issue bin\startup from Tomcat home.

Direcotry Structure
axis-1_0
docs
lib
webapps
samples
axis
WEB-INF
lib
classes
web.xml

21
Test the Deployment
  • Point your browser to http//localhost8080/axis

22
A Simple Example
  • AddFunction A simple Java class with method to
    add two integers. Notice the filename extension
    it is .jws ( for Java Web Service).
  • Deploy it. Just copy the AddFunction.jws file to
    webapps/axis directory.
  • Examine its WSDL description. Point your browser
    to http//localhost8080/axis/AddFunction.jws?wsdl

// File AddFunction.jws public class AddFunction
int addInt(int a, int b) return(ab)

Note All sources with instructions to run are
available at my web-site http//www.pankaj-k.net

23
Writing the Client Program
  • There are many ways to write a Client program
  • Using Dynamic Invocation Interface ( DII)
  • Using generated Stubs from Service WSDL
    description
  • Using Dynamic Proxy
  • We will look at each of these

Writing the client requires more work than
writing the service
24
AddFunctionClient using DII
// File lesson1\client\dii\AddFunctionClient.java
, edited for presentation import
javax.xml.rpc.Call import javax.xml.rpc.Service
import javax.xml.namespace.QName public class
AddFunctionClient public static void
main(String args) try String
endpoint "http//localhost8080/axis/AddFunction
.jws" Service service new Service()
Call call (Call) service.createCall()
call.setOperationName(new QName(endpoint,
"addInt")) call.setTargetEndpointAddress(
new java.net.URL(endpoint) ) Integer ret
(Integer)call.invoke(new Objectnew Integer(5),
new Integer(6)) System.out.println("addInt
(5, 6) " ret) catch (Exception e)
System.err.println("Execution failed.
Exception " e)
25
Compiling and Running the DII Client
26
AddFunctionClient using Dynamic Proxy
// File lesson1\client\dproxy\AddFunctionClient.j
ava, edited for presentation import
javax.xml.namespace.QName import
javax.xml.rpc. public class AddFunctionClient
public static void main(String args)
try String wsdlUrl "http//localhost808
0/axis/AddFunction.jws?wsdl" String
nameSpaceUri "http//localhost8080/axis/AddFunc
tion.jws" String serviceName
"AddFunctionService" String portName
"AddFunction" ServiceFactory
serviceFactory ServiceFactory.newInstance()
Service afs serviceFactory.createService(new
java.net.URL(wsdlUrl), new
QName(nameSpaceUri, serviceName))
AddFunctionServiceIntf afsIntf
(AddFunctionServiceIntf)afs.getPort(
new QName(nameSpaceUri, portName),
AddFunctionServiceIntf.class)
System.out.println("addInt(5, 3) "
afsIntf.addInt(5, 3)) catch (Exception
e) System.err.println("Execution
failed. Exception " e)
27
Compiling and Running theDynamic Proxy Client
28
AddFunctionClient using Generated Stubs
Generate the stubs java org.apache.axis.wsdl.WSDL
2Java \ http//localhost8080/axis/AddFunction.j
ws?wsdl
// File lesson1\client\stub\AddFunctionClient.jav
a, edited for presentation Import
localhost. public class AddFunctionClient
public static void main(String args) try
AddFunctionService afs new
AddFunctionServiceLocator() AddFunction af
afs.getAddFunction() System.out.println("
addInt(5, 3) " af.addInt(5, 3)) catch
(Exception e) System.err.println("Executio
n failed. Exception " e)
29
Generating Stubs, Compiling and Running the Stub
Client
30
Deployment Descriptors
  • JWS deployment is simple, but has limitations
  • You must have the source code
  • Cant specify custom type mappings, handlers etc.
  • WSDD (Web Services Deployment Descriptors) allow
    more flexible deployments
  • Handlers in request or response path
  • Custom type mappings
  • Different transports HTTP/S, TCP/IP, DIME
  • Different Dispatchers Java Class, EJB, Servlet

31
Adding complexitiy to the Simple Example
  • AddFunction1 A simple Java class with method to
    add two Complex numbers. Complex is user defined
    Java class.
  • Deploy it.
  • Compile sources
  • Copy .class files.
  • Write deployment descriptor
  • Run AdminClient.
  • Examine its WSDL description. Point your browser
    to http//localhost8080/axis/services/AddFunction
    1Service?wsdl

// File Complex.java public class Complex
public Complex() public double getR()
public void setR(double r) public
Complex add(Complex c)
// File AddFunction1.java public class
AddFunction1 public Complex addComplex
(Complex a, Complex b) return a.add(b)
32
The Deployment Descriptor
// File lesson2\service\deploy.wsdd ltdeployment
xmlns"http//xml.apache.org/axis/wsdd/"
xmlnsjava"http//xml.apache.org/axis/wsdd/pro
viders/java"gt lthandler name"print"
type"javaLogHandler"/gt ltservice
name"AddFunction1Service" provider"javaRPC"gt
ltrequestFlowgt lthandler type"print"/gt
lt/requestFlowgt ltparameter name"className"
value"AddFunction1"/gt ltparameter
name"allowedMethods" value""/gt ltbeanMapping
qname"myNSComplex" xmlnsmyNS"urnBeanService"
languageSpecificType"javaComplex"
/gt lt/servicegt lt/deploymentgt
Note (1) xmlnsjava (2) A handler in the
request path (3) Dispatch to RPC provider (4)
Bean type mapping
33
Deploying the Service
34
AddFunction1Client using Generated Stubs
Generate the stubs java org.apache.axis.wsdlWSDL2
Java \ http//localhost8080/axis/services/AddFu
nction1Service?wsdl
// File lesson2\client\stub\AddFunction1Client.ja
va, edited import localhost. import
BeanService. public class AddFunction1Client
public static void main(String args) throws
Exception Complex a new Complex()
Complex b new Complex() a.setR(10.0)
a.setI(5.0) b.setR(3.0) b.setI(2.0)
AddFunction1Service afs new AddFunction1ServiceL
ocator() AddFunction1 af
afs.getAddFunction1Service() Complex ret
af.addComplex(a, b) System.out.println("addCo
mplex(a b) (" ret.getR() ",
" ret.getI() ")")
Generated class
35
Running the Client
36
Additional (Advanced!) Features
  • SOAP with Attachments
  • Custom type mappings (Pluggable Serializers)
  • One-way invocations
  • Document exchange
  • Dispatch to EJBs
  • HTTPS transport and mutual authentication
  • Username and password based authentication

37
Where to find more information?
  • Apache Axis Home http//xml.apache.org/axis
  • Suns Web Services Developer Pack Home
    http//java.sun.com/webservices/webservicespack.ht
    ml
  • W3Cs Web Services Activity Home Page
    http//www.w3.org/2002/ws/
  • My Home Page http//www.pankaj-k.net

38
Thank You
Write a Comment
User Comments (0)
About PowerShow.com