1. 程式人生 > >Axis1.4 操作文件

Axis1.4 操作文件

1.將Axis專案中,webapps目錄下的axis資料夾部署到Tomcat的webapps目錄下

這裡寫圖片描述

2.我們可以看到,axis\WEB-INF\web.xml中配置資訊大致如下:

 <listener>
      <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
      </listener>
      <servlet>
                <servlet-name>AxisServlet</servlet-name
>
<display-name>Apache-Axis Servlet</display-name> <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> </servlet> <servlet> <servlet-name>AdminServlet</servlet-name> <display-name
>
Axis Admin Servlet</display-name> <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class> <load-on-startup>100</load-on-startup> </servlet> <servlet> <servlet-name>SOAPMonitorService</servlet-name
>
<display-name>SOAPMonitorService</display-name> <servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class> <init-param> <param-name>SOAPMonitorPort</param-name> <param-value>5001</param-value> </init-param> <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>SOAPMonitorService</servlet-name> <url-pattern>/SOAPMonitor</url-pattern> </servlet-mapping> ...

3.編寫WS服務端

public class HelloServer {
       public HelloServer()
       {
              System.out.println("--建構函式--");
       }
       public int add(int a, int b)
       {
              return a + b;
       }
       public String sayHello(String name)
       {
              return "Hello, " + name + "!";
       }
}

方式1:最簡單的方法
(1) 直接將HelloServer.java檔案拷貝到Tomcat\webapps\axis目錄下,然後改名為:HelloServer.jws

注意:
a> HelloService.java不能放在pageage中;
b>有可能需要將jdk\lib\tools.jar放到axis\WEB-INF\lib目錄下;

方式2:最常用的方法
(1) 將HelloServer.java放到pageage:cn.koma.ws包中(可以新建一個普通的java專案,然後將axis的一些相關jar匯入進來)

(2) 編寫deploy.wsdd描述檔案:

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
         xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
         <service name="HelloServer" provider="java:RPC">
                   <parameter name="className"                       value="cn.koma.ws.HelloServer" />
                   <parameter name="allowedMethods"      value="*" />
                   <!-- 這個service的範圍:request(預設)、session、application -->
                   <parameter name="scope"                               value="application" />
         </service>
</deployment>

(3) 通過axis提供的客戶端工具org.apache.axis.client.AdminClient,將HelloServer部署到Tomcat伺服器,預設情況下axis認為axis目錄是:http://localhost:8080/axis,可以傳遞-p 指定其它埠
表示:ws部署描述檔案是:deploy.wsdd,伺服器埠是:8088
執行後,可以看到Tomcat\webapps\axis\WEB-INF目錄下多了一個server-config.wsdd檔案,開啟後可以看到我們剛才自己寫的deploy.wsdd的內容也包含在了其中。

(4) 將編譯後的HelloServer.class放到Tomcat\webapps\axis\WEB-INF\classes目錄下

4.編寫客戶端訪問WS服務

package cn.koma.ws;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class HelloServerClient {
         public static void main(String[] args) {
                   try {
                            String endpoint = "http://localhost:8088/axis/services/HelloServer";
                            Service service = new Service();
                            Call call = (Call)service.createCall();
                            call.setTargetEndpointAddress(new java.net.URL(endpoint));
                            call.setOperationName(new QName("http://ws.koma.cn", "sayHello"));
                            String rtn = (String)call.invoke(new String[]{"zhaoql"});
                            System.out.println("Sent 'zhaoql', \ngot '"+rtn+"'");
                   } catch (Exception e) {
                            e.printStackTrace();
                   }
         }
}

執行後結果 :

Sent 'zhaoql', 
got 'Hello, zhaoql!'

5.解除安裝WS服務(實際上是刪除axis\WEB-INF\server-config.wsdd檔案中HelloServer的相關描述)

(1) 編寫undeploy.wsdd檔案

<undeployment name="test" xmlns="http://xml.apache.org/axis/wsdd/">
 <service name="HelloServer"/>
</undeployment>

(2) 利用AdminClient工具執行解除安裝操作

(3) 執行成功後,可以看到server-config.wsdd中已經沒了剛才的HelloServer的描述

6.org.apache.axis.client.AdminClient常用的方法:

(1) 釋出ws服務到伺服器端(實際上是修改server-config.wsdd檔案)

deploy.wsdd –p 8088

(2) 從伺服器取消ws服務,引數同上

undeploy.wsdd -p 8088

(3) 檢視伺服器所提供的所有的ws服務列表

list   -p 8088
deploy.wsdd –p 8088 –s MyWebProject/servlet/AxisServlet

7.可以檢視ort.apache.axis.utils.Options的建構函式getUrl()方法

(1) Axis支援兩種協議:http(預設)、file (-l 引數指定http協議,-f 引數指定file協議)

(2) 用 –l 或者 –f 引數指定協議等資訊,如果為空,則預設是http協議, 如果指定了-l或者-f

則可以從引數中得到:主機(host)、埠(port)、AxisServlet的URL(servlet)、協議(protocol)

(4) 如果 –h 引數不為空,則可以替換掉上面 –l 或者 –f 得到的host
如果 –p 引數不為空,則可以替換掉上面 –l 或者 –f 得到的port
如果 –s 引數不為空,則可以替換掉上面 –l 或者 –f 得到的servlet

(5) 如果host為空,則使用預設的host (localhost)
如果port為空,則使用預設的port(8080)
如果servlet為空,則使用預設的servlet(axis/servlet/AxisServlet)
如果protocol為空,則使用預設的protocol (http)