Skip to main content

How to Setup and Test Axis with Tomcat to run Web Services

See also: http://ws.apache.org/axis/java/install.html.

Installation


1. Download and install Tomcat and verify it works (http://localhost:8080)
2. Download and unpack Axis to C:\tools.
3. Copy the directory $AXISDIR\ webapps\axis in $CATALINA_HOME/webapps.
4. Download xerces and extract xercesImpl.jar and xml-apis.jar to $AXISDIR\lib.
5. Downalod JavaBeans Activation Framework and extract activation.jar to $CATALINA_HOME\webapps\axis\WEB-INF\lib and to $AXISDIR\lib.
6. Download JavaMail and extract mail.jar to $CATALINA_HOME \webapps\axis\WEB-INF\lib and to $AXISDIR\lib.
7. Copy tools.jar (from $JAVA_SDK\lib) to $CATALINA_HOME\lib.
8. Set the following environment variables:

AXIS_HOME = $AXISDIR
XIS_LIB = %AXIS_HOME%\lib
AXISCLASSPATH = %AXIS_LIB%;%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar;%AXIS_HOME%;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\activation.jar; %AXIS_LIB%\mail.jar

9. Check the Axis Happiness Page: http://localhost:8080/axis/happyaxis.jsp. There should not be any warnings in the Needed Components section.

10. Test the command line admin tool. Open a command prompt and type:

java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient list

Testing: Simple A Web Service


To test that Axis is working correctly with Tomcat for simple web services:

1. Create Test.jws in $CATALINA_HOME\webapps\axis:
// Test.jws

public class Test
{
public String echoString(String test)
{
return test;
}

public String stapleString(String test1, String test2)
{
return test1 + " : " + test2;
}
}

2. Build and execute the following Java program:
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class TestClient
{
public static void main(String[] args)
{
try
{
String endpoint = "http://localhost:8080/axis/Test.jws";
String ret = "";

Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );

call.setOperationName("echoString");
ret = (String) call.invoke( new Object[] { "Hello!" } );
System.out.println("Sent 'Hello!' to echoString, got '" + ret + "'");

call.setOperationName("stapleString");
ret = (String) call.invoke( new Object[] { "One","Two" } );
System.out.println("Sent 'One' and 'Two' to stapleString, got '" + ret + "'");

}
catch (Exception e)
{
System.err.println(e.toString());
}
}
}

The output should be:
Sent 'Hello!' to echoString, got 'Hello!'
Sent 'One' and 'Two' to stapleString, got 'One : Two'

Testing: Deploying


1. Create Test.class from the following Test.java:

package onjava;

public class Test
{
public String echoString(String test)
{
return test;
}

public String stapleString(String test1, String test2)
{
return test1 + " : " + test2;
}
}

2. Copy Test.class to $CATALINA_HOME\webapps\axis\WEB-INF\classes\onjava.
3. Create the following deploy.wsdd file:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="Test" provider="java:RPC">
<parameter name="allowedMethods" value="echoString,stapleString"/>
<parameter name="enableRemoteAdmin" value="false"/>
<parameter name="className" value="onjava.Test"/>
</service>
</deployment>


4. Deploy the service:
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

Expected output:
Processing file deploy.wsdd
<Admin>Done processing</Admin>

5. Check that the Test service appears in the service list: http://localhost:8080/axis/servlet/AxisServlet
6. Build and execute the following Java program to test the serivce:
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class TestClient
{
public static void main(String[] args)
{
try
{
String endpoint = "http://localhost:8080/axis/services/Test";
String ret = "";

Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );

call.setOperationName("echoString");
ret = (String) call.invoke( new Object[] { "Hello!" } );
System.out.println("Sent 'Hello!' to echoString, got '" + ret + "'");

call.setOperationName("stapleString");
ret = (String) call.invoke( new Object[] { "One","Two" } );
System.out.println("Sent 'One' and 'Two' to stapleString, got '" + ret + "'");

}
catch (Exception e)
{
System.err.println(e.toString());
}
}
}


The output should be:
Sent 'Hello!' to echoString, got 'Hello!'
Sent 'One' and 'Two' to stapleString, got 'One : Two'

7. The Test.class file can also be archived in a JAR. To be found, the JAR must be copied to $CATALINA_HOME\webapps\axis\WEB-INF\lib and Tomcat restarted.

Comments

Popular posts from this blog

Write Your Own Load Balancer: A worked Example

I was out walking with a techie friend of mine I’d not seen for a while and he asked me if I’d written anything recently. I hadn’t, other than an article on data sharing a few months before and I realised I was missing it. Well, not the writing itself, but the end result. In the last few weeks, another friend of mine, John Cricket , has been setting weekly code challenges via linkedin and his new website, https://codingchallenges.fyi/ . They were all quite interesting, but one in particular on writing load balancers appealed, so I thought I’d kill two birds with one stone and write up a worked example. You’ll find my worked example below. The challenge itself is italics and voice is that of John Crickets. The Coding Challenge https://codingchallenges.fyi/challenges/challenge-load-balancer/ Write Your Own Load Balancer This challenge is to build your own application layer load balancer. A load balancer sits in front of a group of servers and routes client requests across all of the serv

Bloodstock 2009

This year was one of the best Bloodstock s ever, which surprised me as the line up didn't look too strong. I haven't come away with a list of bands I want to buy all the albums of, but I did enjoy a lot of the performances. Insomnium[6] sound a lot like Swallow the Sun and Paradise Lost. They put on a very good show. I find a lot of old thrash bands quite boring, but Sodom[5] were quite good. They could have done with a second guitarist and the bass broke in the first song and it seemed to take ages to get it fixed. Saxon[8] gave us some some classic traditional heavy metal. Solid, as expected. The best bit was, following the guitarist standing on a monitor, Biff Bifford ripped off the sign saying "DO NOT STAND" and showed it to the audience. Once their sound was sorted, Arch Enemy[10] stole the show. They turned out not only to be the best band of the day, but of the festival, but then that's what you'd expect from Arch Enemy. Carcass[4] were very disappoin

Catalina-Ant for Tomcat 7

I recently upgraded from Tomcat 6 to Tomcat 7 and all of my Ant deployment scripts stopped working. I eventually worked out why and made the necessary changes, but there doesn’t seem to be a complete description of how to use Catalina-Ant for Tomcat 7 on the web so I thought I'd write one. To start with, make sure Tomcat manager is configured for use by Catalina-Ant. Make sure that manager-script is included in the roles for one of the users in TOMCAT_HOME/conf/tomcat-users.xml . For example: <tomcat-users> <user name="admin" password="s3cr£t" roles="manager-gui, manager-script "/> </tomcat-users> Catalina-Ant for Tomcat 6 was encapsulated within a single JAR file. Catalina-Ant for Tomcat 7 requires four JAR files. One from TOMCAT_HOME/bin : tomcat-juli.jar and three from TOMCAT_HOME/lib: catalina-ant.jar tomcat-coyote.jar tomcat-util.jar There are at least three ways of making the JARs available to Ant: Copy the JARs into th