?????<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>
??? 你現(xiàn)在可以在網(wǎng)址里輸入http://localhost/WebServiceTest/servlet/TestServlet?看到了嗎?Axis是使用axis.jar包里的org.apache.axis.transport.http.AxisServlet對應(yīng)用程序進(jìn)行處理的,基本配置就講到這里。
三、接著我們來說Axis中的內(nèi)核。
1)不使用Tomcat引擎運(yùn)行Axis。
?????? 先建立一個(gè)腳步文件,對環(huán)境變量classpath進(jìn)行設(shè)置要把lib下的那些包文件的路徑全都包括進(jìn)去,運(yùn)行:java??org.apache.axis.transport.http.SimpleAxisServer? <port>
?2)內(nèi)部服務(wù)處理程序是org.apache.axis.providers.java.RPCProvider,標(biāo)志出服務(wù)所需的方法,然后提供從SOAP請求消息組成部分的參數(shù)。
?3)Axis的應(yīng)用程序端管理功能:
?????? java? org.apache.axis.client.AdminClient?就會(huì)列出參數(shù),可供你選擇。我們的例子是:java? org.apache.axis.client.AdminClient? -l http://localhost/WebserviceTest/servlet/TestServlet? list 就會(huì)顯示出服務(wù)列表,返回的是xml文件
4)wsdl2java應(yīng)用程序可以把wsdl文件創(chuàng)建基于java的程序,如占位程序等
???? java? org.apache.axis.wsdl.WSDL2java? <url>
Axis的基本內(nèi)容說到這里
四、具體例子
?1)編寫邏輯程序,簡單如:SoapTest.java
????public class SoapTest{
????????public String getStr(String name){
????????????return "Hello,"+name;
????????}
????}
? 2)?部署服務(wù),編寫wsdd文件SoapTest_deploy.wsdd:
???? <deployment name="SimapleTest" xmlns="http://xml.apache.org/axis/wsdd/"
?????????xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
?????????xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
?????????xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
?????????????<service name="SoapTest" provider="java:RPC">
??????????????????<parameter name="className" value="SoapTest"/>
??????????????????<parameter name="allowedMethods" value="getStr"/>
?????????????</service>
????</deployment>
????其中className參數(shù)是你的想部署的類名(全名),allowedMethods是調(diào)用的服務(wù)的方法,如果有多個(gè)方法的話可以用空格分開(如:?<parameter name="allowedMethods" value="getStr? getMoney"/>),當(dāng)用*的時(shí)候表示全部。
?????好了現(xiàn)在準(zhǔn)備部署了,確保環(huán)境路徑classpath設(shè)置正確,運(yùn)行:
????????java? org.apache.axis.client.AdminClient? -l? http://localhost/WebserviceTest/servlet/TestServlet? SoapTest_deploy.wsdd
?????(這里不懂的話,請參考以上的說明)?
?ok,呵呵,至此,我們已經(jīng)完成了一個(gè)web服務(wù)的部署:測試http://localhost/WebServiceTest/servlet/TestServlet? 看里面是否多了一個(gè)選擇SoapTest服務(wù)?
????? 如果不想要服務(wù)了那重新編寫一個(gè)wsdd文件,內(nèi)容改為:
<deployment name="SimapleTest" xmlns="http://xml.apache.org/axis/wsdd/"
?????????xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
?????????xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
?????????xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
????????????<service name="SoapTest"/>
</deployment>
和上面一樣,對比一下就ok了。
五、客戶端測試:
???? 客戶端我們也可以使用java來進(jìn)行測試,網(wǎng)上也有資料的,你可以去學(xué)習(xí),很簡單的。現(xiàn)在為了體現(xiàn)web服務(wù)的魅力,我用.NET平臺(tái)來測試吧,客戶端使用c#編寫(先要安裝.net framework sdk):
??? 1)通過wsdl生成web服務(wù)代理,在net平臺(tái)下運(yùn)行:
??????wsdl? /l:CS? /protocol:SOAP? /out:SoapTestClient.cs? http://localhost/WebserviceTest/services/SoapTest?wsdl??
??????? 我們通過wsdl得到了一個(gè)cs文件SoapTestClient.cs(當(dāng)前目錄),你可以打開cs文件,研究一下里面的代碼,那個(gè)getStr(string name)就是我們需要調(diào)用的方法,我們的客戶端通過調(diào)用該方法就可以調(diào)用服務(wù)器端的方法,內(nèi)部的轉(zhuǎn)化wsdl.exe工具已經(jīng)幫我們完成了,axis下的WSDL2Java工具也是一樣的功能,可以參考我上面所說的關(guān)于Axis的內(nèi)核內(nèi)容
???2)編譯cs文件成程序集dll:
????? csc /target:library /r:System.Web.Services.dll? /r:System.Xml.dll SoapTestClient.cs
????? 最后我們等到了一個(gè)dll文件SoapTestClient.dll,客戶端程序通過調(diào)用它就行了
???3)編寫客戶端應(yīng)用程序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
????運(yùn)行SoapTestClientApp
輸出結(jié)果:
?????Hello,Wang wenyin
與預(yù)期結(jié)果相符。