March 2006
Building web services with Apache Axis
I. Assumptions:
==========
(1) Your path variable contains C:\batch.
(2) C:\batch has the following batch files:
adminclient.bat
java org.apache.axis.client.AdminClient %1
wsdl2java.bat
java org.apache.axis.wsdl.WSDL2Java %1
tcpmon.bat
java org.apache.axis.utils.tcpmon %1
(3) Your classpath includes all of the jar files required by Axis. For
example, the classes AdminClient and WSDL2Java must be
in a jar file pointed to by your classpath.
(4) You have located your Microsoft wsdl.exe file. Mine was found in:
C:\Program Files\Microsoft.NET\SDK\v1.1\Bin\wsdl.exe
(5) You have located your Microsoft command line C# compiler.
Mine was found in:
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc.exe
(6) Add the above paths to your path variable. Mine now reads:
C:\Program Files\Java\jdk1.5.0_05\bin;
C:\Program Files\Microsoft.NET\SDK\V1.1\Bin;
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322;
C:\WINDOWS\system32;
C:\batch;
C:\Tomcat 5.5\bin;
%ANT_HOME%\bin;
II. Building a simple web service
======================
1. Create server side Java code:
// SimpleCrypto.java
// On the server side
public class SimpleCrypto {
public int caeser(int c) { return c + 3 % 26; }
}
2. Create server side deployment descriptors
deploy.wsdd
undeploy.wsdd
3. Copy all .class files to C:\Tomcat 5.5\webapps\axis\WEB-INF\classes.
4. Run adminclient deploy.wsdd
III. On the client
===========
1. Visit http://localhost:8080/axis/servlet/AxisServlet
and save the wsdl document associated with CaeserService.
2. Place this file on the client side. When writing a microsoft client
you will need to change the extension from ".xml" to ".wsdl".
IV. Client side programming in Java
========================
1. Run wsdl2java CaeserService.xml.
2. Look over the new directory and examine the Java source code
generated.
// Java Client directory
D:\McCarthy\www\95-804\examples\caeser\client>tree /f
Folder PATH listing
Volume serial number is 71FAE346 BA17:BF69
D:.
¦ CaeserClient.class
¦ CaeserClient.java
¦ CaeserService.xml
¦
+---localhost
+---axis
+---services
+---CaeserService
CaeserServiceSoapBindingStub.class
CaeserServiceSoapBindingStub.java
SimpleCrypto.class
SimpleCrypto.java
SimpleCryptoService.class
SimpleCryptoService.java
SimpleCryptoServiceLocator.class
SimpleCryptoServiceLocator.java
3. Write a client in Java.
import localhost.axis.services.CaeserService.*;
public class CaeserClient {
public static void main(String args[]) throws Exception {
SimpleCryptoServiceLocator loc = new SimpleCryptoServiceLocator();
SimpleCrypto s = loc.getCaeserService();
int c = s.caeser(5);
System.out.println(c);
}
}
V. Client side programming in C#
=======================
1. Run wsdl CaeserService.wsdl (note change in extension)
2. Look over the new ".cs" file and examine the source code.
The file is named SimpleCryptoService.cs
3. Compile this into a library.
csc -t:library SimpleCryptoService.cs
producing a SimpleCryptoService.dll
4. Write a C# client.
using System;
public class MyClient {
public static void Main() {
SimpleCryptoService crypto = new SimpleCryptoService();
int c = crypto.caeser(65);
Console.WriteLine(c);
}
}
Compile with
csc -r:SimpleCryptoService.dll Client.cs
VI. Watching the SOAP interactions
======================
1. Run tcpmon from any directory.
2. The client contacts 7070 (proxy code must be changed to 7070) and tcpmon visits 8080 where
Tomcat/Axis is listening