本例子的WebService提供了兩個方法,分別是sayHello和sayHelloToPerson,第一個只是返回一個"Hello"字符串,沒 有參數,第二個函數接受一個字符串作為參數,返回"Hello 參數值",該例子比較簡單,但是清楚的說明了從編寫代碼到發布為WebService以及測試編寫好的WebService全過程。
編寫服務代碼
服務代碼提供了兩個函數,分別為sayHello和sayHelloToPerson,源代碼如下:












































發布WebService
要將上邊寫的HelloService類發布為WebService,需要先搭建Web應用。下面是在Tomcat下使用Axis創建WebService服務的例子。
在Tomcat下創建Web應用
在該例子中,在Tomcat下創建了一個context path為ws的WEB應用。
1. 在Tomcat的webapps下創建如下文件系統
ws
WEB-INF
lib
classes
2. 在WEB-INF文件夾下創建web.xml文件,該文件的內容如下:


































































































在上面的web.xml中主要是配置了axis的相關配置。
axis的相關配置
在上述的web.xml文件中已經對axis進行了配置,但是還需要進行額外的配置。
復制axis相關的jar文件
將axis的相關jar文件復制到WEB-INF"lib文件夾下。這些文件包括:
activation.jar
axis.jar
axis-ant.jar
axis-schema.jar
commons-discovery-0.2.jar
commons-logging-1.0.4.jar
jaxrpc.jar
log4j-1.2.8.jar
mailapi.jar
saaj.jar
wsdl4j-1.5.1.jar
xmlsec-1.3.0.jar
復制WebService服務主文件
將HelloService.java編譯后的class文件復制到WEB-INF"classes文件夾下,也就是說在WEB-INF "classes文件夾下的文件夾結構為:com"sinosoft"webservice,在webservice文件夾下有一個 helloservice.class文件。
測試發布的Web應用
啟動Tomcat服務,打開IE瀏覽器,訪問地址http:host:port/ws/services,如果看到如下界面就說明AXIS部署成功了。
發布WebService
發布WebService需要使用現有的AdminService來實現,這里我寫了一個批處理文件來發布WebService,以后如果需要發布其他文件,只需要修改相應的參數就可以了。
創建deploy.wsdd文件
文件deploy.wsdd內容如下所示:








創建發布WebService服務的批處理文件
批處理文件deploywebservice.bat內容如下:

java -cp E:"Stephen"Lib"axislib"activation.jar;E:"Stephen"Lib"axislib"axis-ant.jar;E:"Stephen"Lib"axislib"axis-schema.jar;E:"Stephen"Lib"axislib"axis.jar;E:"Stephen"Lib"axislib"commons-discovery-0.2.jar;E:"Stephen"Lib"axislib"commons-logging-1.0.4.jar;E:"Stephen"Lib"axislib"jaxrpc.jar;E:"Stephen"Lib"axislib"log4j-1.2.8.jar;E:"Stephen"Lib"axislib"mailapi.jar;E:"Stephen"Lib"axislib"saaj.jar;E:"Stephen"Lib"axislib"wsdl4j-1.5.1.jar;E:"Stephen"Lib"axislib"xmlsec-1.3.0.jar org.apache.axis.client.AdminClient -lhttp://localhost:8090/ws/services/AdminService deploy.wsdd
其中E:"Stephen"Lib"axislib是存放axis對應的jar文件的文件夾,現在將所有的jar文件都加入到classpath中進行執行。
-l后的參數是本地要發布WebService的AdminService對應的訪問地址。
最后deploy.wsdd是對應的配置文件名稱。
發布WebService服務
將deploy.wsdd文件和deploywebservice.bat文件復制到同一個文件夾下,執行deploywebservice.bat批處理文件,就可以將deploy.wsdd中描述的Java類發布為WebService。發布完成之后在訪問http://host:port/ws/services如下圖所示:
從上圖可以看出,發布成功后,多了一個HelloServices的服務。這樣就說明HelloService發布成功了。
查看HelloServices的wsdl
訪問http://host:port/ws/services/HelloServices?wsdl可以看到如下wsdl的內容:






































































































用Java調用WebService實例
下面是用Java調用剛發布的WebService例子。

/*
* File name: TestHelloService.java
*
* Version: v1.0
*
* Created on Aug 2, 2008 9:54:10 AM
*
* Designed by Stephen
*
* (c)Copyright 2008
*/
package test.com.sinosoft.webservice;
import java.io.IOException;
import java.net.MalformedURLException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @author Stephen
*
* 測試調用WebService
*/
public class TestHelloService {
private static final Log log = LogFactory.getLog(TestHelloService.class);
private static final String HELLO_SERVICE_ENDPOINT = "http://localhost:8090/ws/services/HelloServices?wsdl";
public static void main(String[] args) {
TestHelloService tester = new TestHelloService();
// tester.callSayHello();
tester.callSayHelloToPerson();
}
public void callSayHello() {
try {
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(
HELLO_SERVICE_ENDPOINT));
call.setOperationName(new QName("http://webservice.sinosoft.com/",
"sayHello"));
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
try {
String ret = (String) call.invoke(new Object[] {});
System.out.println("The return value is:" + ret);
return;
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
}
log.error("call sayHello service error!");
}
public void callSayHelloToPerson() {
try {
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(
HELLO_SERVICE_ENDPOINT));
call.setOperationName(new QName("http://webservice.sinosoft.com/",
"sayHelloToPerson"));
call.addParameter("name", org.apache.axis.Constants.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
try {
String ret = (String) call.invoke(new Object[] { "Stephen" });
System.out.println("The return value is:" + ret);
return;
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
}
log.error("call sayHello service error!");
}
}