COP 4991 Component Based Software Development Lecture #4 Java Web Services Onyeka Ezenwoye
Acknowledgement Tapas Banerjee Pankaj Kumar Sang Shin
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 Transport SOAP Server Side JAX-RPC Runtime System JAX-RPC API Client Side JAX-RPC Runtime System Stub Service Endpoint WSDL description WSDL Java Mapping Service Client Dispatch Container
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 SOAP engine –Apache Axis
Sending requests, getting results SOAP-awareServlet (e.g. Apache Axis) SOAP-awareServlet Any class processing the incoming requests (“business logic” Any class processing the incoming requests (“business logic” Any class processing the incoming requests (“business logic” Any class processing the incoming requests (“business logic” Any class processing the incoming requests (“business logic” Any class processing the incoming requests (“business logic” Any class processing the incoming requests (“business logic” Any class processing the incoming requests (“business logic” HTTP Server (e.g. Apache Tomcat) Servlet 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 Unzip it and look at the dir. tree. Note that Axis runs as a Servlet. Direcotry Structure: axis-1_0 docslibwebappssamples axis WEB-INF lib classes web.xml ……
Apache Axis Installation –Copy webapps\axis, paste to tomcat\webapps\ –Run Tomcat: issue bin\startup from Tomcat home. –Installation Testing 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 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
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=" xmlns:java="
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)
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 -n adderImpl –We use this tool because the service is built by ourselves (we have the Java Class) output location 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 – Apache Axis Home – XMethods –