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 的官方資料