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)