首先到apache的網站下載axis的開發包,好久沒看了,現在已經開始出2.0的啦,不過好像還不是很成熟,這里,我們還是用1.x的包。最新的是1.3的包(如果是用jbuilder的話是不需要再下載的,可以用其自帶的工具發布的,做起來很簡單,不過下面是以比較通用的方式來介紹)。
一、服務器端開發
首先編寫服務端程序,這時我們完全不用考慮他是不是當作webservcies來發布的,因為在寫法上沒有什么不同。比如我們寫了一個很簡單的java程序,代碼如下:
package samples.userguide.example2;
public class Calculator {
public int add(int i1, int i2)
{
return i1 + i2;
}
public int subtract(int i1, int i2)
{
return i1 - i2;
}
}
如果我們要把他發布成為services,首先需要把axis-1_3下的lib文件復制到我們的web服務的web-inf 的lib下。 然后在web.xml里增加以下內容
<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-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>
第一個是制定AxisServlet的類是必須的,余下的是配置servlet mapping的,可根據需要進行修改,比如不需要對 *.jws做mapping的時候就可以去掉相應的部分。完成了上邊的必須配置我們就有兩種方式來發布了:
1、動態發布,直接把Calculator 的java文件復制到webroot下,把Calculator.java更名為Calculator.jws,然后通過http://localhost:8080/Calculator.jws 訪問就可以 ,通過 http://localhost:8080/Calculator.jws?wsdl 就可以看到相應的wsdl。這種方式調試起來比較麻煩,而且我再測試的時候也不能帶package的信息,而且一些高級的配置無法實施,不建議采用。
2、靜態發布,就是通過配置文件發布,這時候我們類的編譯和普通的web方式沒有不同,只是在web-inf下多了一個配置文件,默認的名稱為server-config.wsdd
<?xml version="1.0" encoding="UTF-8"?>
<deployment name="defaultClientConfig"
xmlns:java="
xmlns:handler="
<requestFlow name="RequestFlow1" type="">
<handler name="Handler1" type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session"/>
</handler>
<handler name="Handler2" type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request"/>
<parameter name="extension" value=".jwr"/>
</handler>
</requestFlow>
</globalConfiguration>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<transport name="http" type="">
<requestFlow name="RequestFlow1" type="">
<handler name="Handler1" type="URLMapper"/>
<handler name="Handler2" type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
</transport>
<transport name="local" type="">
<responseFlow name="ResponseFlow1" type="">
<handler name="Handler1" type="LocalResponder"/>
</responseFlow>
</transport>
<service name="AdminService" type="" provider="java:MSG">
<parameter name="allowedMethods" value="AdminService"/>
<parameter name="enableRemoteAdmin" value="false"/>
<parameter name="className" value="org.apache.axis.utils.Admin"/>
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
</service>
<service name="Version" type="" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion"/>
<parameter name="className" value="org.apache.axis.Version"/>
</service>
<service name="Calculator" type="" provider="java:RPC" style="rpc" use="encoded">
<parameter name="scope" value="Request"/>
<parameter name="className" value="samples.userguide.example2.Calculator"/>
<parameter name="allowedMethods" value="*"/>
<namespace>http://example2.userguide.samples</namespace>
</service>
<service name="OrderProcessor" provider="java:RPC">
<parameter name="className" value="samples.userguide.example5.BeanService"/>
<parameter name="allowedMethods" value="*"/>
<beanMapping qname="myNS:Order" xmlns:myNS="urn:BeanService" languageSpecificType="java:samples.userguide.example5.Order"/>
</service>
</deployment>
其中要發布的每個service都需要加上一個service的節點描述,其他多余的servie節點可以刪除的,這樣重啟tomcat后,我們就可以以http://localhost:8080/services/Calculator 來訪問這個service了,同樣以http://localhost:8080/services/Calculator?wsdl 訪問到它的wsdl描述文件。
二、客戶端開發
在開發工具中引進lib下的jar包;然后編寫客戶端程序
package samples.userguide.example2;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.utils.Options;
import javax.xml.rpc.ParameterMode;
public class CalcClient
{
public static void main(String [] args) throws Exception {
try{
String endpoint = "https://localhost:8440/services/Calculator";
Integer i1 = new Integer(1);
Integer i2 = new Integer(2);
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName("add");
call.addParameter("i1", XMLType.XSD_INT, ParameterMode.IN);
call.addParameter("i2", XMLType.XSD_INT, ParameterMode.IN);
call.setReturnType(XMLType.XSD_INT);
Integer ret = (Integer) call.invoke(new Object[] {i1, i2});
System.out.println("Got result : " + ret);
}
catch(Exception e){
e.printStackTrace();
}
}
}
其中 setOperationName就是指定執行的方法,addParameter就是指定參數
運行一下吧