程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 用Axis開發基於Java的Web服務

用Axis開發基於Java的Web服務

編輯:關於JAVA

概述

本文介紹了一個比較簡單實用的基於Java的SOAP引擎——Apache組織推出的 Axis——的安裝、配置和應用開發方法,希望對有興趣做基於Java的Web Services應用開發的朋友有所幫助。

Axis簡介

Axis是Apache組織推出的SOAP引擎,Axis項目是Apache組織著名的SOAP項目 的後繼項目,目前最新版本是采用Java開發的1.1版本,C++的版本正在開發之中 。Axis v1.1軟件包可以從http://ws.apache.org/axis/dist/1_1/下載得到。

Axis的安裝

應用Axis開發Web Services,你需要有一個支持Servlet的服務器引擎,比如 廣為人知的Tomcat(Tomcat也是由Apache組織所提供的,目前的最新版本為 4.1.24,下載地址為http://jakarta.apache.org/builds/jakarta-tomcat- 4.0/release/v4.1.24/)。在此之前當然你機器必須已經裝好了JDK1.3以上的版 本,當安裝好Tomcat之後,只需將下載的Axis軟件包解壓縮,將其中的 “webapps”目錄下的“axis”目錄整個拷貝到Tomcat安裝目錄下的“webapps” 目錄下即可。

Axis的配置

Axis基於Java開發,可以部署於多種操作系統,使用前需要配置一系列的系 統變量,在此假定你已經在本機上裝好了Tomcat 4.0以上的版本,需要配置的系 統變量如下表所示:

CATALINA_HOME

C:\Tomcat_4_1

(此處應為Tomcat的安裝位置,注意路徑名中不要有空格)

AXIS_HOME
%CATALINA_HOME%\webapps\axis
AXIS_LIB
%AXIS_HOME%\lib
AXISCLASSPATH
%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar; %AXIS_LIB%\commons-logging.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軟件包中“lib”目錄 下的所有.jar文件加入到系統環境變量CLASSPATH中即可。

Axis的測試

安裝配置完畢後,應測試一下是否Axis可以正確運行了。

啟動Tomcat服務器,在浏覽器中訪問 http://localhost:8080/axis/happyaxis.jsp,如果頁面顯示有錯誤,則需要回 頭檢查一下相關配置是否正確,如果浏覽頁面能正確顯示出系統組件、屬性等參 數配置信息,則表示安裝成功,如下圖所示:

現在可以開始開發你的Web Services應用了。

服務的發布

Axis提供了兩種服務發布方式,一種是即時發布(Instant Deployment), 一種是定制發布(Custom Deployment)。

使用即時發布

對即時發布的支持是Axis的特色之一,使用即時發布使用戶只需有提供服務 的Java類的源代碼,即可將其迅速發布成Web服務。每當用戶調用這類服務的時 候,Axis會自動進行編譯,即使服務器重啟了也不必對其做任何處理,使用非常 簡單快捷。

使用即時發布首先需要一個實現服務功能的Java源文件,將其擴展名改 為.jws(Java Web Service的縮寫),然後將該文件放到“……\webapps\axis” 目錄下即可。

在此給出一個從英裡到公裡的長度單位轉換的服務,其源碼如下:

文件Distance.jws

/**
* @author 飛鷹
*/
public class Distance
{
public double convertMile2Kilometre( double mile )
{
//實現 英裡到公裡的距離轉換
return mile * 1.609;
}//convertMile2Kilometre()
}/* Distance */

將其放到“……\webapps\axis”目錄,通過訪問 http://localhost:8080/axis/Distance.jws?wsdl可以看到這個服務的WSDL描述 文件,這說明Distance服務被成功發布了。如下圖所示:

使用定制發布

即時發布是一項令人激動的技術,它使Web服務 的開發變得如此簡單;然而即時發布並不總是最好的選擇,比如有些應用系統是 第三方提供的,我們沒有購買源代碼,只有.class文件,但我們又希望將這個應 用系統的一些功能對外發布成Web服務,使其能夠在更大范圍內產生作用,這個 時候即時發布技術就無能為力了。此外,即時發布技術並不靈活,無法進行更多 的服務配置,這使得它並不能滿足一些特定系統的需求。

因此,Axis提 供了另一種服務發布方式,這就是定制發布。

在此給出一個從加侖到升 的容積單位轉換的服務,其源碼如下:

文件 Capacity.java

package samples.capacity;
  /**
   * @author 飛鷹
  */
  public class Capacity
   {
  public double convertGallon2Litre( double gallon )
   {
  //實現加侖到升的容積轉換
  return gallon * 4.546;
  }//convertGallon2Litre()
  }/* Capacity */

將其編譯成.class文件,放置到 “……\webapps\axis\samples\capacity”目錄下,即可著 手進行發布。

定制發布不需要構建.jws文件,但必須創建服務發布描述 文件deploy.wsdd(Web Service Deployment Descriptor的縮寫),這個文件負 責描述服務的名稱、入口等信息,其內容如下:

文件 deploy.wsdd

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
   xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"& gt;
  <service name="Capacity" provider="java:RPC">
  <parameter name="className" value="samples.capacity.Capacity"/>
   <parameter name="allowedMethods" value="*"/>
  </service>
   </deployment>

將該文件也放到 “……\webapps\axis\samples\capacity”目錄下,然後可 以采用Axis提供的一個客戶端管理工具——AdminClient來完成服務 的定制發布。

在“……\webapps\axis\samples\capacity”目錄下,運行:

java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

可以看到以下運行結果:

Processing file deploy.wsdd

<Admin>Doneprocessing</Admin>

這表明Capacity服務定制發布完成。

通過訪問http://localhost:8080/axis/services/Capacity?wsdl可以看到這 個服務的WSDL描述文件,這說明Capacity服務被成功發布了。如下圖所示:

服務的訪問

GET方式的服務訪問

一般的SOAP消息都是采用POST方式實現傳遞,但也可以通過GET方式來訪問。 比如以下給出的一個服務——“HelloWorld”,其源碼如下:

文件HelloWorld.jws

/**
* @author 飛鷹
*/
public class HelloWorld
{
public String helloWorld()
{
//在服務器端打印輸出
System.out.println( "Hello World!" );
//返回相應字符串
return "Hello World!";
}//helloWorld()
}/* HelloWorld */

這個服務給出一個名位“helloWorld”的無入口參數的操作,返回一個內容 為“Hello World!的字符串”,同時在服務器端打印“Hello World!”,將該 文件放到“……\webapps\axis”目錄下,即可通過GET方法直接訪問該服務,訪問 的地址為http://localhost:8080/axis/HelloWorld.jws?method=helloWorld, 可以看到返回的SOAP信封消息,同時服務器端給出了相應的顯示信息“Hello World!”這表明HelloWorld服務被成功訪問了。如下圖所示:

客戶端服務訪問編程

Axis提供了一套API來實現SOAP,從 http://localhost:8080/axis/docs/apiDocs/index.html可以看到Axis的API文 檔。

其中,org.apache.axis.client.Call和 org.apache.axis.client.Service是兩個比較常用的類,一般的客戶端程序欲訪 問一個Web Service時,都要生成一個客戶端的Service對象和Call對象,在訪問 服務之前,首先要對Call對象設置相應的參數,包括服務的位置、操作名、入口 參數、返回值類型等,最後調用Call對象的invoke方法訪問服務。

以下 給出了一個客戶端訪問Web服務的例程——AXISTest.java:

文件AXISTest.java

package axisexercise;
  import org.apache.axis.client.Call;
  import org.apache.axis.client.Service;
  import org.apache.axis.encoding.XMLType;
  import javax.xml.rpc.ParameterMode;
  /**
  * @author 飛鷹
  */
  public class AXISTest
  {
  public static void main( String[] args ) throws Exception
  {
   Service service = new Service();
  Call call = ( Call ) service.createCall();
  //////////訪問即時發布的Distance服務
  //設置訪問點
  call.setTargetEndpointAddress( "http://localhost:8080/axis/Distance.jws" );
  //設置 操作名
  call.setOperationName( "convertMile2Kilometre" );
  //設置入口參數
   call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );
  call.setReturnType( XMLType.XSD_DOUBLE );
  Double d1 = new Double( 190 );
  //調用服務
   System.out.println( d1 + " 英裡相當於 " +
   call.invoke( new Object[] {d1} ) + " 公裡!" );
   //////////訪問定制發布的Capacity服務
  call = ( Call ) service.createCall();
  //設置訪問點
   call.setTargetEndpointAddress( "http://localhost:8080/axis/services/Capacity" );
   //設置操作名
  call.setOperationName( "convertGallon2Litre" );
  //設置入口參數
   call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );
  call.setReturnType( XMLType.XSD_DOUBLE );
  d1 = new Double( 10.00 );
  //調用服務
   System.out.println( d1 + " 加侖相當於 " +
   call.invoke( new Object[] {d1} ) + " 升!" );
  } //main()
  }/* AXISTest */

編譯運行後運行可以看到以下 的結果:

190.0英裡相當於305.71公裡!

10.0加侖相當於45.46升 !

注意程序在訪問即時發布的Distance服務和定制發布的Capacity服務 時的不同,前者的服務訪問點地址為 http://localhost:8080/axis/HelloWorld.jws,而後者的則為 http://localhost:8080/axis/services/Capacity。

總結

Web Services是未來網絡應用的發展方向,SOAP和WSDL是Web Services的核心協議, Axis給出了一個很好的SOAP實現,它使得開發Web Services應用變得輕松而有趣 。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved