Intro to Apache Axis - Austin Java Users Group
Download
Report
Transcript Intro to Apache Axis - Austin Java Users Group
Intro to Apache Axis
Siva Jagadeesan
[email protected]
About Me
I am a Java Consultant working in a project for
Deloitte Consulting
My fields of Expertise
– J2EE Technologies
– Java tools for Extreme Programming (Ant, JUnit etc)
My fields of Interest
– Web Services
– J2ME
– Aspect Oriented Programming
Agenda
Web Services Basics
Intro to Apache Axis
Outline
Web Services Basics
– What is Web Service?
– Web Services Architecture
– XML Messaging
XML-RPC
SOAP
– What is WSDL?
– Development plan for Service Requestor
– Development plan for Service Provider
Outline
Intro to Apache Axis
–
–
–
–
–
–
What is Apache Axis?
Architecture of Apache Axis
Features of Apache Axis
Installing Apache Axis
Publishing Web Service through Apache Axis
Walkthrough of deploying and accessing a
simple web service using Apache Axis
What is Web Service?
A Web Service is any service that
– is available over the web
– uses standardized XML messaging
– is OS and Programming language
independent
Web Services Architecture
There are two ways we can view Web Services
architecture
1. Web Service Roles
2. Web Service Protocol Stack
Web Service Roles
There are three major roles
2) Discover services
Service
Requestor
Consumer of the Web Service
Service
Registry
3) Invoke service
Logically Centralized directory
of services
1) Register service
Service
Provider
Provider of the Web Service
Web Service Protocol Stack
Discovery
UDDI
Description
WSDL
XML Messaging
XML-RPC,SOAP,XML
Transport
HTTP,SMTP,FTP,BEEP
Responsible for centralizing services
Responsible for describing the public
interface to a specific web service
Responsible for encoding messages in
common XML format
Responsible for transporting messages
XML Messaging
There are two ways of XML Messaging
• XML-RPC
• SOAP
What is XML-RPC ?
is a simple protocol that uses XML
messages to perform RPC
Request are encoded in XML and send via
HTTP
Response are encoded in XML and
received via HTTP
is a easiest way to get started with web
services
Sample XML-RPC Request
<methodCall>
<methodName>
com.agram.sayHello
</methodName>
<params>
<param>
<value>Java</value>
</param>
</params>
</methodCall>
Sample XML-RPC Response
<methodResponse>
<params>
<param>
<value>
<string>Hello Java</string>
</value>
</param>
</params>
</ methodResponse >
What is SOAP?
Simple Object Access Protocol
SOAP is slightly more complicated than
the XML-RPC
SOAP extended XML-RPC
It uses XML namespaces and XML
Schemas.
SOAP Message
SOAP Message
Envelope
Header
Body
Envelope is like a
wrapper for content
Header is a optional
element that could
contain control
information
Body element includes
requests and responses
Body element will
include a Fault element
in the event of an error
Sample SOAP Request
<SOAP-ENV:Envelope
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ns1:sayHello
xmlns:ns1="http://agram.com/">
<name xsi:type="xsd:string">Java</name>
</ns1:sayHello>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Sample SOAP Response
<SOAP-ENV:Envelope
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ns1:sayHelloReponse
xmlns:ns1="http://agram.com/">
<result xsi:type="xsd:string">Hello Java</result>
</ns1:sayHelloResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
What is WSDL?
Web Services Description Language
Has 6 major elements
1. definitions – defines the name of the web service
2. types – describes all the data types that will be
transmitted
3. message – defines the name of the message that will
be transmitted
4. portType – defines the operations
5. binding – defines how the message will be
transmitted
6. service – defines where the service is located
Development plan for Service Requestor
1) Find web service via UDDI
2) Retrieve service description file
3) Create XML-RPC or SOAP client
4) Invoke remote service
Development plan for Service Provider
1) Create the core functionality
2) Create XML-RPC or SOAP service wrapper
3) Create service description file
4) Deploy service
5) Register new service via UDDI
What is Apache Axis?
“Axis is essentially a SOAP engine – a
framework for constructing SOAP
processors such as clients , servers,
gateways etc”
- Axis Website
Architecture of Apache Axis
Architecture of Apache Axis
1.
2.
3.
4.
5.
6.
Admin Sub-system
handles administration and configuration of the server
Service Sub-system
implements the RPC exchange protocol
Provider Sub-system
is the interface between Axis server and the external component
methods that are to be exposed as webservice
Transport Sub-system
receives and delivers the message from the service sub system
Encoding Sub-system
manages encoding/decoding and serilization/deserilization
between XML data types and Java Classes
Message Sub-system
defines the structure of the different elements of a SOAP message
and provides functionality for binding and parsing the different
elements of these messages
Features of Apache Axis
Successor to Apache SOAP
It can run as a standalone server or as an a server
that plugs into Servlet engine like Tomcat
Automatic WSDL generation for deployed
services
Java2WSDL – to generate WSDL from Java
interface
WSDL2Java – to generate Java classes from
WSDL
Easy deployment
Uses JAX-RPC API
Installing Apache Axis
1) Download Axis Distribution archive from
http://xml.apache.org/axis/
- Axis distribution archive contains a
web application ( webapps/axis/ directory)
for hosting an Axis Server in a web
container like Tomcat
Installing Apache Axis (Cont)
2) Deploy Axis Server in the Tomcat 4.X
server
a) Copy Axis Web application (webapps/axis
directory) to $TOMCAT_HOME/webapps
b) Copy jaxrpc.jar (that is provided with Axis
distribution) and xerces.jar ( or any other XML
parser) to $TOMCAT_HOME/common/lib
jaxrpc.jar and xerces.jar includes classes with “java” and
“javax” packages and Tomcat does not authorize to load any classes
in that package from WEB-INF/ lib directory of the web application.
Installing Apache Axis (Cont)
3) Configure the environment by including
these libraries in the CLASSPATH
- log4j-core.jar
- commons-logging.jar
- wsdl4j.jar
- jaxrpc.jar
- tt.bytecode.jar
- xerces.jar ( or any other XML Parser)
Validating the Installation
1)
2)
Start the Tomcat Web Server
Goto http://localhost:8080/axis/
- you should be able to see Apache-Axis start page
- if you did not , then the axis is not correctly
installed or the web server is not running
3)
Goto http://localhost:8080/axis/happyaxis.jsp
- this test page verifies whether all the needed and
optional libraries are present.
- Axis will not perform properly until all the
needed libraries are present.
Publishing Web Service through Apache
Axis
The two ways we can publish a web service
with Axis are,
1. Instant Deployment – Java Web Service (JWS)
2. Custom Deployment – Using Web Service
Deployment Descriptor ( WSDD)
Walkthrough of deploying and accessing a
simple web service using Apache Axis
The steps we will walkthrough
1.
Code – code a simple HelloWorld java class that we
want to expose as web service
2.
Java2WSDL – Generate the WSDL file for the given
HelloWorld Interface
3.
WSDL2Java – Generate the Server side wrapper class
and stubs for easy client access
4.
Deploy – deploy the service to apache axis
5.
Client – code a simple client that access our
HelloWorld Web Service
Step 1: Code
HelloWorld.java
package helloworld;
public interface HelloWorld {
public String sayHello( String name);
}
Step 1: Code (Cont)
HelloWorldImpl.java
package helloworld;
public class HelloWorldImpl implements HelloWorld {
public String sayHello( String name){
if(name == null)
return “Hello Everyone”;
else
return “Hello “ + name;
}
}
Step 2: Java2WSDL
This command will generate the WSDL that
Conforms to our interface
% java org.apache.axis.wsdl.Java2WSDL
-o hello.wsdl
-l http://localhost:8080/axis/services/helloworld
-n urn:helloworld
-p“helloworld" urn:helloworld
helloworld.HelloWorld
Parameters description
-o = Name of the output
-l = URL of the web Service
-n = Target Namespace for the WSDL
-p = Map Java package to namespace
Fully Qualified Class Name
Step 3: WSDL2Java
This command will generate the wrapper code for
deploying the service, as well as client stubs for
accessing it.
% java org.apache.axis.wsdl.WSDL2Java
-o .
-d Session
-s
-p helloworld.gen
hello.wsdl
Parameters description
-o = Base output Directory
-d = Scope of deployment
-s = To generate Server-side code too
-p = Package to place the code
Name of the WSDL
Step 3: WSDL2Java
These are the codes that will get generated
1.
HelloWorldSoapBindingImpl.java – This is the implementation code for the Web
Service
2.
HelloWorld.java – This is the remote interface
3.
HelloWorldService.java – This is the service interface
4.
HelloWorldServiceLocator.java – Helper class to retrieve handler to service
5.
HelloWorldSoapBindingSkeleton.java – Server-side skeleton code
6.
HelloWorldSoapBindingStub.java – Client side stub
7.
deploy.wsdd – axis deployment descriptor
8.
undeploy.wsdd – deployment descriptor to undeploy the web services from the
Axis System
Step 3: WSDL2Java
HelloWorldSoapBindingImpl
package helloworld.gen;
import helloworld.HelloWorldImpl;
public class HelloWorldSoapBindingImpl implements
helloworld.gen.HelloWorld
{
HelloWorldImpl helloWorld = new HelloWorldImpl();
public String sayHello(String str0) throws
java.rmi.RemoteException {
return helloWorld.sayHello(str0);
}
}
Step 4: Deploy
1.
Compile the Service Code
% javac helloworld\gen\*.java
2.
Package the code for Axis
% jar cvf hello.jar helloworld/*.class
helloworld/gen/*.class
% mv hello.jar $TOMCAT_HOME/webapps/axis/WEBINF/lib
3.
Deploy the Service using WSDD
% java org.apache.axis.client.AdminClient deploy.wsdd
<admin> Done processing </Done>
Step 5: Client
package helloworld;
Import helloworld.gen.*;
public class HelloWorldTester {
public static void main(String [] args)
throws Exception
{
// Make a service
HelloWorldService service = new
HelloWorldServiceLocator();
// Now use the service to get a stub to the service
helloworld.gen.HelloWorld hello = service.getHelloWorld();
}
}
// Make the actual call
System.out.println( hello.sayHello(“Java Gurus”) );
Summary
Web Service
–
–
–
–
Roles in Web Services
Web Services Protocol Stack
Different ways of XML Messaging
Development plan for Service Requestor and Provider
Axis
–
–
–
–
–
Architecture of Axis
Features of Apache Axis
Installing Apache Axis
Different ways of deploying Web Service with Axis
Deploying and accessing a simple web service using
Apache Axis
Resources
JAX-RPC home http://java.sun.com/xml/jaxrpc/index.html
Web Services & Java home http://java.sun.com/j2ee/webservices/index.html
Java Web Services tutorial http://java.sun.com/xml/docs.html#tutorials
Apache Axis http://xml.apache.org/axis/index.html
SOAP 1.1 - http://www.w3.org/TR/SOAP
WSDL 1.1 - http://www.w3.org/TR/wsdl
Questions/Feedbacks?
Contact me at
[email protected]