AXIS最佳實踐

前言:html

Axis是apache一個開源的webservice服務,須要web容器進行發佈。本節主要用於介紹使用Axis開發webservice,包括服務端的建立、webservice的部署、客戶端的調用。java

準備工做:
一、儘量瞭解SOAP(簡單對象訪問協議)、WSDL(web服務描述語言)、XML(可擴展標記語言)、axis(阿帕奇可擴展交互系統)等相關知識。
二、http://ws.apache.org/axis/ Axis官方網站行下載 axis-bin-1_4.zip。 (本文使用的是Axis1版本,非Axis2版本)
三、Axis的兩種發佈方式介紹。(Webservice服務發佈的技術主要有XFire、Jax-WS、Axis等)
A、JWS方式
  1.這種方式很簡單,只須要將源碼java文件放到AXIS_HOME下面,而後將後綴改成.jws,此時Axis會自動編譯.jws文件,並把它自動加入到Java WebServie的服務中。
  2.可是這種方式的缺點是隻能java源代碼且類中不能含有包名。
  3.此方式的代碼實例可參見【轉】http://www.cnblogs.com/yisheng163/p/4524808.html

B、WSDD方式
  1.編寫一個Java類{MySoapServer.java}。
  2.web.xml文件中增長Axis核心處理類{AxisServlet}配置。
  3.server-config.wsdd文件中配置第一步編寫的Java類。
  4.啓動tomcat,服務發佈成功。web

開發環境:
Window7 + Eclipse3.3 + Tomcat6 + JDK-1.6apache


第一步:服務器端的開發{WSDD方式}tomcat


1.編寫一個Java類{MySoapServer.java}服務器

package my.soap;

public class MySoapServer
{
    public String getStr(String name)
    {
        return "Hi, " + name + " ! Welcome to MySoapServer !";
    }
    
    public int getAdd(int i, int j)
    {
        return i + j;
    }
}

2.web.xml文件中增長Axis核心處理類{AxisServlet}配置app

<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <servlet-class>
      org.apache.axis.transport.http.AxisServlet
    </servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>

3.server-config.wsdd文件中配置第一步編寫的Java類eclipse

<service name="MySoapServer" provider="java:RPC" use="literal">
   <parameter name="className" value="my.soap.MySoapServer" />
   <parameter name="allowedMethods" value="*" />
   <namespace>http://client.mysoap</namespace>
</service>

此文件放在項目的WEB-INF下面,<service>標籤的name屬性是發佈的webservice的名稱,能夠本身命名,
第一個<parameter>標籤的value屬性指定實現類的完整路徑,包括類名。
第二個<parameter>標籤的value屬性指定實現類中哪些方法須要發佈,此處*爲表明類中全部方法,
若是須要指定發佈具體某幾個方法,value="methodName1 methodName2",方法名中間使用空格隔開便可。
<namespace>標籤爲可選,它的做用是發佈服務中的wsdl中的命名空間。
maven

4.啓動tomcat,webservice服務發佈成功ide

截圖中的web服務名稱爲AxisFoo,所以在Browser地址輸入http://ip:port/AxisFoo/services,頁面顯示以下:

 

第二步:客戶端的開發{下面介紹三種調用webservice方式}

A、動態調用接口方式

1.測試代碼,MySoapClient.java

package my.soap;
import java.net.URL;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class MySoapClient { // 「MySoapServer」是server-config.wsdd文件發佈服務名稱「<service name="MySoapServer" provider="java:RPC" >」 private static final String endpoint = "http://localhost:8080/AxisFoo/services/MySoapServer"; public static void main(String[] args) throws Exception { Service service = new Service();// 1.建立service對象,經過axis自帶的類建立 Call call = (Call) service.createCall(); // 2.建立服務方法的調用者對象call call.setTargetEndpointAddress(new URL(endpoint)); // 3.請求服務的URL call.setOperationName("getStr"); // 4.遠程調用方法名 // 經過invoke方法調用webservice, new Object[]爲遠程調用方法須要傳遞的參數 String res = (String) call.invoke(new Object[] { "MyAxisFoo!" });// 5.調用webservice System.out.println(res); } }

2.測試結果

 Hi, MyAxisFoo! ! Welcome to MySoapServer ! 

 

B、wsimport命令生成java代碼方式

 wsimport -d D:/axisclient/ -keep -verbose -p wsimport.client http://localhost:8080/AxisFoo/services/MySoapServer?wsdl 

 

我的不推薦使用此方式,不一樣Axis版本的服務端使用wsimport生成客戶端代碼存在bugs。

所以此處不作詳細介紹,有須要能夠參見[轉]:http://www.cnblogs.com/simle/archive/2011/11/03/2233417.html

 

C、[推薦]使用eclipse自帶WEB service client指定wsdl文件,從而反向生成java代碼方式

一、右鍵點擊項目名稱—>「NEW」—>「Other」—>輸入「web」 以下

 

二、點擊「Next」出現客戶端配置窗口,以下點擊「Browser」選擇wsdl文件,而後直接點擊「Finish」 以下

 

三、生成後的客戶端代碼以下紅色區域

四、測試代碼,MySoapClient2.java

package my.soap;
import java.net.URL;
import mysoap.client.MySoapServer;
import mysoap.client.MySoapServerServiceLocator;

public class MySoapClient2
{
    private static final String endpoint = "http://localhost:8080/AxisFoo/services/MySoapServer";
    
    public static void main(String[] args) throws Exception
    {
        MySoapServerServiceLocator locator = new MySoapServerServiceLocator();
        MySoapServer mySoapServer = locator.getMySoapServer(new URL(endpoint));
        
        int add = mySoapServer.getAdd(3, 4);
        System.out.println(add);
     // 測試結果輸出:7 } }

 

示例代碼下載:

Axis服務和客戶端示例代碼:AxisFoo

相關文章
相關標籤/搜索