Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          本文轉:http://blog.csdn.net/happlyin/archive/2003/10/25/18308.aspx


          本文結合一個簡單示例講解了怎樣把AxisAnt結合起來進行Web服務的開發。幫助讀者從簡單的java源代碼或者從一個服務描述文件(wsdl)開始,用Ant工具進行構建,設置,并把服務部署到Axis

          ?

          首先假定您熟悉 AXIS 處理系統和Ant工具。文中示例所需要的軟件如下:

          l???????? Apache Axis 1.1

          l???????? Apache Ant 1.5.3

          l???????? Jarkat Tomcat 4.1.24

          在開始前,假定上述軟件已經安裝和配置好了。

          ?

          AxisAnt簡介

          Axis 框架是來自 Apache Group 的、基于 java 的、最新的 SOAP 規范(SOAP 1.2)和 SOAP with Attachments 規范(來自 Apache Group )的開放源代碼實現。其本質上是一個SOAP引擎--一個構建諸如客戶端、服務器、網關等SOAP處理器的框架。是Apache SOAP的后繼項目。但是,Axis使用SAX(基于事件)解析器獲得了比Apache SOAP早期版本(使用DOM解析)非常明顯的速度優勢。另外,它還具有很強的靈活性和穩定性,支持Web服務描述語言1.1版。

          Apache AntApache軟件基金會jakarta項目中的一個子項目,是一個基于Java的構建工具,類似于make,但它沒有make那么復雜繁瑣。Ant由一些內置任務(task)和可選擇的任務組成,還可以配置第三方提供的任務。它的構建配置文件基于XML的,所以容易書寫和維護,而且結構清晰。Ant還可以集成到一些開發環境中(例如visual age,jbuilder,Elipse)

          ?

          AxisAnt的支持

          Axis為支持Ant構建,提供了一個axis-ant.jar文件。該文件包含三個可選任務(task)的定義和實現:axis-wsdl2javaaxis-java2wsdlaxis-admin。任務axis-wsdl2javaAxis提供的工具WSDL2Java具有同樣的功能,根據web服務描述文件生成對應的Java源程序,它的屬性設置與WSDL2Java的命令參數設置類似。而任務axis-java2wsdl則相反,它與Java2WSDL工具一樣,是根據已有的類文件來生成Web服務描述文件。最后一個任務axis-admin是用于web服務的部署和取消部署的,對應于AxisAminClient工具。

          為了使Ant能夠正確使用上述三個任務(task),還需要做一些配置。注意:Apache Ant的版本必須是1.5.1或更高版本。

          1.設置系統的環境變量CLASSPATH包含Axis提供的axis-ant.jar文件,或者在Ant的配置文件(通常是build.xml)中設置路徑包含它。例如,

          ??? <path id="axis.classpath">

          ? ??? <fileset dir="${axis.home}/lib">

          ??? ?????? ????<include name="**/*.jar" />

          ????? </fileset>

          ??? </path>

          ???

          2.然后使用<taskdef>聲明導入axis-ant.jar文件中的屬性文件所定義的任務(task)列表。

          ??? <taskdef resource="axis-tasks.properties"

          ? classpathref="axis.classpath" />

          ? ?? 3.設置在構建過程中可能要需要的java包,例如,Axis所有的jar包,wsdl4j.jarjunit.jar等等。

          ?

          實例開發

          下面就用一個實例來講解怎樣把AntAxis結合來開發Web服務。為了注重本文的目的,我們開發一個比較簡單的Web服務,它接受客戶端傳入的字符串數組,如果傳入的參數為null,則拋出一個自定義的異常,否則把每個字符串連接起來返回給客戶端。

          首先定義一個Web服務接口Hello,如下所示:

          ?

          ? package com.bidlink.hello;

          ? public interface Hello{

          ???? public String echo(String[] content ) throws???????????????????? ??

          ?????????????? java.rmi.RemoteException,com.bidlink.hello.MyException;

          ? }

          ?

          ? 自定義異常MyException包含一個時間值,以記錄異常出現的時間,如下:

          ?

          ? package com.bidlink.hello;

          public class MyException extends org.apache.axis.AxisFault implements java.io.Serializable{

          ??? private java.util.Calendar occurTime;

          ???

          ??? public MyException() {

          ??? }

          ?

          ??? public MyException(

          ?????????? java.util.Calendar occurTime) {

          ??????? super();

          ??????? this.occurTime = occurTime;

          ??? }

          ?

          ??? public java.util.Calendar getOccurTime() {

          ??????? return occurTime;

          ??? }

          ?

          ??? public void setOccurTime(java.util.Calendar occurTime) {

          ??????? this.occurTime = occurTime;

          ??? }???????????

          }

          ?

          1axis-java2wsdl:從類文件生成服務描述文件

          編譯上面定義的兩個文件Hell.javaMyException.java。接著編寫Ant的配置文件build.xml(文件詳細信息請查看示例源代碼),使用axis-java2wsdl任務根據類Hello來生成Web服務描述文件hello.wsdl。任務具體配置如下:

          ??? <axis-java2wsdl classname="com.bidlink.hello.Hello"

          ??????????????????????? location="http://localhost:8080/axis/services/Hello"

          ??????????????????????? namespace="http://hello.bidlink.com"

          ??????????????????????? output="hello.wsdl"

          ??????????????????????? style="RPC"

          ??????????????????????? extraclasses="com.bidlink.hello.MyException">

          ??? ?????<classpath>

          ???????????? <pathelement path="${dist}"/>

          ???????? </classpath>

          ??????? </axis-java2wsdl>

          ???????

          其中,<pathelement path="${dist}"/>指出Hello.classMyException.class文件的位置。

          運行命令ant java2wsdl,構建出Web服務描述文件hello.wsdl

          2axis-wsdkl2java:從服務描述文件生成服務源程序

          下面講解怎樣根據剛剛得到的hello.wsdl文件生成服務所需要的java源程序。在這里需要用到任務axis-wsdl2java。任務屬性設置如下:

          ???? <axis-wsdl2java all="true"

          ?? ?????????????? ???url="hello.wsdl"

          ??? ????????????? ???deployscope="Request"

          ??? ????????????? ???output="${gensrc}"

          ??? ????????????? ???serverside="true"

          ??? ????????????? ???skeletondeploy="false"

          ??? ????????????? ???testcase="true"

          ??? ????????????? ???noimports="false"

          ??? ????????????? ???typemappingversion="1.2">

          ???????

          ??????? </axis-wsdl2java>

          ? ??? 運行ant wsdl2java,根據axis-wsdl2java任務的屬性配置生成相應的java源程序,本例所生成的文件包括:服務端服務接口文件Hello.java及其實現HelloSoapBindingImpl.java,以及客戶端的HelloService.javaHelloServiceLocator.javaHelloServiceLocator.java和客戶端存根文件HelloSoapBindingStub.java。又因為屬性testcase="true",所以還生成了測試文件HelloServiceTestCase.java。當然,自定義異常MyException也是重新生成的。

          3axis-admin:向Axis部署Hello服務

          服務源程序生成后,需要根據服務的功能修改HelloSoapBindingImpl.java文件,以真正實現該Web服務。修改如下:

          ? /**

          ?* HelloSoapBindingImpl.java

          ?*

          ?* This file was auto-generated from WSDL

          ?* by the Apache Axis WSDL2Java emitter.

          ?*/

          ?

          package com.bidlink.hello;

          ?

          public class HelloSoapBindingImpl implements com.bidlink.hello.Hello{

          ??? public java.lang.String echo(java.lang.String[] in0) throws java.rmi.RemoteException, com.bidlink.hello.MyException {

          ??????? if(in0 == null)

          ?????????? throw new MyException(java.util.Calendar.getInstance());

          ??????????

          ???????

          ??????? String retStr = "";

          ??????? for(int i=0; i< in0.length; i++)

          ?????????? retStr += in0[i];

          ??????? return retStr;

          ??? }

          ?

          }

          ???

          編譯所有的生成的源程序,最后使用axis-admin任務向Axis部署Hello Web服務。

          ??? <axis-admin

          ?????? ??? port="${target.port}"

          ??? ?????? ????hostname="${target.server}"

          ??????????? failonerror="true"

          ??????????? servletpath="${target.appname}/services/AdminService"

          ??????????? debug="true"

          ??????????? xmlfile="deploy.wsdd"/>

          ?????? 運行ant deploy,部署Hello服務。

          ?? ?測試

          現在可以測試所部署的Web服務hello。可以通過瀏覽器,也可以利用剛才生成的測試文件HelloServiceTestCase.java來進行該項工作。如果利用測試文件HelloServiceTestCase.java,那么還需要對它進行稍作修改。具體來說,就是添加一個main函數,然后修改所生成的測試方法。

          ??

          參考資料

          1閱讀Apache Axis開發指導文檔

          2.查看Apache Ant文檔手冊http://ant.apache.org/manual/index.html

          3http://nagoya.apache.org/wiki/apachewiki.cgi?AxisProjectPages/AxisAntTasks得到更多關于Axis-Ant任務的信息。
          posted on 2009-09-27 18:05 禮物 閱讀(654) 評論(0)  編輯  收藏 所屬分類: Axis
          主站蜘蛛池模板: 黎川县| 洪洞县| 靖边县| 津市市| 长治县| 游戏| 吴堡县| 江城| 张家港市| 博乐市| 安庆市| 施秉县| 安龙县| 绿春县| 玛纳斯县| 绥滨县| 安庆市| 阿荣旗| 晋江市| 铜山县| 伊春市| 阳原县| 焉耆| 康乐县| 龙里县| 高要市| 龙海市| 沧源| 新邵县| 娄烦县| 比如县| 农安县| 达尔| 响水县| 神木县| 新疆| 澄迈县| 南木林县| 太原市| 平潭县| 平原县|