axiswebservice開發(fā)過程_第1頁
axiswebservice開發(fā)過程_第2頁
axiswebservice開發(fā)過程_第3頁
axiswebservice開發(fā)過程_第4頁
axiswebservice開發(fā)過程_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一:服務器端:先簡短的說一下 Web Service的概念,簡略的總結一下:所謂 Web Service 就是客戶端以標準的SOAFffi息將服務請求發(fā)給服務提供者,不論服務提供者用 什么樣的技術,Java、EJR或者.NET執(zhí)行相應的程序得到結果,然后將結果以 SOAP!息返回給服務請求者。下面以Axis為例,創(chuàng)建一個簡單的 Web Service。首先到上去下載 最新的axis版本。最新版本是的。下載之后觀察其目錄,lib下就是所要用到 的所有jar包了。這里少2個jar包,分別是和,需要單獨下載。好了,現在我們創(chuàng)建一個 Web Service項目,命名為webservice_begin。

2、首先把lib目錄下的所有jar包拷貝到 WEB-IN印勺lib目錄 下。ok,現在我們創(chuàng)建接口和實現類。代碼如下Java 代碼 O1. package server;2.3. publicinterfaceHello 4.5. public String getHello(String name);6.7. Java代碼-眾仁1. package server;2.3. public class HelloService implements Hello 4.5.public String getHello(String name) 6. return "hello, "

3、+ name;7. 8. 接著我們修改下文件。修改文件的目的是為創(chuàng)建一個Axis的Servlet。AxisServlet最核心的實現類為,然后定義一個Servlet的請求路徑為services/*客戶端就可以通過這個路徑發(fā)布 SOAP勺請求消息了 ,下面是修改后的文件 Java 代碼 0 mC:1. <xml version=""encoding="UTF-8">2. <web-app xmlns="" xmlns:xsi=""version=""xsi:schemaLocat

4、ion="">3.4. <servlet>5. <servlet-name>AxisServlet</servlet-name>6. <servlet-class>7. </servlet>8.9. <servlet-mapping>10. <servlet-name>AxisServlet</servlet-name>11. <url-pattern>/servlet/AxisServlet</url-pattern>12. </servle

5、t-mapping>13.14. <servlet-mapping>15. <servlet-name>AxisServlet</servlet-name>16. <url-pattern>*.jws</url-pattern>17. </servlet-mapping>18.19. <servlet-mapping>20. <servlet-name>AxisServlet</servlet-name>21. <url-pattern>/services/*</

6、url-pattern>22. </servlet-mapping>23. </web-app>接下來,要配置wsdd文件。將定義服務的名稱,具體的實現類,以及發(fā)布的方 法和屬性等。將其放在src目錄下,也就是當前應用的classpath路徑下,具體 內容如下Java 代碼 -1. <xml version="" encoding="UTF-8">2. <deployment xmlns=""3. xmlns:java="">4. <handlertype

7、="java:"name="URLMapper”/>5.6. <servicename="hello"provider="java:RPC”>7. <parameter name="className" value=""/>8. <parameter name="allowedMethods" value="getHello”/>9. </service>10.11. <transportname=&quo

8、t;http">13.12. <requestFlow><handler type="URLMapper”/>14. </requestFlow>15. </transport>16.</deployment>好了,現在我們就可以發(fā)布Web Service服務了。 部署成功后,啟動你的應用服務器,在地址欄下輸入,如果沒有錯誤提示,恭喜你,你的 Web Service已經發(fā)布成功了。點擊 wsdl, 還可以看到具體的wsdl的配置信息。這里面主要定義了以下內容:本例子的目標空間和命名空間、輸入和輸出變量的 結構

9、類型、請求和響應的消息、 wsdl的接口 portType、接口操作(Operation) 綁定的傳輸協(xié)議,具體內容如下Java代碼Q1. <xml version="" encoding="UTF-8" >2. - <wsdl:definitionstargetNamespace=""xmlns:apachesoap=""xmlns:impl="" xmlns:intf="" xmlns:soapenc="" xmlns:wsdl=&q

10、uot;" xmlns:wsdlsoap="" xmlns:xsd="">3. - <!-4. WSDL created by Apache Axis version:5. Built on Apr 22,2006 (06:55:48 PDT)6.7. ->8. - <wsdl:message name="getHelloRequest">9. <wsdl:part name="name"type="soapenc:string" />10.

11、</wsdl:message>11. - <wsdl:message name="getHelloResponse">12. <wsdl:part name="getHelloReturn"type="soapenc:string" />13. </wsdl:message>14. - <wsdl:portType name="HelloService">15. - <wsdl:operation name="getHello"

12、parameterOrder="name">16. <wsdl:input message="impl:getHelloRequest" name="getHello Request" />17. <wsdl:output message="impl:getHelloResponse"name="getHelloResponse" />18. </wsdl:operation>19. </wsdl:portType>20. - <wsd

13、l:binding name="helloSoapBinding" type="impl:HelloServ ice">21. <wsdlsoap:binding style="rpc" transport="" />22. -<wsdl:operation name="getHello">23. <wsdlsoap:operation soapAction="" />24. -<wsdl:input name="ge

14、tHelloRequest">25. <wsdlsoap:body encodingStyle="" namespace="" use="encode d" />26. </wsdl:input>27. - <wsdl:output name="getHelloResponse">28. <wsdlsoap:body encodingStyle="" namespace="" use="encoded&quo

15、t;/>29. </wsdl:output>30. </wsdl:operation>31. </wsdl:binding>32.-<wsdl:service name="HelloServiceService">33.-<wsdl:port binding="impl:helloSoapBinding”name="hello">34. <wsdlsoap:address location=""/>35. </wsdl:port>36.

16、 </wsdl:service>37. </wsdl:definitions>到這里,服務器端的工作算是完成了。下面我們寫一個客戶端程序來試著調用一下??蛻舳顺绦蚩梢允且粋€簡單的javaProject。調用代碼如下Java 代碼 口1. package ;2.3. import4.5. import6. import7. import8.9.10. publicclass WebServiceTest 11.12. Test public void testInvoke()throws Exception用AdminClient工具利用wsdd發(fā)布。生成WSDL勺方式也

17、有兩種:1 . 直接在服務的 url 后面加 "wdsl2 .使用 Java2WSDIX具。然后開發(fā)一個web服務的方式也有好多種,選擇哪一種就要看個人喜好了。不過我還是推薦下面的模式:1.編寫服務接口,一個java接口&gt;2. 使用Java2WSD生成wsdl文件。&gt;3.使用 WSDL2Jav生成服務端/客戶端 綁定。 4. 修改生成的 Impl java 代碼的內容,完成服務。搞定收工。以前我們已經介紹了前兩種方式,我們這里主要談談使用Java2WSDL勺使用。Java2WSDL,口 WSDL2Javai!兩個方便開發(fā)web服務的工具。下面的文章主要描

18、述了如何從一個java 接口創(chuàng)建一個web 服務。第一步:提供一個java 接口,或者是類。首先,編寫一個描述web服務的java接口(或者是類),例如:package/* * Interface describing a web service to set and get Widget prices.*/ public interface WidgetPrice public void setWidgetPrice(String widgetName, String price);public String getWidgetPrice(String widgetName);第二步:使用J

19、ava2WSDlX具從上面的接口創(chuàng)建一個 wsdl文件:% java -o-l""-n "urn:Example6" -p"" "urn:Example6"其中 :指出輸出 wsdl 文件的名字。指出這個服務的地址.目標 wsdl 文件的namespace。4-p 指出java包到namespace的映射??梢杂卸鄠€映射。5.描述web服務的java的接口或者是類。輸出的 WSDLt檔將包含了相應的 Wsdl: types,messages,portType,binding,和支持 SOAPrpc 的服務描述,編碼

20、web 服務。如果你的提供的接口方法使用了其他類的引用,Java2WSD會生成相應的xml type來描述這個類,包括其中的 內隱類和嵌套的所以的類。這個工具支持 JAX-RPCM雜的類型 (bean),arrays,enumeration, Holder 類,繼承等。第三步:使用WSDL2Jav蒯建綁定。使用上面生成的wsdl文件去創(chuàng)建對應的服務端/客戶端的綁定到web服務上。% java -o . -d Session -s -S true-Nurn:Example6將會創(chuàng)建一下文件:* : 這個是服務的實現, 也就是我們接口的實現類。 你可以通過修改這 個類完成服務的實現。* : 新的接

21、口文件,包含相應的 .* : java文件,客戶端的服務接口。* : java文件,客戶端的服務實現。* : 服務端 skeleton.* : 客戶端 stub.* : 發(fā)布描述* :解除發(fā)布* (data types):文件,是 web服務必須的其他的type和holders 。本例子并沒有用的。至此,你知道要開發(fā)一個服務器/ 客戶端的所有的文件了。AXIS 發(fā)布 WebServiceWebServiceServletApacheSOAP 應用月艮務器axis 版本是 apache axis-bin-1_3 ,可以至U apache 網站下載。1 .環(huán)境變量設置AXIS_HOME即解壓的目錄

22、(我的是在 F:opensourceaxis-1_2 )AXIS_LIB即 AXIS_HOME%lib2 .導入jar包將axisa解壓縮后,復制lib目錄下列jar包到應用目錄的lib目錄:1.5.13修改將 axis 需要的 servlet 復制到應用的文件里面,注意順序。重新啟動服務,可以訪問“ /servlet/AxisServlet ”試一下,比如:<servlet id="Servlet_12"></servlet><servlet-name></servlet-name>AxisServlet<displa

23、y-name></display-name>Apache-Axis Servlet<servlet-class></servlet-class><servlet id="Servlet 13"></servlet><servlet-name></servlet-name>AdminServlet<display-name></display-name>Axis Admin Servlet<servlet-class></servlet-clas

24、s><load-on-startup></load-on-startup>100<servlet id="Servlet_14"></servlet><servlet-name></servlet-name>SOAPMonitorService<display-name></display-name>SOAPMonitorService<servlet-class></servlet-class><init-param></init

25、-param><param-name></param-name>SOAPMonitorPort <param-value></param-value>5001<load-on-startup></load-on-startup>100<servlet-mapping id="ServletMapping_12"></servlet-mapping><servlet-name></servlet-name>AxisServlet<url-patt

26、ern></url-pattern>/servlet/AxisServlet<servlet-mapping id="ServletMapping_13"></servlet-mapping><servlet-name></servlet-name>AxisServlet<url-pattern></url-pattern>*.jws<servlet-mapping id="ServletMapping_14"></servlet-mapping&

27、gt;<servlet-name></servlet-name>AxisServlet<url-pattern></url-pattern>/services/*<servlet-mapping id="ServletMapping_15"></servlet-mapping><url-pattern></url-pattern>/SOAPMonitor4添加服務將文件復制到發(fā)布應用的 WEB-INF目錄下,這就是AXIS的配置文件,以后所有的 服務發(fā)布描述都會在里面找到。如果還

28、沒有文件,可以先寫一個發(fā)布描述文件,然后用 axis 來生成,以后需要發(fā)布新的服務,直接往里面添加即可。比如有一個類, 里面有 sayHello ( String msg) 方法, 想把它發(fā)布webservices ,先寫發(fā)布文件文件,即SOA用艮務發(fā)布描述文件<deployment xmlns="&lt;a href=" ="" "" wsdd="" axis=""></deployment>" xmlns:java="">&

29、lt;service name="HelloWorld" provider="java:RPC"></service><parameter value="HelloWorld" name="className"></parameter><parameter value="sayHello" name="allowedMethods"></parameter>進入 dos 窗口,執(zhí)行下列命令:java -cp %

30、AXISCLASSPATH%即可生成文件。如果想發(fā)布新的服務, 直接往里面添加 service 描述, 比如想把知識管理模塊導入知識功能發(fā)布成webservices ,對應的程序文件是需要發(fā)布的方法是importKm(String kmXmlStr) ,將此文件編譯成 class 后,放到發(fā)布系統(tǒng)的相應目錄下,往添加下列描述:<service name="ImportKm" provider="java:RPC"></service><parameter value="" name="class

31、Name"></parameter><parameter value="importKm" name="allowedMethods"></parameter>重新啟動服務,一個新的 webservices 就發(fā)布成功了,如果系統(tǒng)發(fā)布地址是,調用的 url 是: 給服務添加 HandlerJ2EE Web服務中的Handler技術特點非常像 Servlet技術中的Filter。我們知道,在Servlet中,當一個HTTP©達服務端時,往往要經過多個Filter 對請求進行過濾,然后才到達提供服

32、務的 Servlet ,這些 Filter 的功能往往是對請求進行統(tǒng)一編碼,對用戶進行認證,把用戶的訪問寫入系統(tǒng)日志等。相應的, Web服務中的 Handler 通常也提供一下的功能:對客戶端進行認證、授權;把用戶的訪問寫入系統(tǒng)日志;對請求的SOA月肖息進行力口密,解密;為 Web Services 對象做緩存。SOAPB息Handler能夠訪問代表RPC青求或者響應的SOAPfi息。在JAX-RP或術中,SOA稍息Handler可以部署在服務端,也可以在客戶端使用。至于如何開發(fā) handler , 可以到網上去搜索陳亞強寫的 使用 Handler 來增強 Web 服務的功能,人家寫的比較好,

33、我就不在這廢話了。比如服務必須有用戶名和密碼才能訪問,可以添加 axis 自帶的檢驗認證handler ,用戶名和密碼存放在WEB-INF下的文件中。handler分別是:第二種發(fā)布方式:1、將編譯成,放到 TOMCAT_HOME%webappsaxisWEB-INFclasses2、ft %TOMCAT_HOME%webappsaxisWEB-INF®JCn,即 SOAPK務發(fā)布描 述文件<deployment "" wsdd="" axis=""></deployment><rpc>&

34、lt;br><parameter></parameter><br><parameter></parameter><br><br><b r><br> 在 DOS下轉換目錄到 TOMCAT_HOME%webappsaxisWEB-INF令:<br><br>java-cp%AXISCLASSPATH能發(fā)現目錄下多了一個文件,這就是 AXIS的配置文件,以后所有的服務發(fā)布描述都會在里面找到。 (當然,你可以直接修改它, 不用再寫) 然后打開瀏覽器, 你就會看到你的服

35、務已發(fā)布 <br><br> 同樣用客戶端程序訪問一下:(注意和上邊的差別!)<br><br><br><br>""+"8080"+"/axis/services/HelloWorld" ws</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/s

36、ervices/*</url-pattern></servlet-mapping>第一個是制定AxisServlet 的類是必須的,余下的是配置servlet mapping 的,可根據需要進行修改,比如不需要對*.jws 做 mapping 的時候就可以去掉相應的部分。完成了上邊的必須配置我們就有兩種方式來發(fā)布了:1、 動態(tài)發(fā)布, 直接把 Calculator 的 java 文件復制到 webroot 下, 把更名為, 然后通過 訪問就可以 ,通過 就可以看到相應的 wsdl 。這種方式調試起來比較麻煩,而且我再測試的時候也不能帶package 的信息,而且一些高級的

37、配置無法實施,不建議采用。2、靜態(tài)發(fā)布,就是通過配置文件發(fā)布,這時候我們類的編譯和普通的web方式沒有不同,只是在 web-inf 下多了一個配置文件,默認的名稱為<xml version="" encoding="UTF-8"><deployment name="defaultClientConfig"xmlns:java=""xmlns:handler="" xmlns=""><globalConfiguration name="d

38、efaultClientConfig"><requestFlow name="RequestFlow1" type=""><handler name="Handler1" type="java:"><parameter name="scope" value="session"/></handler><handler name="Handler2" type="java:&quo

39、t;><parameter name="scope" value="request"/><parameter name="extension" value=".jwr"/></handler></requestFlow></globalConfiguration><handler name="URLMapper" type="java:"/><handler name="LocalR

40、esponder" type="java:"/><handler name="Authenticate" type="java:"/><transport name="http" type=""><requestFlow name="RequestFlow1" type=""><handler name="Handler1" type="URLMapper"/

41、><handler name="Handler2" type="java:"/></requestFlow></transport><transport name="local" type=""><responseFlow name="ResponseFlow1" type=""><handler name="Handler1" type="LocalResponder&qu

42、ot;/></responseFlow></transport><service name="AdminService" type="" provider="java:MSG"><parameter name="allowedMethods" value="AdminService"/><parameter name="enableRemoteAdmin" value="false"/>&l

43、t;parameter name="className" value=""/><namespace></service><service name="Version" type="" provider="java:RPC"><parameter name="allowedMethods" value="getVersion"/><parameter name="className&quo

44、t; value=""/></service>style="rpc"<service name="Calculator" type="" provider="java:RPC"use="encoded"><parameter name="scope" value="Request"/><parameter name="className" value="&qu

45、ot;/> <parameter name="allowedMethods" value="*"/> <namespace></service> <service name="OrderProcessor" provider="java:RPC"><parameter name="className" value=""/><parameter name="allowedMethods"

46、 value="*"/><beanMapping qname="myNS:Order" xmlns:myNS="urn:BeanService"languageSpecificType="java:"/></service></deployment>其中要發(fā)布的每個service 都需要加上一個service 的節(jié)點描述,其他多余的 servie 節(jié)點可以刪除的,這樣重啟 tomcat 后,我們就可以以 來訪問這個service 了,同樣以 訪問到它的 wsdl 描述文件。

47、客戶端一、 Axis 安裝 1 、環(huán)境 ,Tomcat2、到網站下載 Axis 安裝包3、解壓縮安裝包,將Axis_UNZIP_PATHAxis-versionwebapps 下的 Axis 包拷貝到下,以下約定 Axis_HOME為該 TOMCAT_HOMEwebappsAxi招錄4、啟動tomcat, 訪問 檢查安裝是否成功5、以上步驟執(zhí)行成功,可以開發(fā)webservice 例子了Axis 支持三種 web service 的部署和開發(fā),分別為: 1、 Dynamic Invocation Interface( DII) 2 、 Stubs 方式 3 、 Dynamic Proxy 方式下

48、面分別舉例說明 :二、 編寫 DII(Dynamic Invocation Interface ) 方式 web服務1. 編寫服務端程序HelloClientpublic class HelloClientpublic String getName(String name)return "hello "+name;2、將源碼拷貝到 Axis_HOME下,重命名為3、訪問連接,頁面顯示Axis 自動生成的 wsdl4、編寫訪問服務的客戶端importimportimportimportimportimportpublic class SayHelloClient2public

49、 static void main(String args)tryString endpoint =;Service service = new Service();Call call = null;call = (Call) ();(new QName("""getName");(newString ret = (String) (new Object"zhangsan");"return value is " + ret);catch (Exception ex)();三、編寫 Dynamic Proxy 方式

50、訪問服務HelloClient1、編寫部署服務端程序,同上邊DII 方式,本次仍使用上邊部署的2、編寫代理接口public interface HelloClientInterfaceextendspublic String getName(String name)throws3、編寫并執(zhí)行客戶端程序importimportimportimportpublic class TestHelloClientpublic static void main(String args)tryString wsdlUrl =;String nameSpaceUri =;String serviceName

51、= "HelloClientService"String portName = "HelloClient"();Service afService =(new URL(wsdlUrl),new QName(nameSpaceUri, serviceName);HelloClientInterface proxy = (HelloClientInterface)(new QName(nameSpaceUri, portName), ;("return value is "+("john") ) ;catch(Exce

52、ption ex)() ;四、編寫wsdd發(fā)布web服務,編寫stub client 訪問web服務1、編寫服務端程序server, ,編譯package server;public class SayHellopublic String getName(String name)return "hello "+name;2. 編寫importimportimportimportimportpublic class LogHandlerextends BasicHandlerpublic void invoke(MessageContext msgContext)throws

53、 AxisFault/* Log an access each timewe get invoked.*/try Handler serviceHandler= ();Integer numAccesses =(Integer)("accesses");if (numAccesses = null)numAccesses = new Integer(0);numAccesses = new Integer() + 1);Date date = new Date();String result =date + ": service " +() +"

