{scrollbar}

This tutorial will take you through the steps required in developing, deploying and testing a Web Service Client in Apache Geronimo for a web services which are already deployed on the server

This tutorial will take you through the steps involved in creating a Web based Client and a POJO Client for a JAX-WS web service. Here we will only be needing the WSDL file of the web service deployed for creating the client.

Types of Web Services

For new users, Web Services can be created in two ways:

This tutorial will help you in creating a Top Down Web Service from WSDL document which is already deployed on server.

To run this tutorial, as a minimum you will be required to have installed the following prerequisite software.

Details on installing eclipse are provided in the Development environment section.

Deployed Web Service

This tutorial assumes that you have completed the Developing a JAX-WS POJO Web Service tutorial. Here we will try to develop the client for the web service deployed in the above mentioned tutorial.

This tutorial will take you through the following steps:

2listpipe

Web based Client

The following steps will help you in creating a Web based Client for a JAX-WS Web Service which is already deployed on the server.

Create a Dynamic Web Project to consume the Web Service

Creating necessary stubs to consume Web Service

We need to create Service Endpoint Interface based on the WSDL document to use it in out JSP's. Luckily in Geronimo this can be automated using the jaxws-tools utility provided by Geronimo.

jaxws-tools.bat

Please take care that jaxws-tools.bat utility in server's bin directory may not work in old versions of Apache Geronimo.
Try using the latest version of Geronimo i.e v2.1.1 .

Client Stubs Generationsolid <%SERVEER_INSTALLATION_BIN_DIR%>:\ jaxws-tools.bat wsimport -s C:\WSDL http://localhost:8080/jaxws-conveter/converter?wsdl

Let us walk through the steps that we just completed

Developing the Web based Client

index.jspsolid <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <html> <head> <title>Converter</title> <meta content="text/html; CHARSET=iso-8859-1" http-equiv="Content-Type"> </head> <body> <center> <h3>This from invokes a Web Service.</h3> <br> Please type an amount and click submit to see the result. <form action="index.jsp">Amount(in Dollars): <input type="text" name="amount"> <input type="submit" value="Submit"></form> <br><br> <jsp:include page="result.jsp"></jsp:include> </center> </body> </html> result.jspsolid <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@page import="java.math.BigDecimal"%> <%@ page import="org.apache.geronimo.samples.jaxws.Converter"%> <%@ page import="org.apache.geronimo.samples.jaxws.ConverterPortType"%> <html> <head> <title>Converter</title> <meta content="text/html; CHARSET=iso-8859-1" http-equiv="Content-Type"> </head> <body> <% String amount = request.getParameter("amount"); if (amount != null && amount.trim().length() > 0) { out.println("<center>"); try { BigDecimal dollars = new BigDecimal(amount); Converter conv = new Converter(); ConverterPortType port = conv.getConverterPort(); BigDecimal rupees = conv.dollarToRupees(dollars); BigDecimal euros = conv.rupeesToEuro(rupees); out.println(dollars + " Dollars equals to " + rupees + " Rupees"); out.println("<br>"); out.println(rupees + " Rupees equals to " + euros + " Euros"); } catch (Exception e) { out.println("Error: " + e.getMessage()); } out.println("<center>"); } %> </body> </html>

This concludes the development section of our web based client.

Using <service-ref> element to consume Web Service:

Modified web.xmlsolid <service-ref> <service-ref-name>services/Converter</service-ref-name> <service-interface> org.apache.geronimo.samples.jaxws.Converter </service-interface> <wsdl-file> http://localhost:8080/jaxws-converter/converter?wsdl </wsdl-file> </service-ref> Modified result.jspsolid ........ Context ctx= new InitialContext(); Object obj = ctx.lookup("java:comp/env/services/Converter"); Converter service= (Converter) obj; ConverterPortType port = service.getConverterPort(); BigDecimal rupees =port.dollarToRupees(dollars); ........

Deploying and Testing the Web Client

Deploy

Testing

Converter

Note that we accessed the webservice in the jsp by creating a service, and then retrieving the Converter port from the WSDL document.

POJO Client

Here we will have a look on how to create a plain old java client for consuming the web service.

Developing the Client

ConverterClient.javasolid package org.apache.geronimo.samples.jaxws; import java.io.BufferedReader; import java.io.InputStreamReader; import java.math.BigDecimal; public class ConverterClient { public static void main(String args[]) { try { BufferedReader dataIn = new BufferedReader(new InputStreamReader( System.in)); System.out.println("enter a amount to convert:"); String number = new String(); number = dataIn.readLine(); BigDecimal amount = new BigDecimal(number); Converter conv = new Converter(); ConverterPortType port = conv.getConverterPort(); BigDecimal result = port.dollarToRupees(amount); System.out.println(amount + " dollars equals to " + result + " rupees"); BigDecimal result1 = port.rupeesToEuro(result); System.out.println(result + " rupees equals to " + result1 + " euros"); } catch (Exception e) { e.printStackTrace(); } } }

