...
This tutorial will walk you through building and developing the JAX-WS calculator that ships with the samples package for Geronimo. After completing this tutorial, you should be able to understand how to build simple Web services with Apache Geronimo
using the Eclipse development environment.
...
- Sun JDK 6.0+ (J2SE 1.6)
- Eclipse IDE for Java EE Developers, which is platform specific
- Apache Geronimo Eclipse Plugin 2.2.x
- Apache Geronimo Server 2.2.x
Note Geronimo version 2.2, Java 1.6 runtime, and Eclipse Ganymede are used is used in this tutorial but other versions can be used instead (for example, Geronimo version 2.1, Java 1.5, Eclipse Europa)
Details on installing eclipse are provided in the Development environment section. This tutorial is organized in the following sections:
...
...
Setting Eclipse for application development
...
- Select File -> New, select Other....
- In the popup window select Web -> Dynamic Web Project category and click Next.
- Type in jaxws-calculator as the Project name and select Next.
- Make sure Generate Deployment Descriptor is selected and click Next.
- Modify the Group Id to: org.apache.geronimo.samples.jws and Artifact Id to: Calculator.
titleInfo
Useful Information- Group ID: A name that identifies the group of a module. The default value is default.
- Artifact ID: A name of the module in a group. The default value is <blank>.
- Version: The version of module. The default value is 1.0
- Type: The type of module, such as system module (car), jar module (jar), web archive (war), enterprise archive (ear), and so on. The default value is car. A module is stored inside a repository as repository/groupId/artifactId/version/artifactIdversion.
type. This repository structure gives a more standardized and easily maintainable
structure to Geronimo applications.
Axis2 configuration
- Select Window -> Preferences.
- Select Web Services -> Axis2 Preferences.
- Under Axis2 Runtime tab, browse to the installation root of the Axis2 runtime installation to be used in Eclipse. Select OK.
Info title Useful InformationA separate Axis2 runtime is required for use by the Eclipse Axis2 project facet. You can use the pre-integrated Axis2 1.4 binaries (axis-1.4.jar) from the local Geronimo repository under <Geronimo_home>/repository/axis/axis/1.4
- Righ click on the jaxws-calculator project and select Properties, then select Project Facets.
- On the next screen check the box for Axis2 Web Services.
- Select Finish.
This completes the configuration of Eclipse for application development.
...
- Right click on Java Resources: src and select New -> Package.
- Name the package as org.apache.geronimo.samples.jws. Select Finish.
- Right click on the new package and Select New -> Interface.
- Name the interface as Calculator. Select Finish.
- Add the following code to the Calculator interface class:
Code Block borderStyle solid title Calculator.class solidpackage org.apache.geronimo.samples.jws; import javax.jws.WebService; import javax.jws.WebMethod; import javax.jws.WebParam; @WebService(name="CalculatorPortType", targetNamespace = "targetNamespace = "http://jws.samples.geronimo.apache.org") public interface Calculator { @WebMethod public int add(@WebParam(name = "value1") int value1, @WebParam(name = "value2") int value2); } - Right click on the package org.apache.geronimo.samples.jws and select New -> Class.
- Name the class CalculatorService.
- Accept all the defaults and Select Finish..
- Add the following code to CalculatorService class:
Code Block borderStyle solid title CalculatorService.class solidpackage org.apache.geronimo.samples.jws; import javax.annotation.Resource; import javax.jws.WebService; import javax.xml.ws.WebServiceContext; @WebService(serviceName = "Calculator", portName="CalculatorPort", endpointInterface = "org.apache.geronimo.samples.jws.Calculator", targetNamespace = "http://jws.samples.geronimo.apache.org" ) public class CalculatorService implements Calculator { @Resource private WebServiceContext context; public int add(int value1, int value2) { System.out.println("User Principal: " + context.getUserPrincipal()); return value1 + value2; } }
Let us try to understand each annotation.
...
- Export the source files to a jar as shown in the following three figures.
- Open a command prompt and point it to the bin directory of server installation.
- Run the command:
Code Block borderStyle solid title WSDL Generation command solidAdministrator@T60J9:/> jaxws-tools.bat wsgen -classpath C:/WSDL/source.jar -d C:/WSDL/ -wsdl:soap1.1 org.apache.geronimo.samples.jws.CalculatorService In this command -classpath is used to set the source.jar exported from Eclipse in the classpath, -d defines the location where all the generated artifacts will be placed, -wsdl:soap1.1 suggests a WSDL generation following soap1.1 protocol, and org.apache.geronimo.samples.jws.CalculatorService is the SEI used to generate the WSDL. - Once the above command is run
Calculator_schema1.xsd
andCalculator.wsdl
will be generated atC:/WSDL/
. - Rename
Calculator.wsdl
asCalculatorService.wsdl
and add both the generated files to WEB-INF directory of the project.
- Run the command:
...
- Right click on the Web Content folder and Select New --> JSP.
- Name the JSP as index.jsp and select Finish.
- Add the following code to
index.jsp
:Code Block borderStyle solid title index.jsp solid<%@ page import="java.net.URL,javax.xml.namespace.QName,javax.xml.ws.Service,org .apache.geronimo.samples.jws.Calculator"%> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>Calculator</title> </head> <body> <form action="result.jsp"> Please enter 2 whole numbers to add: <input type="text" name="value1"> + <input type="text" name="value2"> <input type="submit" value="="> </form> </body> </html> - Right click on the Web Content folder and Select New -> JSP.
- Name the JSP as result.jsp and select Finish.
- Add the following code to
result.jsp
:Code Block borderStyle solid title result.jsp solid<%@ page import="java.net.URL,javax.xml.namespace.QName,javax.xml.ws.Service,org .apache.geronimo.samples.jws.Calculator"%> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>Calculator Result</title> </head> <% int value1 = 0; int value2 = 0; int sum = 0; try { System.out.println( request.getParameter( "value1" ) + " " + request.getParameter( "value2" ) ); value1 = Integer.parseInt( request.getParameter( "value1" ) ); value2 = Integer.parseInt( request.getParameter( "value2" ) ); URL url = new URL("http://localhost:8080/jaxws-calculator- 1.0/calculator?wsdl"); QName qname = new QName("http://jws.samples.geronimo.apache.org", "Calculator"); Service service = Service.create(url, qname); Calculator calc = (Calculator)service.getPort(Calculator.class); sum = calc.add(value1, value2); } catch ( Exception e ) { e.printStackTrace(); } %> <body> The result is: <%=value1%>+<%=value2%>=<%=sum%> <br> <a href="index.jsp">Back</a> </body> </html> This finishes the development of Web client.
...
- Double click WEB-INF/web.xml and add the following code:
Code Block borderStyle solid title web.xml solid<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:calc="urn:geronimo-samples-jws" xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"> <servlet> <display-name>CalculatorService</display-name> <servlet-name>CalculatorService</servlet-name> <servlet-class> org.apache.geronimo.samples.jws.CalculatorService </servlet-class> </servlet> <servlet-mapping> <servlet-name>CalculatorService</servlet-name> <url-pattern>/calculator</url-pattern> </servlet-mapping> <service-ref> <service-ref-name>services/Calculator</service-ref-name> <service-interface>javax.xml.ws.Service</service-interface> <wsdl-file>WEB-INF/CalculatorService.wsdl</wsdl-file> </</service-ref> </web-app> - Similarly double click geronimo-web.xml and add the following code:
Code Block borderStyle solid title geronimo-web.xml solid<?xml version="1.0" encoding="UTF-8"?> <web:web-app xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2" xmlns:conn="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2" xmlns:name="http://geronimo.apache.org/xml/ns/naming-1.2" xmlns:ejb="http://openejb.apache.org/xml/ns/openejb-jar-2.2" xmlns:pkgen="http://openejb.apache.org/xml/ns/pkgen-2.1" xmlns:app="http://geronimo.apache.org/xml/ns/j2ee/application-2.0 " xmlns:sec="http:" xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0" xmlns:web="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1" xmlns:pers="http://java.sun.com/xml/ns/persistence " xmlns:client="http:" xmlns:client="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0"> <dep:environment> <dep:moduleId> <dep:groupId>org.apache.geronimo.samples.jws</dep:groupId> <dep:artifactId>Calculator</dep:artifactId> <dep<dep:version>1.0</dep:version> <dep:type>car</dep:type> </dep:moduleId> <dep:dependencies> </dep:dependencies> </dep:environment> <context-root>/jaxws-calculator-1.0</context-root> <service-ref> <service-ref-name>services/Calculator</service-ref-name> <port> <port-name>CalculatorPort</port- name>name> <protocol>http</protocol> <host>localhost</host> <port>8080</port> <uri>/jaxws-calculator/calculator</uri> </port> </service-ref> </web:web-app>
Deploy and Run
- Right click on jaxws-calculator project. Select Run As -> Run On Server.
- On the next window select Apache Geronimo V2.2 and Select Finish.
- Once the application is deployed on the server launch a browser and run the following URL http://localhost:8080/jaxws-calculator-1.0/index.jsp.
- Give the values as 5 and 7 and then select the = button:
- The result is 12 as shown in the figure: