slide1 l.
Skip this Video
Loading SlideShow in 5 Seconds..
Web Services with JAX-RPC and Apache Axis PowerPoint Presentation
Download Presentation
Web Services with JAX-RPC and Apache Axis

Loading in 2 Seconds...

play fullscreen
1 / 38

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

  • Uploaded on

Pankaj Kumar ( ), Software Architect, Web Services Management Organization, Hewlett Packard Co. Sep. 18, 2002. Web Services with JAX-RPC and Apache Axis. Session Objectives. Web Services in Perspective

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
Download Presentation

Web Services with JAX-RPC and Apache Axis

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Pankaj Kumar (,

Software Architect,

Web Services Management Organization,

Hewlett Packard Co.

Sep. 18, 2002

Web Services withJAX-RPC and Apache Axis

session objectives
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.
speaker introduction
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 (
  • Frequent speaker at developer conferences
  • Authoring a book on J2EE and Web Services Security
  • Architect with HP Web Services Mgmt. Operation
  • Home Page:
outline of the session
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
web services infrastructure
Web Services Infrastructure

Language and platform independent infrastructure for loosely-coupled, inter-operable, app2app communication over the Internet.

web services contd
Web Services (Contd.)
  • Language and platform independent =>
    • separation of specification and implementation
  • Loosely coupled =>
    • message based, synchronous and asynchronous interactions.
  • Over the Internet =>
    • No centralized control, use of established protocols, security considerations.
  • Inter-operable =>
    • Standards based.
early internet technologies
Early (Internet) Technologies
    • e-mail is still the killer app
    • the protocol behind Internet’s popularity

Most of these facilitated app to human interaction

over the Internet/intranet

early intranet technologies
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.

app2app interaction the web services way
App2App Interaction -- the Web Services Way
  • Transport protocol
  • 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, ...
the web services way
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.

additional web services infrastructure components
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

soap in one slide
SOAP In One Slide

SOAP1.1 Message




  • 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.









wsdl in one slide
WSDL in One Slide

WSDL1.1 Document




  • 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



{Port Types}



java apis for web services
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)
saaj object model
















SAAJ Object Model
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
jax rpc physical architecture

WSDL description

Service Client

Service Endpoint


WSDL<->Java Mapping





Client Side JAX-RPC

Runtime System

Server Side JAX-RPC

Runtime System

Protocol (SOAP)


JAX-RPC Physical Architecture
interoperability and jax rpc

WSDL description



JAX-RPC impl.

<Vendor A>

Vendor prod.

<Vendor C>



Vendor prod.

<Vendor B>

J2EE Container

<Vendor D>

WSDL description

Interoperability and JAX-RPC
apache axis
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)
install deploy apache axis
Install & Deploy Apache Axis

Direcotry Structure:

  • 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 from
  • 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.












test the deployment
Test the Deployment
  • Point your browser to http://localhost:8080/axis
a simple example
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://localhost:8080/axis/AddFunction.jws?wsdl

// File: AddFunction.jws

public class AddFunction {

int addInt(int a, int b){




Note: All sources with instructions

to run are available at my web-site:

writing the client program
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

addfunctionclient using dii
AddFunctionClient – using DII

// File: lesson1\client\dii\, 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://localhost:8080/axis/AddFunction.jws";

Service service = new Service();

Call call = (Call) service.createCall();

call.setOperationName(new QName(endpoint, "addInt"));

call.setTargetEndpointAddress( new );

Integer ret = (Integer)call.invoke(new Object[]{new Integer(5), new Integer(6)});

System.out.println("addInt(5, 6) = " + ret);

} catch (Exception e) {

System.err.println("Execution failed. Exception: " + e);




addfunctionclient using dynamic proxy
AddFunctionClient – using Dynamic Proxy

// File: lesson1\client\dproxy\, 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://localhost:8080/axis/AddFunction.jws?wsdl";

String nameSpaceUri = "http://localhost:8080/axis/AddFunction.jws";

String serviceName = "AddFunctionService";

String portName = "AddFunction";

ServiceFactory serviceFactory = ServiceFactory.newInstance();

Service afs = serviceFactory.createService(new,

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);




addfunctionclient using generated stubs
AddFunctionClient – using Generated Stubs

Generate the stubs:

java org.apache.axis.wsdl.WSDL2Java \


// File: lesson1\client\stub\, 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("Execution failed. Exception: " + e);




deployment descriptors
Deployment Descriptors
  • JWS deployment is simple, but has limitations:
    • You must have the source code
    • Can’t 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
adding complexitiy to the simple example
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://localhost:8080/axis/services/AddFunction1Service?wsdl

// File:

public class Complex {

public Complex(){}

public double getR(){ … }

public void setR(double r){ … }

public Complex add(Complex c){ … }

// File:

public class AddFunction1 {

public Complex addComplex

(Complex a, Complex b){

return a.add(b);



the deployment descriptor
The Deployment Descriptor

// File: lesson2\service\deploy.wsdd

<deployment xmlns=""


<handler name="print" type="java:LogHandler"/>

<service name="AddFunction1Service" provider="java:RPC">


<handler type="print"/>


<parameter name="className" value="AddFunction1"/>

<parameter name="allowedMethods" value="*"/>

<beanMapping qname="myNS:Complex" xmlns:myNS="urn:BeanService"





(1) xmlns:java

(2) A handler in the request path

(3) Dispatch to RPC provider

(4) Bean type mapping

addfunction1client using generated stubs
AddFunction1Client – using Generated Stubs

Generate the stubs:

java org.apache.axis.wsdlWSDL2Java \


// File: lesson2\client\stub\, 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 AddFunction1ServiceLocator();

AddFunction1 af = afs.getAddFunction1Service();

Complex ret = af.addComplex(a, b);

System.out.println("addComplex(a + b) = ("

+ ret.getR() + ", " + ret.getI() + ")");





additional advanced features
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
where to find more information
Where to find more information?
  • Apache Axis Home:
  • Sun’s Web Services Developer Pack Home:
  • W3C’s Web Services Activity Home Page:
  • My Home Page: