使用SOAP開發(fā)java web服務--Axis開發(fā)方案 - -
Tag: java web Axis
本文的預定讀者首先要對j2ee有所了解,,熟悉xml,,tomcat等基本內容,本文主要是簡單介紹一下web服務的基本內容,,怎樣在java web開發(fā)中構建SOAP服務: 一,、SOAP(Simple Object Access Protocol)簡單對象訪問協(xié)議,要了解SOAP,,首先就需要了解分布式計算的由來,,隨著下一代的分布式計算體系web服務的出現,SOAP成為了創(chuàng)建和調用通過網絡發(fā)布的應用程序的實際通信標準,。SOAP類似傳統(tǒng)的二進制協(xié)議IIOP(CORBA)和JRMP(RMI),,但它不采用二進制數據表示法,而是采用使用XML的,,基于文本的數據表示法,。 通過XML表示法,SOAP定義了一種小型有線連接協(xié)議和編碼格式,,以表示數據類型,、編程語言和數據庫,,還可以使用各種Internet標準協(xié)議作為其消息傳輸工具,還可以提供表示RPC和文檔驅動的消息交換等通信模型的約定,。請注意,W3C正致力于SOAP的研究,,http://www./2000/xp/Group/ ,,并得到了主流供應商的積極響應,以便對于基于XML的協(xié)議相關的重要任務達成共識,,并定義其關鍵要求和使用場景,。 SOAP1.2的基本規(guī)范定義了以下基本內容: 1)用于將XML文檔表示為結構化SOAP消息的語法和語義 2)在SOAP消息中表示數據的編碼標準 3)用于交換SOAP消息的通信模型 4)SOAP傳輸等底層協(xié)議的綁定 SOAP消息主要包括了信封頭,消息頭,,主體,,附件幾部分 一個簡單的SOAP消息表示: POST /StudentInfo HTTP/1.1 Host:anthropology. Content-Type: text/xml;charset="utf-8" Content-Length: 640 SOAPAction: "GetStudentInfo"
<SOAP-ENV:Envelop xmlns:SOAP-ENV="http://www./2001/06/soap-envelope" xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns:xsd="http://www./2001/XMLSchema" SOAP-ENV:encodingStyle="http://www./2001/06/soap-encoding"> <SOAP-ENV:Header> <person:mail xmlns:person="http://www./Header">xyz@ </SOAP-ENV:Header>
<SOAP-ENV:Body> <m:GetStudentInfo xmlns:m="http://www./jws.student.studentInfo"> <student_name xsi:type=‘xsd:string‘> Wang wen yin </student> </m:GetStudentInfo> </SOAP-ENV:Body> </SOAP-ENV:Envelop> 以上是1.2版本命名空間,1.1的命名空間 SOAP ENVELOPE:http://schemas./soap/envelop/ ,SOAP ENCODING: http://schemas./soap/encoding/ 關于SOAP編碼規(guī)范請參閱www./TR/xmlschema-2/ 定義的編碼值,,其他的一些規(guī)范可以上www. 上具體查看,。 二、以下從實際例子來學習,,這里我使用的是Apache的一個子項目Axis的具體例子,,便于深入了解soap的運行: 1)下載Axis的相關內容http://ws./axis/: 2)建立一個實例程序(遵守j2ee的web程序規(guī)范),如(WebServiceTest目錄) 把axis中l(wèi)ib文件夾的內容拷到你的WebServiceTest/WEB-INF/lib下,,同時上網下載xerces(下載地點:http://xml./xerces-j/)解釋器的包文件xerces.jar,,也拷到WebServiceTest/WEB-INF/lib文件夾下,(若要配置log4j,請把屬性文件log4j.properties拷到WebServiceTest/WEB-INF/classes文件夾下) 3)修改應用程序WebServiceTest/WEB-INF中的web.xml文件:主要servlet設置如下 <servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/servlet/TestServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
<servlet> <servlet-name>AdminServlet</servlet-name> <servlet-class> org.apache.axis.transport.http.AdminServlet </servlet-class> <load-on-startup>100</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AdminServlet</servlet-name> <url-pattern>/servlet/AdminServlet</url-pattern> </servlet-mapping> <mime-mapping> <extension>wsdl</extension> <mime-type>text/xml</mime-type> </mime-mapping> <mime-mapping> <extension>xsd</extension> <mime-type>text/xml</mime-type> </mime-mapping> 你現在可以在網址里輸入http://localhost/WebServiceTest/servlet/TestServlet 看到了嗎,?Axis是使用axis.jar包里的org.apache.axis.transport.http.AxisServlet對應用程序進行處理的,,基本配置就講到這里。 三,、接著我們來說Axis中的內核,。 1)不使用Tomcat引擎運行Axis。 先建立一個腳步文件,,對環(huán)境變量classpath進行設置要把lib下的那些包文件的路徑全都包括進去,,運行:java org.apache.axis.transport.http.SimpleAxisServer <port> 2)內部服務處理程序是org.apache.axis.providers.java.RPCProvider,標志出服務所需的方法,,然后提供從SOAP請求消息組成部分的參數,。 3)Axis的應用程序端管理功能: java org.apache.axis.client.AdminClient 就會列出參數,可供你選擇,。我們的例子是:java org.apache.axis.client.AdminClient -l http://localhost/WebserviceTest/servlet/TestServlet list 就會顯示出服務列表,,返回的是xml文件 4)wsdl2java應用程序可以把wsdl文件創(chuàng)建基于java的程序,如占位程序等 java org.apache.axis.wsdl.WSDL2java <url> Axis的基本內容說到這里 四,、具體例子 1)編寫邏輯程序,,簡單如:SoapTest.java public class SoapTest{ public String getStr(String name){ return "Hello,"+name; } } 2) 部署服務,編寫wsdd文件SoapTest_deploy.wsdd: <deployment name="SimapleTest" xmlns="http://xml./axis/wsdd/" xmlns:java="http://xml./axis/wsdd/providers/java" xmlns:xsd="http://www./2000/10/XMLSchema" xmlns:xsi="http://www./2000/10/XMLSchema-instance"> <service name="SoapTest" provider="java:RPC"> <parameter name="className" value="SoapTest"/> <parameter name="allowedMethods" value="getStr"/> </service> </deployment> 其中className參數是你的想部署的類名(全名),,allowedMethods是調用的服務的方法,,如果有多個方法的話可以用空格分開(如: <parameter name="allowedMethods" value="getStr getMoney"/>),當用*的時候表示全部。 好了現在準備部署了,,確保環(huán)境路徑classpath設置正確,,運行: java org.apache.axis.client.AdminClient -l http://localhost/WebserviceTest/servlet/TestServlet SoapTest_deploy.wsdd (這里不懂的話,請參考以上的說明) ok,,呵呵,,至此,我們已經完成了一個web服務的部署:測試http://localhost/WebServiceTest/servlet/TestServlet 看里面是否多了一個選擇SoapTest服務,? 如果不想要服務了那重新編寫一個wsdd文件,,內容改為: <deployment name="SimapleTest" xmlns="http://xml./axis/wsdd/" xmlns:java="http://xml./axis/wsdd/providers/java" xmlns:xsd="http://www./2000/10/XMLSchema" xmlns:xsi="http://www./2000/10/XMLSchema-instance"> <service name="SoapTest"/> </deployment> 和上面一樣,對比一下就ok了,。 五,、客戶端測試: 客戶端我們也可以使用java來進行測試,網上也有資料的,,你可以去學習,,很簡單的。現在為了體現web服務的魅力,,我用.NET平臺來測試吧,,客戶端使用c#編寫(先要安裝.net framework sdk): 1)通過wsdl生成web服務代理,在net平臺下運行: wsdl /l:CS /protocol:SOAP /out:SoapTestClient.cs http://localhost/WebserviceTest/services/SoapTest?wsdl 我們通過wsdl得到了一個cs文件SoapTestClient.cs(當前目錄),,你可以打開cs文件,,研究一下里面的代碼,那個getStr(string name)就是我們需要調用的方法,,我們的客戶端通過調用該方法就可以調用服務器端的方法,,內部的轉化wsdl.exe工具已經幫我們完成了,axis下的WSDL2Java工具也是一樣的功能,,可以參考我上面所說的關于Axis的內核內容 2)編譯cs文件成程序集dll: csc /target:library /r:System.Web.Services.dll /r:System.Xml.dll SoapTestClient.cs 最后我們等到了一個dll文件SoapTestClient.dll,,客戶端程序通過調用它就行了 3)編寫客戶端應用程序SoapTestClientApp.cs using System; namespache jws.client{ public class SoapTestClientApp{ public SoapTestClientApp(){ } public static void Main(string[] args){ if(args.Length!=1){ Console.WriteLine("Usage:SoapTestClientApp <name>"); Environment.Exit(1); } SoapTestService st_service=new SoapTestService(); st_service.getStr("Wang wenyin"); } } } 4)編譯文件csc /r:SoapTestClient.dll SoapTestClientApp.cs 運行SoapTestClientApp 輸出結果: Hello,Wang wenyin 與預期結果相符。
好了,,關于soap開發(fā)web服務就說到這里了,,希望這篇文章能對大家有所幫助,謝謝了:)有問題的話可以留言,,也可以跟我聯(lián)系 [email protected]
|