kapok

          垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks
          http://www.cjsdn.net/post/view?bid=5&id=151014&sty=1&tpg=1&age=0

          這篇比較早,放在自己的blog里,順便貼過來,讓版本看看,是否可以加分。
          Apache Axis開發(fā)WEB Service簡要說明(1)- -



          1 介紹

          本文并不是想介紹Web服務的原理、系統(tǒng)架構等,我們假設您已經(jīng)了解了關于Web服務的一些基本的概念、原理等知識。本文主要是針對那些已經(jīng)了解Web服務概念,但是還沒有親身體會Web服務所帶來令人歡欣鼓舞的特征的開發(fā)人員。在此我們認為你已經(jīng)具備了Java、XML等基礎知識,如果你還有其他開發(fā)環(huán)境的經(jīng)驗例如VB、VC那是再好不過的了。
          1.1 Web服務

          雖然我們并不想詳細講述Web服務的體系結(jié)構,但是大概的介紹一下還是有必要的。Web服務是一種新型的Web應用程序。不同于其他Web應用程序,它是自適應、自我描述、模塊化的應用程序,并可以跨越Web進行發(fā)布、定位以及調(diào)用。簡單的Web服務可以提供例如天氣預報或者航班信息的服務。一旦部署了Web服務,其他的應用程序就可以發(fā)現(xiàn)和調(diào)用所部署的服務。
          1.2 AXIS項目

          Axis框架來自 Apache 開放源代碼組織,它是基于JAVA語言的最新的 SOAP 規(guī)范(SOAP 1.2)和 SOAP with Attachments 規(guī)范(來自 Apache Group )的開放源代碼實現(xiàn)。有很多流行的開發(fā)工具都使用AXIS作為其實現(xiàn)支持Web服務的功能,例如JBuilder以及著名的Eclipse J2EE插件Lomboz。AXIS的最新版本是1.1,可以從http://ws.apache.org/axis/index.html下載。下圖是AXIS核心引擎的體系結(jié)構圖:

          整個AXIS項目包括以下幾個部分:

          1. 消息流子系統(tǒng)

          消息流子系統(tǒng)提供了靈活的消息傳遞框架,這個消息傳遞框架包括處理程序、鏈、序列化程序和反序列化程序。處理程序是一個處理請求、響應和故障流的對象。處理程序可被組合在一起成為鏈,而且可以使用一個靈活的部署描述符來配置這些處理程序的順序。

          2. 傳輸框架子系統(tǒng)

          提供了一個傳輸框架,這個傳輸框架可以幫助您創(chuàng)建自己的可插式傳輸發(fā)送器和傳輸偵聽器。

          3. 數(shù)據(jù)編碼子系統(tǒng)

          AXIS完全按照 XML Schema 規(guī)范提供各種數(shù)據(jù)類型的自動序列化,并且提供功能擴展接口來使用您自己定制的序列化器和反序列化器。

          4. 其他

          AXIS完全支持 WSDL 以及日志記錄、出錯以及故障處理機制。它同時提供一些工具用來講WSDL文檔轉(zhuǎn)換成客戶端的調(diào)用框架以及根據(jù)類來產(chǎn)生WSDL定義文檔。

          AXIS目前版本支持的標準是:W3C SOAP 1.1 和 1.2;WSDL 1.1;SAAJ 1.1(SUN公司:SOAP with Attachments API for Java);JAX-RPC(SUN公司:Java API for XML-Based RPC)1.0。
          2 Axis使用
          2.1 Axis運行需要哪些jar文件

          對Axis解包后,將axis-1_1/webapps/axis/WEB-INF/lib/目錄下的jar文件復制到/usr/local/apache/htdocs/WEB-INF/lib目錄下(Web應用程序的目錄)。應包括以下jar文件。

          axis-ant.jar

          axis.jar

          commons-discovery.jar

          commons-logging.jar

          jaxrpc.jar

          log4j-1.2.8.jar

          saaj.jar

          wsdl4j.jar
          2.2 Axis使用注意事項
          2.2.1 獲取WSDL文件

          Axis支持用戶通過網(wǎng)絡方式,從已發(fā)布WEB服務的機器上獲取WEB服務描述文件WSDL。用戶只需簡單在IE地址欄輸入如下格式訪問鏈接即可:

          http://webappIp[/webapp]/services/WebServiceName?wsdl

          其中:

          webAppIp:運行WEB服務機器的地址。

          [/webapp]:運行Axis WEB服務的Web應用名;如果應用使用跟目錄,則不需要

          services/WebServiceName:WEB服務定位路徑,類似Servlet路徑;其中WebServiceName為定義的Web服務接口名稱。

          用戶將訪問獲的文件直接保存,即可獲取對應WEB服務的WSDL描述文件。
          2.2.2 參數(shù)類型定義(輸入、輸出參數(shù))

          如果用戶希望使用函數(shù)定義中的輸出參數(shù)獲取響應結(jié)果時,自動生成的WSDL文件無法滿足,必須手動對自動生成的WSDL文件進行修改。

          如定義java Interface接口如下:

          int queryUser(long type,User[] users) ;

          則使用java2WSDL生成的WSDL如下:

          為了將User[]作為輸出參數(shù),必須修改自動生成的WSDL文件,在QueryUserResponse返回消息中,添加User[]參數(shù)定義,告知Axis在WSDL2java處理中,將User[]作為輸入/輸出參數(shù)處理。

          2.2.3 server-config.wsdd

          Axis會在WEB應用程序的WEB-INF/目錄下自動生成一個名字為server-config.wsdd的xml文件,其中記錄了已部署的WEB服務。每部署一個新的WEB服務時,Axis都會將新服務的描述信息加入到server-config.wsdd中。

          如果需要在Web服務器啟動時,自動加載WEB服務,只需將server-config.wsdd與WEB應用描述文件web.xml一并放置在WEB-INF目錄下即可。

          server-config.wsdd中的內(nèi)容可以手工更改獲取,也可通過發(fā)布獲取自動生成的文件。

          a) 將WEB服務發(fā)布后,從WEB應用的WEB-INF目錄下,獲取自動生成的server-config.wsdd文件。

          b) 手工更改時,將deploy.wsdd文件中的…中的內(nèi)容直接拷貝,粘貼到原始server-config.wsdd文件中單獨行即可。
          2.2.4 如何將Axis集成到自己的Web應用中。

          Axis是以Servlet的方式運行的,而Tomcat的作用相當于Servlets容器(Container),因此只要配置得當,就可以使Axis在Tomcat環(huán)境中運行,這一點也適用于Tomcat以外的其它應用服務器。在Tomcat中配置Axis的方法如下。

          將axis-1_1/webapps/axis/WEB-INF/web.xml中的Servlet配置項復制到自己Web應用描述文件web.xml中對應位置上。通常應包括以下內(nèi)容。

          在Servlet定義與servlet-mapping定義間,將本W(wǎng)EB應用的Servlet定義加入。

          AxisServlet

          Apache-Axis Servlet

          org.apache.axis.transport.http.AxisServlet

          AdminServlet

          Axis Admin Servlet

          org.apache.axis.transport.http.AdminServlet

          100

          SOAPMonitorService

          SOAPMonitorService

          org.apache.axis.monitor.SOAPMonitorService

          SOAPMonitorPort

          5001

          100

          AxisServlet

          /axis/servlet/AxisServlet

          AxisServlet

          *.jws

          AxisServlet

          /services/*

          SOAPMonitorService

          /SOAPMonitor

          wsdl

          text/xml

          xsd

          text/xml

          2.2.5 Axis提供了哪些開發(fā)工具

          Apache Axis提供了WSDL2Java和Java2WSDL兩個開發(fā)工具。

          WSDL2Java利用已知的WSDL文件生成服務端和客戶端代碼。該WSDL文件可以是由合作伙伴提供的,也可以是利用Java2WSDL生成的。Java2WSDL根據(jù)已有的Java類文件生成WSDL文件,Java類文件可以是接口類文件,并不需要實現(xiàn)細節(jié)。

          此外Axis還提供了SoapMonitorApplet和TCPMon工具,可用于監(jiān)測Web服務。



          1 如何開發(fā)Web服務的服務端和客戶端代碼
          1.1 生成或取得WSDL文件

          Java2WSDL是Axis提供的利用Java類文件得到WSDL文件的工具。類文件可以使用接口文件編譯生成。

          生成WSDL文件以后,就可以利用Axis提供的WSDL2Java工具生成Web服務的服務端代碼和客戶端代碼了

          注意事項 :

          WSDL文件也可以由合作伙伴提供。這種情況下合作伙伴往往是Web服務的提供者或標準接口的制定者,開發(fā)者只要按照既定的WSDL文從件生成客戶端或服務端代碼就可以了。

          1.2 開發(fā)客戶端

          在開發(fā)客戶端時,WEB接口定義文件WSDL一般已經(jīng)提供,或者可以通過Internat獲取。如果未提供一般也提供了接口描述文檔,詳細描述了接口輸入、輸出參數(shù)定義,據(jù)此我們可以聲明Interface接口,通過Aixs提供的java2WSDL生成WSDL文件。

          下面我們假定WSDL文件已經(jīng)提供;并且我們假定讀者對eclipse、ant已經(jīng)有一定了解。

          WSDL2Java工具用于從WSDL文件生成客戶端存根(stub)代碼,服務端框架(skeleton)代碼以及WSDL中的數(shù)據(jù)類型文件(生成與之對應的Java代碼)。開發(fā)人員只需向框架代碼中補充相關的業(yè)務邏輯代碼即可得到完整的Web服務代碼,因此該工具極大地減輕了開發(fā)人員的編碼負擔。

          axis_ant.jar包中已經(jīng)定義了Axis集成Ant的相關Ant任務定義。任務定義在axis-tasks.properties中

          #properties file for taskdefing the public Axis taskdefs

          axis-wsdl2java=org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask

          axis-java2wsdl=org.apache.axis.tools.ant.wsdl.Java2WsdlAntTask

          axis-admin=org.apache.axis.tools.ant.axis.AdminClientTask

          Ant任務名
            

          對應Axis提供的工具
            

          備注

          axis-wsdl2java
            

          WSDL2java
            

          axis-java2wsdl
            

          Java2WSDL
            

          axis-admin
            

          AdminClient
            

          1. 假定應用工程目錄結(jié)構如下:

          │ build.properties

          │ build.xml

          │ myAxis.wsdl

          ├─bin

          └─src

          2. build.properties文件內(nèi)容如下:

          axis.home = D:\\java\\axis\\axis-1_2beta

          wsdl.file = myAxis.wsdl

          namespace.service = urn:MyAxis

          package.service = com.MyAxis.client

          3. Ant文件build.xml內(nèi)容如下:

          定義Axis包所在類路徑-->

          從axis-ant.jar包中,引入Axis的Ant任務定義-->

          classpathref="axis.classpath" />

          依據(jù)WSDL文件,生成客戶端代碼-->

          url="${basedir}/${wsdl.file}"

          deployscope="Request"

          output="${generated.path.src}"

          serverside="false"

          skeletondeploy="false"

          testcase="true"

          noimports="false"

          >

          1.1 開發(fā)服務端

          開發(fā)服務端程序的一般步驟如下:

          l 根據(jù)接口定義,定義java Interface接口。

          l 根據(jù)interface接口文件,使用java2WSDL生成WEB服務描述文件

          l 根據(jù)WSDL文件,使用WSDL2java生成對應的服務端代碼

          l 修改自動生成的實現(xiàn)代碼類[webapp]SoapBindingImpl.java,完成接口具體操作。

          l 考慮到WEB服務為系統(tǒng)對外門戶,具體業(yè)務邏輯可能分模塊實現(xiàn),建議考慮參考門面模式完成interface定義;在服務端具體實現(xiàn)時,WEB服務接口部分向邏輯提供接口,由邏輯實現(xiàn)組件完成具體的邏輯操作。WEB服務部分僅完成SOAP協(xié)議解封裝等工作。

          1. 假定工程路徑如下:

          ├─conf

          ├─generated

          ├─source

          ├─src

          └─WebRoot

          ├─META-INF

          └─WEB-INF

          └─lib

          2. build.properties Ant腳本使用屬性

          wsdl.file = myAxis.wsdl

          ########接口文件com.myaxis.MyAxis.java;供java2WSDL使用#####

          wsi.interface = com.myaxis.MyAxis

          location = http://localhost/CmsWsi/services/CmsWsi

          ########期望生成的接口定義包與命名空間對應關系;供WSDL2java使用###

          namespace.service = http://com. myaxis.MyAxis/1.00

          package.service = com.myaxis.server

          ########期望生成的接口相關消息類與命名空間對應關系;供WSDL2java使用###

          namespace.service.msg = http://com.myaxis.msg

          package.service.msg = com.myaxis.server.msg

          ########WEB容器定義,共AdminClient發(fā)布、注銷WEB服務使用###

          target.port = 80

          target.server = localhost

          target.appname = MyAxis

          servletpath.admin = services/AdminService

          ########在ANT腳本中采用命令行方式時,發(fā)布調(diào)用的AdminClient位置##

          location.admin = http://localhost/MyAxis/services/AdminService

          3. build.xml

          加載build.propertis定義-->

          容器下的類路徑,Axis相關jar已拷貝到對應目錄下-->

          引入Axis的Ant任務定義-->

          classpathref="axis.classpath" />

          初試化,構造WSDL2java生成代碼路徑,-->

          依據(jù)java Interface定義,生成WSDL定義文件-->

          location="${location}"

          namespace="${namespace.service}"

          output="${generated.path}/${wsdl.file}"

          style="RPC"

          >

          根據(jù)WSDL文件,生成WEB服務的服務器端源碼;考慮到接口更改,版本管理的方便,生成代碼不直接導向src目錄;第一次運行后,需要手工將代碼拷貝到src;每次修改接口后,必須清空生成源目錄,通過比較工具修改src目錄下的源文件,否則Axis判斷[webapp]SoapBindingImpl.java已存在不會進行更新。-->

          url="${basedir}/${wsdl.file}"

          deployscope="Request"

          output="${generated.path.src}"

          serverside="true"

          skeletondeploy="false"

          testcase="true"

          noimports="false"

          >

          拷貝Web服務發(fā)布、注銷腳本,deploy.wsdd和undeploy.wsdd-->

          發(fā)布WEB服務到WEB容器,Axis在WEB-INF/下自動生成server-config.wsdd-->

          腳本方式發(fā)布服務-->

          命令行方式發(fā)布服務-->

          fork="true"

          failonerror="true">


          posted on 2005-08-12 22:46 笨笨 閱讀(1050) 評論(0)  編輯  收藏 所屬分類: J2EEALL
          主站蜘蛛池模板: 会同县| 鹿邑县| 滦南县| 溧阳市| 潮州市| 岳阳县| 资源县| 琼海市| 临江市| 当雄县| 华安县| 广州市| 基隆市| 阜宁县| 建宁县| 嵊泗县| 正宁县| 丁青县| 松溪县| 伊春市| 广水市| 邹平县| 滕州市| 界首市| 含山县| 通辽市| 玉树县| 江门市| 土默特右旗| 定边县| 清丰县| 扎兰屯市| 南投市| 襄城县| 凤山市| 兴化市| 伊宁县| 忻州市| 武夷山市| 永川市| 波密县|