This completes the development section of our POJO client

Adding necessary jar files to the class path

Errors in Java Project

Now our Java project might show many errors and even if we resolve the errors the application may not run properly. This is due to the missing jar files required to access and understand SOAP messages sent by web service.

#ccc#FFFFCE#F7D6C1External JARS Required(Axis2)solid

axis2-adb-1.3.jar - <GERONIMO_INSTALL_DIR>/repository/org/apache/axis2/axis2-adb/1.3/axis2-adb-1.3.jar
axis2-java2wsdl-1.3.jar - <GERONIMO_INSTALL_DIR>\repository\org\apache\axis2\axis2-java2wsdl\1.3\axis2-java2wsdl-1.3.jar
axis2-jaxws-1.3.jar - <GERONIMO_INSTALL_DIR>\repository\org\apache\axis2\axis2-jaxws\1.3\axis2-jaxws-1.3.jar
axis2-kernel-1.3.jar - <GERONIMO_INSTALL_DIR>\repository\org\apache\axis2\axis2-kernel\1.3\axis2-kernel-1.3.jar
axis2-metadata-1.3.jar - <GERONIMO_INSTALL_DIR>\repository\org\apache\axis2\axis2-metadata\1.3\axis2-metadata-1.3.jar
axis2-saaj-1.3.jar - <GERONIMO_INSTALL_DIR>\repository\org\apache\axis2\axis2-saaj\1.3\axis2-saaj-1.3.jar
axiom-api-1.2.5.jar - <GERONIMO_INSTALL_DIR>\repository\org\apache\ws\commons\axiom\axiom-api\1.2.5\axiom-api-1.2.5.jar
axiom-dom-1.2.5.jar - <GERONIMO_INSTALL_DIR>\repository\org\apache\ws\commons\axiom\axiom-dom\1.2.5\axiom-dom-1.2.5.jar
axiom-impl-1.2.5.jar - <GERONIMO_INSTALL_DIR>\repository\org\apache\ws\commons\axiom\axiom-impl\1.2.5\axiom-impl-1.2.5.jar
XmlSchema-1.3.1.jar - <GERONIMO_INSTALL_DIR>\repository\org\apache\ws\commons\schema\XmlSchema\1.3.1\XmlSchema-1.3.1.jar
neethi-2.0.jar - <GERONIMO_INSTALL_DIR>\repository\org\apache\neethi\neethi\2.0\neethi-2.0.jar
wsdl4j-1.6.1.jar - <GERONIMO_INSTALL_DIR>\repository\wsdl4j\wsdl4j\1.6.1\wsdl4j-1.6.1.jar
xml-resolver-1.1.jar - <GERONIMO_INSTALL_DIR>\repository\xml-resolver\xml-resolver\1.1\xml-resolver-1.1.jar
xml-beans-2.3.0.jar - <GERONIMO_INSTALL_DIR>\repository\org\apache\xmlbeans\xmlbeans\2.3.0\xmlbeans-2.3.0.jar
commons-codec-1.3.jar - <GERONIMO_INSTALL_DIR>\repository\commons-codec\commons-codec\1.3\commons-codec-1.3.jar
commons-httpclient-3.0.1.jar - <GERONIMO_INSTALL_DIR>\repository\commons-httpclient\commons-httpclient\3.0.1\commons-httpclient-3.0.1.jar
wstx-asl-3.2.1.jar - <GERONIMO_INSTALL_DIR>\repository\woodstox\wstx-asl\3.2.1\wstx-asl-3.2.1.jar

Also add Server Runtime Library to class path which reduces the effort for adding some more jars.

Note that these jars are used when JAX-WS Engine is configured as Axis2. If JAX-WS engine is configured as CXF the jars may differ slightly.

This completes the adding external JARs to the project

JRE 6

If you are running Java 6 you don't need to worry about the external JARs as they are all inbuilt into JRE 6. But you should copy all the files generated by wsimport command into appropriate packages as Runtime Modeller in Java 6 is slightly different.

Testing

  1. Now Right click the ConverterClient.class and select Run As->Run as Java Application

  2. Now enter the amount in the console window of Eclipse

  3. The output will be shown which is retrieved by accessing the methods of Web service.



This completes the development and deployment of clients for consuming a Web Service. Even though this tutorial demonstrated for one particular Web Service, the method can be extended for any deployed web service.