Transcript Lecture-04

COP 4991
Component Based Software
Development
Lecture #4
Java Web Services
Onyeka Ezenwoye
AGENDA
Java APIs for Web Services.
Apache Axis
Web Services deployment.
Web Services Programming APIs
APIs for RPC-based Web Services:
– JAX-RPC (Java API for XML-RPC)
– Java API for XML-based RPC (JAX-RPC) sends SOAP method
calls to remote parties over the Internet and receives the results
APIs for Message-based Web Services:
– JAXM (Java API for XML Messaging)
– Java API for XML Messaging (JAXM) sends SOAP messages over
the Internet in a standard way
APIs for publishing and discovering Web Services:
– JAXR (Java API for XML Registry)
– Java API for XML Registries (JAXR) provides a standard way to
access business registries and share information
JAXR
Java API for XML Registry
Enables Java programs to access XML
registries.
JAXR provider:
– Accesses XML registry.
JAXR client:
– A client program that accesses an XML registry
using JAXR API.
– Perform queries and update UDDI registries.
JAX-RPC
API for XML-based RPC
Sends SOAP method calls to remote parties
over the Internet and receives the results
WSDL/XML to Java Mapping
Java to WSDL/XML Mapping
JAX-RPC Physical Architecture
WSDL description
Service Client
Stub
Service Endpoint
WSDL<->Java Mapping
Container
Dispatch
JAX-RPC API
Client Side JAX-RPC
Runtime System
JAX-RPC API
Server Side JAX-RPC
Runtime System
SOAP
Transport
AGENDA
Java APIs for Web Services
Apache Axis
Web Services deployment
Apache Software Foundation
Who is Apache
– an open community of Java developers
worldwide.
Open Source
– Lots of free software (just great!)
Downside
– Lack of support
– Use at your own risk
Tools &APIs: Apache Axis
Apache SOAP: First Open Source SOAP
Implementation
Axis next generation Apache SOAP, New
Code base – lessons learned from Apache
SOAP development
Implements JAX-RPC (alternative to SUN’s
JAX-RPC)
Axis Tools
Support for WSDL
Java2WSDL
– for building WSDL from Java classes
WSDL2Java
– for building Java proxies and skeletons from
WSDL documents
Runtime Environment
Web Server
– Apache Tomcat
– Allows to access Java application provided via
an HTTP server
• http://jakarta.apache.org/tomcat/
SOAP engine
– Apache Axis
• http://ws.apache.org/axis/
HTTP Server (e.g. Apache Tomcat)
Servlet engine
Any class
Any class
Any class
processing
Any class
processing
processing
the incoming
processing
the incoming
the incoming
requests
the incoming
requests
requests
(“business
logic”
requests
(“business
logic”
(“business logic”
(“business logic”
SOAP-aware
Servlet
(e.g. Apache Axis)
Sending
requests,
getting
results
Install & Deploy Apache Axis
Direcotry Structure:
Make sure that you have
– J2SE SDK. We will use 1.4
– A Servlet Container: We will use
Tomcat 4.1
axis-1_0
webapps
lib
Download axis binaries from axis
http://xml.apache.org/axis
WEB-INF
Unzip it and look at the dir.
lib
tree. Note that Axis runs as a
classes
Servlet.
web.xml
……
docs
samples
Apache Axis
Installation
– Copy webapps\axis, paste to tomcat\webapps\
– Run Tomcat: issue bin\startup from
Tomcat home.
– Installation Testing
http://localhost:8080/axis/
Classpath
set AXIS_HOME=C:\jakarta-tomcat-4.0.6\webapps\axis
set AXIS_LIB=%AXIS_HOME%\WEB-INF\lib
set AXIS_CP=.;%AXIS_CP%;%AXIS_LIB%\axis.jar;
%AXIS_LIB%\commons-discovery.jar;
%AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar;
%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;
%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\wsdl4j.jar
set classpath=%AXIS_CP%
AGENDA
Java APIs for Web Services
Apache Axis
Web Services deployment
Test the Deployment
Point your browser to
http://localhost:8080/axis
Different web service creation
paths
From an existing application – bottom-up
– Most common. We like to expose existing back-end
systems for enterprise integration (EAI) purposes.
From WSDL, generate a completely new
application – top-down
– The wizards can create skeleton code from WSDL, we
then fill up the details
Combine independent web services to provide
new functionality.
Creating a Web Service in Java
Typical steps:
1. Create the application
2. Generate WSDL document using some Web
Service tool
3. Deploy Web Service to a Web Server
4. Generate client stubs from WSDL
5. Create client application
Then publish, discover and use web service
Develop a service
Step 1 – Write a Java Class
public class AdderImpl implements Adder
{
public int add(int x, int y) throws RemoteException
{
return x + y;
}
}
Adder.java
public interface Adder {
int add (int x, int y);
}
AdderImpl.java
public class AdderImpl implements Adder
{
public int add(int x, int y) throws RemoteException
{
return x + y;
}
}
Develop a service
Step 2 - Deploy to the SOAP engine
– Create the deployment descriptor (*.wsdd)
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name=“adderService" provider="java:RPC">
<parameter name="className" value=“AdderImpl"/>
<parameter name="allowedMethods" value=“*"/>
</service>
</deployment>
Develop a service
Step 2 - Deploy to the SOAP engine
– Copy the Java Class to the Web Server
– Start the Web Server
– Deploy
java org.apache.axis.client.AdminClient *.wsdd
Develop a service
Step 3 - Check
– Check (List all services)
http://localhost:8080/axis/servlet/AxisServlet
Consume a service
Step 1 – Get the WSDL file of the service
– Java2WSDL (usage example)
java org.apache.axis.wsdl.Java2WSDL
location
-o adder.wsdl
output
-l http://localhost:8080/axis/services/adderService
-n http://cop4991/adder
adderImpl
namespace
class name
– We use this tool because the service is built by
ourselves (we have the Java Class)
Consume a service
Step 2 – Generate the Client Stub
– WSDL2Java (usage example)
java org.apache.axis.wsdl.WSDL2Java myecho.wsdl
– 4 files will be generated
interface
• AdderImpl.java
Service
• AdderImplService.java
• AdderImplServiceLocator.java
• AdderServiceSoapBindingStub.java
Service factory
Binding stub
Consume a service
Step 3 – Write the Client Program
…
// Make a service
AdderImplService adderService = new AdderImplServiceLocator();
// Now use the service to get a stub
AdderImpl adder = adderService.getadderService();
// Make the actual call
int sum = adder.add(10,9);
…
AdderClient.java
public class AdderClient{
public static void main(String[] args){
try{
//Make a service instance
AdderImplService adderService = new AdderImplServiceLocator();
//Now use the service to get a stub
AdderImpl adder = adderService.getadderService();
//Make the actual call
int sum = adder.add(10,9);
System.out.println("the sum is: "+sum);
}catch(Exception e){e.printStackTrace();}
}
}
Static Stub Client
Our client is static
– Tightly bound to generated stub
– Can only use one service
Dynamic Clients
– Use WSIF (Web Service Invocation
Framework) instead
Resources
Apache Tomcat
– http://jakarta.apache.org/tomcat/
Apache Axis Home
– http://xml.apache.org/axis
XMethods
– http://www.xmethods.net
Acknowledgement
Tapas Banerjee
Pankaj Kumar
Sang Shin