54、; accessed " + numAccesses + " time(s)."("accesses", numAccesses); catch (Exception e)throw (e);3、編寫wsdd 文件<deployment xmlns=""xmlns:java=""><handler name="print" type="java:LogHandler"/><service name="sayhello"

55、;provider="java:RPC"><requestFlow><handler type="print"/></requestFlow><parameter name="className"value=""/><parameter name="allowedMethods"value="*"/></service></deployment>3 、 將 編 譯 后 的 文 件 拷 貝

56、 到 Axis_HOME/WEB-INF/classes 下 , 如D:tomcatwebappsAxisWEB-INFclasses4、發(fā)布服務:java5、生成 client stub 文件a: 方式 1將拷貝到Axis_HOME/T,重命名為,執(zhí)行下面的命令生存client stubjava-p client/Axis/services/wsdlb: 方式 2執(zhí)行如下命令生成java-/Axis/services/SayHello -nsayhello執(zhí)行如下命令生成client stubjava-p client生成的 stub client 文件列表為:6、編寫客戶端程序,編譯并執(zhí)行

57、public class SayHelloClientpublic static void main(String args)trySayHelloService service = new client.SayHelloServiceLocator();client = ();String retValue=("zhangsan");catch (Exception e)("Execution failed. Exception: " + e);您也可以寫<xml version="" encoding="UTF-8

58、"><deployment xmlns=""xmlns:java=""><globalConfiguration><parameter name="adminPassword" value="admin"/><parameter name=""value=""/><parameter name="sendXsiTypes" value="true"/><p

59、arameter name="sendMultiRefs" value="true"/><parameter name="sendXMLDeclaration" value="true"/><parameter name="" value="true"/><requestFlow><handler type="java:"><parameter name="scope" val

60、ue="session"/></handler><handler type="java:"><parameter name="scope" value="request"/><parameter name="extension" value=".jwr"/></handler></requestFlow></globalConfiguration><handler name=&qu

61、ot;LocalResponder" type="java:"/><handler name="URLMapper" type="java:"/><handler name="Authenticate" type="java:"/><service name="sayhello" provider="java:RPC"><requestFlow><handler type="p

62、rint"/></requestFlow><parameter name="className" value=""/><parameter name="allowedMethods" value="*"/></service><transport name="http"><requestFlow>handler type="URLMapper"/><handler type="java:"/></requestFlow></transport><transport name="local"><resp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論