Upload
crystal-easter-owens
View
221
Download
1
Embed Size (px)
Citation preview
COP 4991Component Based Software
Development
Lecture #4Java Web Services
Onyeka Ezenwoye
Acknowledgement
Tapas Banerjee
Pankaj Kumar
Sang Shin
AGENDA
Java APIs for Web Services.Apache AxisWeb 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 RegistryEnables 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
Transport
SOAP
Server Side JAX-RPCRuntime System
JAX-RPC API JAX-RPC APIClient Side JAX-RPC
Runtime System
Stub
Service Endpoint
WSDL description
WSDL<->Java Mapping
Service Client
Dispatch
Container
AGENDA
Java APIs for Web ServicesApache AxisWeb 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/
Sending requests,
getting results
Sending requests,
getting results
SOAP-awareSOAP-awareServletServlet
(e.g. Apache Axis)(e.g. Apache Axis)
SOAP-awareSOAP-awareServletServlet
(e.g. Apache Axis)(e.g. Apache Axis)
Any classprocessing
the incomingrequests
(“business logic”
Any classprocessing
the incomingrequests
(“business logic”
Any classprocessing
the incomingrequests
(“business logic”
Any classprocessing
the incomingrequests
(“business logic”
Any classprocessing
the incomingrequests
(“business logic”
Any classprocessing
the incomingrequests
(“business logic”
Any classAny classprocessingprocessing
the incomingthe incomingrequestsrequests
(“business logic”(“business logic”
Any classAny classprocessingprocessing
the incomingthe incomingrequestsrequests
(“business logic”(“business logic”
HTTP Server HTTP Server (e.g. Apache Tomcat)(e.g. Apache Tomcat)
Servlet engineServlet engine
Install & Deploy Apache Axis
Make sure that you have– J2SE SDK. We will use 1.4– A Servlet Container: We will use
Tomcat 4.1
Download axis binaries from http://xml.apache.org/axisUnzip it and look at the dir. tree. Note that Axis runs as a Servlet.
Direcotry Structure:
axis-1_0
docslibwebapps samples
axis
WEB-INF
lib
classes
web.xml
……
Apache AxisInstallation– Copy webapps\axis, paste to tomcat\webapps\– Run Tomcat: issue bin\startup from
Tomcat home.– Installation Testing http://localhost:8080/axis/
Classpathset AXIS_HOME=C:\jakarta-tomcat-4.0.6\webapps\axisset AXIS_LIB=%AXIS_HOME%\WEB-INF\libset 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.jarset classpath=%AXIS_CP%
AGENDA
Java APIs for Web ServicesApache AxisWeb 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;
}
}
public interface Adder {int add (int x, int y);
}
public class AdderImpl implements Adder
{
public int add(int x, int y) throws RemoteException
{
return x + y;
}
}
Adder.java
AdderImpl.java
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
– Deployjava 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
-o adder.wsdl
-l http://localhost:8080/axis/services/adderService
-n http://cop4991/adder
adderImpl
– We use this tool because the service is built by ourselves (we have the Java Class)
outputlocation
namespace
class name
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• AdderImpl.java
• AdderImplService.java
• AdderImplServiceLocator.java
• AdderServiceSoapBindingStub.java
interface
Service factory
Service
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); …
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();}
}
}
AdderClient.java
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