axis網上的教程很多,不過搜來搜去,總是只有那么幾篇。仔細看了一下那幾篇文章,都感覺到不是自己想要的,所以自己整理了一篇分享一下。
?
本文介紹axis應用的一個小例子,沒有麻煩的命令行操作,只需照下面的步驟做就可以了。以下是詳細的操作步驟。(注:本實例用的是axis,非axis2)
?
- 1.???????環境準備
l??MyEclipse 6.5
l??Tomcat 6
l??JDK 1.5
l??axis(非axis2)
?
- 2.???????新建web工程
新建一web工程,工程名稱為axistest。新建完成后,導入下圖所示的axis相關的jar包。
?
?
- 3.???????在web.xml中添加axis相關的配置信息
?
- <servlet>??
- ????<display-name>Apache-Axis?Servlet</display-name>??
- ????<servlet-name>AxisServlet</servlet-name>??
- ????<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>??
- </servlet>??
- ??
- <servlet>??
- ????<display-name>Axis?Admin?Servlet</display-name>??
- ????<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>AxisServlet</servlet-name>??
- ????<url-pattern>/servlet/AxisServlet</url-pattern>??
- </servlet-mapping>??
- <servlet-mapping>??
- ????<servlet-name>AxisServlet</servlet-name>??
- ????<url-pattern>*.jws</url-pattern>??
- </servlet-mapping>??
- <servlet-mapping>??
- ????<servlet-name>AxisServlet</servlet-name>??
- ????<url-pattern>/services/*</url-pattern>??
- </servlet-mapping>??
- ???<servlet-mapping>??
- ????<servlet-name>AdminServlet</servlet-name>??
- ????<url-pattern>/servlet/AdminServlet</url-pattern>??
- </servlet-mapping>??
?
?
- 4.???????新建提供服務的Java類
在src下新建com包,在com包下新建HelloWorld類,HelloWorld的內容如下:
?
- package?com;??
- ??
- public?class?HelloWorld?{??
- ??
- ????public?String?sayHello(String?msg){??
- ????????if(null==msg?||?"".equals(msg)){??
- ????????????return?"您好!";??
- ????????}else{??
- ????????????return?"您好"?+?msg?+?"!";??
- ????????}??
- ????}??
- ??????
- ????public?int?sayAge(){??
- ????????return?28;??
- ????}??
- ??
- }??
??
?
- 5.???????配置server-config.wsdd
在WEB-INF下新建server-config.wsdd文件,內容如下:
?
- <deployment?xmlns="http://xml.apache.org/axis/wsdd/"??
- ????xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">??
- ??
- ????<!--?處理器?-->??
- ????<handler?name="URLMapper"?type="java:org.apache.axis.handlers.http.URLMapper"?/>??
- ??????????
- ????<!--?一個服務?-->??
- ????<!--?provider="java:RPC"??webservice是以javabean的形式提供的-->??
- ????<service?name="helloWorldService"?provider="java:RPC">??
- ????????<!--?指定類名?-->??
- ????????<parameter?name="className"?value="com.HelloWorld"?/>??
- ????????<!--?類中允許訪問的方法?-->??
- ????????<parameter?name="allowedMethod"?value="*"></parameter>??
- ????</service>??
- ??????
- ????<!--?指定處理器?-->??
- ????<transport?name="http">??
- ????????<requestFlow>??
- ????????????<handler?type="URLMapper"/><!--?引用上邊的?-->??
- ????????</requestFlow>??
- ????</transport>??
- ??????
- </deployment>??
?
wsdd文件標簽節點說明:
deployment:表明這是一個axis部署描述文件;
service:axis提供的一個web service服務。service標簽中parameter allowedMethod用于指定一個以空格分隔的方法名,只有這些方法可以通過web service訪問。也可以將這個值指定為“*”表示所有的方法都可以訪問。
provider:服務類型,共有四種,分別是RPC,Document,Wrapped和Message。詳見org.apache.axis.providers包的API文檔;
parameter:用來設置Axis的各種屬性;
requestFlow:局的請求Handlers,在調用實際的服務之前調用;
transport:定義了服務器端的傳輸方式
?
至此web service相關的東西已經配置好,此時工程的目錄結構如下
?
?
?
?
- 6.???????部署到Tomcat測試
將工程發布到Tomcat,在瀏覽器里訪問http://127.0.0.1:9999/axistest/services,如果出現如下頁面,則表示web service部署成功
?
?
點擊上面的wsdl鏈接,進入下圖所示頁面
?
注意上面的紅圈的namespace,下面測試QName有用到。
?
- 7.???????客戶端測試
在com包下新建測試類,名稱為ClientTest,內容如下:
?
- package?com;??
- ??
- import?java.NET.MalformedURLException;??
- import?java.rmi.RemoteException;??
- ??
- import?javax.xml.namespace.QName;??
- import?javax.xml.rpc.ServiceException;??
- ??
- import?org.apache.axis.client.Call;??
- import?org.apache.axis.client.Service;??
- ??
- /**?
- ?*?@author?花非花霧非霧?
- ?*?@date?2010-12-24?
- ?*/??
- public?class?ClientTest?{??
- ??
- ????public?static?void?main(String[]?args)?throws?MalformedURLException,?RemoteException?{??
- ??????????
- ????????Service?service?=?new?Service();??
- ????????try?{??
- ??????????????
- ????????????Call?call?=?(Call)?service.createCall();??
- ????????????//設置地址??
- ????????????call.setTargetEndpointAddress(new?java.Net.URL("http://127.0.0.1:9999/axistest/services/helloWorldService?wsdl"));??
- ????????????//設置要執行的方法??
- ????????????call.setOperationName(new?QName("http://com","sayHello"));??
- ????????????//設置要傳入參數,如果沒有要傳入的參數,則不要寫這個??
- ????????????call.addParameter("msg",?org.apache.axis.Constants.XSD_STRING,javax.xml.rpc.ParameterMode.IN);??
- ????????????//設置返回的類型??
- ????????????call.setReturnType(org.apache.axis.Constants.XSD_STRING);??
- ??????????????
- ????????????String?name?=?"花非花霧非霧";??
- ????????????//執行,調用webservice??
- ????????????String?result?=?(String)?call.invoke(new?Object[]{name});??
- ????????????System.out.println("返回的結果是:"+result);??
- ??????????????
- ????????}?catch?(ServiceException?e)?{??
- ????????????e.printStackTrace();??
- ????????}??
- ????}??
- ??
- }??
??
?
如果一切正常,運行結果如下:
返回的結果是:您好花非花霧非霧!
?
?
參考資料:
- axis?的官方資料