kapok

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            455 隨筆 :: 0 文章 :: 76 評(píng)論 :: 0 Trackbacks
          <2005年8月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(28)

          隨筆分類

          隨筆檔案

          Corba

          EAI

          Online Document

          Open Source

          Portal

          RSS Links

          Weblogic

          不錯(cuò)的鏈接

          工具集合

          數(shù)據(jù)倉庫相關(guān)

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          http://www.cjsdn.net/post/view?bid=5&id=151014&sty=1&tpg=1&age=0

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



          1 介紹

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

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

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

          整個(gè)AXIS項(xiàng)目包括以下幾個(gè)部分:

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

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

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

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

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

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

          4. 其他

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

          AXIS目前版本支持的標(biāo)準(zhǔn)是: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運(yùn)行需要哪些jar文件

          對(duì)Axis解包后,將axis-1_1/webapps/axis/WEB-INF/lib/目錄下的jar文件復(fù)制到/usr/local/apache/htdocs/WEB-INF/lib目錄下(Web應(yīng)用程序的目錄)。應(yīng)包括以下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使用注意事項(xiàng)
          2.2.1 獲取WSDL文件

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

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

          其中:

          webAppIp:運(yùn)行WEB服務(wù)機(jī)器的地址。

          [/webapp]:運(yùn)行Axis WEB服務(wù)的Web應(yīng)用名;如果應(yīng)用使用跟目錄,則不需要

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

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

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

          如定義java Interface接口如下:

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

          則使用java2WSDL生成的WSDL如下:

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

          2.2.3 server-config.wsdd

          Axis會(huì)在WEB應(yīng)用程序的WEB-INF/目錄下自動(dòng)生成一個(gè)名字為server-config.wsdd的xml文件,其中記錄了已部署的WEB服務(wù)。每部署一個(gè)新的WEB服務(wù)時(shí),Axis都會(huì)將新服務(wù)的描述信息加入到server-config.wsdd中。

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

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

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

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

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

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

          在Servlet定義與servlet-mapping定義間,將本W(wǎng)EB應(yīng)用的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兩個(gè)開發(fā)工具。

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

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



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

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

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

          注意事項(xiàng) :

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

          1.2 開發(fā)客戶端

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

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

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

          axis_ant.jar包中已經(jīng)定義了Axis集成Ant的相關(guān)Ant任務(wù)定義。任務(wù)定義在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任務(wù)名
            

          對(duì)應(yīng)Axis提供的工具
            

          備注

          axis-wsdl2java
            

          WSDL2java
            

          axis-java2wsdl
            

          Java2WSDL
            

          axis-admin
            

          AdminClient
            

          1. 假定應(yīng)用工程目錄結(jié)構(gòu)如下:

          │ 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任務(wù)定義-->

          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ā)服務(wù)端

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

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

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

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

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

          l 考慮到WEB服務(wù)為系統(tǒng)對(duì)外門戶,具體業(yè)務(wù)邏輯可能分模塊實(shí)現(xiàn),建議考慮參考門面模式完成interface定義;在服務(wù)端具體實(shí)現(xiàn)時(shí),WEB服務(wù)接口部分向邏輯提供接口,由邏輯實(shí)現(xiàn)組件完成具體的邏輯操作。WEB服務(wù)部分僅完成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

          ########期望生成的接口定義包與命名空間對(duì)應(yīng)關(guān)系;供WSDL2java使用###

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

          package.service = com.myaxis.server

          ########期望生成的接口相關(guān)消息類與命名空間對(duì)應(yīng)關(guān)系;供WSDL2java使用###

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

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

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

          target.port = 80

          target.server = localhost

          target.appname = MyAxis

          servletpath.admin = services/AdminService

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

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

          3. build.xml

          加載build.propertis定義-->

          容器下的類路徑,Axis相關(guān)jar已拷貝到對(duì)應(yīng)目錄下-->

          引入Axis的Ant任務(wù)定義-->

          classpathref="axis.classpath" />

          初試化,構(gòu)造WSDL2java生成代碼路徑,-->

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

          location="${location}"

          namespace="${namespace.service}"

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

          style="RPC"

          >

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

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

          deployscope="Request"

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

          serverside="true"

          skeletondeploy="false"

          testcase="true"

          noimports="false"

          >

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

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

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

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

          fork="true"

          failonerror="true">


          posted on 2005-08-12 22:46 笨笨 閱讀(1050) 評(píng)論(0)  編輯  收藏 所屬分類: J2EEALL
          主站蜘蛛池模板: 延庆县| 徐州市| 张北县| 固始县| 阿巴嘎旗| 白河县| 天门市| 阿坝县| 溧阳市| 海阳市| 广州市| 榆中县| 靖边县| 府谷县| 兴义市| 从江县| 屏山县| 高要市| 宣汉县| 湖口县| 静乐县| 马边| 苍溪县| 崇明县| 和硕县| 普安县| 天镇县| 宁南县| 抚顺县| 冕宁县| 巴马| 靖宇县| 清远市| 彰化县| 盱眙县| 荥阳市| 安仁县| 巧家县| 新龙县| 上高县| 长岛县|