Axis是Apache組織推出的SOAP引擎,Axis項(xiàng)目是Apache組織著名的SOAP項(xiàng)目的后繼項(xiàng)目,我用的是1.4版本,部署環(huán)境tomcat5.0,JDK1.5
準(zhǔn)備工作:
1、下載axis1.4 http://ws.apache.org/axis/1_4 只下axis-src-1_4.zip就OK了。
2、解壓縮后將其中的“webapps”目錄下的“axis”目錄整個拷貝到Tomcat安裝目錄下的“webapps”目錄下即可。
3、配置Axis:
Axis基于Java開發(fā),可以部署于多種操作系統(tǒng),使用前需要配置一系列的系統(tǒng)變量,在此假定你已經(jīng)在本機(jī)上裝好了Tomcat 5.0以上的版本,需要配置的系統(tǒng)變量如下表所示:
CATALINA_HOME
E:\Program Files\Apache Software Foundation\Tomcat 5.0
AXIS_HOME
%CATALINA_HOME%\webapps\axis
AXIS_LIB
%AXIS_HOME%\lib
AXISCLASSPATH
%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar; %AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar; %AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar; %AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar
CLASSPATH 中加入:
%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar; %AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar; %AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar; %AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar
以上是看了網(wǎng)上一篇文章是這要配置的。我們可以直接寫一個批處理文件把這些變量加入,可以基本省略這一步。后面可以看到
4、測試Axis
安裝配置完畢后,應(yīng)測試一下是否Axis可以正確運(yùn)行了。
啟動Tomcat服務(wù)器,在瀏覽器中訪問http://localhost:8080/axis/happyaxis.jsp,如果頁面顯示有錯誤,則需要回頭檢查一下相關(guān)配置是否正確,如果瀏覽頁面能正確顯示出系統(tǒng)組件、屬性等參數(shù)配置信息,則表示安裝成功。現(xiàn)在可以開始開發(fā)你的Web Services應(yīng)用了。
5、發(fā)布WebService
Axis提供了兩種服務(wù)發(fā)布方式,一種是即時發(fā)布(Instant Deployment),一種是定制發(fā)布(Custom Deployment)。
即時發(fā)布只用將源Java后綴改成.jws,然后把此文件放到webapps\axis根目錄下就OK。每當(dāng)用戶調(diào)用這類服務(wù)的時候,Axis會自動進(jìn)行編譯,即使服務(wù)器重啟了也不必對其做任何處理,使用非常簡單快捷。
需要注意的是:JWS的web服務(wù)發(fā)布是一個很簡單的Web服務(wù)發(fā)布方式,在頁面中你不能使用包,而且由于代碼是在運(yùn)行期被編譯的,所以在部署之后,你也很難找到錯誤所在。
即時發(fā)布并不總是最好的選擇,比如有些應(yīng)用系統(tǒng)是第三方提供的,我們沒有購買源代碼,只有.class文件,但我們又希望將這個應(yīng)用系統(tǒng)的一些功能對外發(fā)布成Web服務(wù),使其能夠在更大范圍內(nèi)產(chǎn)生作用,這個時候即時發(fā)布技術(shù)就無能為力了。此外,即時發(fā)布技術(shù)并不靈活,無法進(jìn)行更多的服務(wù)配置,這使得它并不能滿足一些特定系統(tǒng)的需求。
因此,Axis提供了另一種服務(wù)發(fā)布方式,這就是定制發(fā)布。我們項(xiàng)目就是用的定制發(fā)布Web Service Deployment Descriptor(WSDD)。
首先創(chuàng)建我們的業(yè)務(wù)邏輯類,可以直接在E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\classes下創(chuàng)建,也可以在別的地方創(chuàng)建好再Copy到此路徑下,一定要在此路徑才能發(fā)布。
再創(chuàng)建發(fā)布文件deploy.wsdd,放在E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF。
現(xiàn)在可以新建一個批處理文件來發(fā)布WebService了。
由于先前沒有建系統(tǒng)變理所以在批處理文件中將變量都加入了進(jìn)來。內(nèi)容如下:
cd E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF
set classpath=.;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\axis.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\axis-ant.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\commons-discovery-0.2.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\commons-logging-1.0.4.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\jaxrpc.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\log4j-1.2.8.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\saaj.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\wsdl4j-1.5.1.jar;
java org.apache.axis.client.AdminClient deploy.wsdd
路徑同deploy.wsdd
這樣有個好處就是每次修改過deploy.wsdd文件后重新發(fā)布只要運(yùn)行這個批處理文件就OK了。
現(xiàn)在運(yùn)行它,如果說沒有找到類,那么可能是類路徑?jīng)]有配置好,建議將所有的與axis相關(guān)的jar都寫到classpath中去。
如果出現(xiàn)以下內(nèi)容就表明發(fā)布成功了:
Processing file deploy.wsdd
<Admin>Doneprocessing</Admin>
定制發(fā)布還有種方法就是直接寫server-config.wsdd,但是我沒那樣試過。網(wǎng)上搜搜應(yīng)該一大堆。
來取消部署的命令:java org.apache.axis.client.AdminClient undeploy.wsdd
你也可以調(diào)用: java org.apache.axis.client.AdminClient list 來獲得所有的已經(jīng)部署的服務(wù)的列表。在這里你會看到services, handlers, transports等等,注意這個調(diào)用只是列出了WEB-INF\server-config.wsdd的文件內(nèi)容。
一定要注意:編譯后的class文件要拷貝到web-inf/classes的目錄中,如果該文件中有包存在的話,別忘了還要在classes目錄下創(chuàng)建包的目錄。
通過訪問 http://localhost:8080/axis/servlet/UserManagerService?wsdl可以看到這個服務(wù)的WSDL描述文件,這說明UserManagerService服務(wù)被成功發(fā)布了。你也可以通過訪問http://localhost:8080/axis/servlet/AxisServlet查看所有定制發(fā)布的服務(wù)。
致此WebService開發(fā)完成,下面就是測試這個服務(wù)了。
我采用的是JAVA測試,測試代碼如下:
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import javax.xml.rpc.ParameterMode;
public class AXISTest
{
public static void main( String[] args ) throws Exception
{
//創(chuàng)建service和call對象,這些對象是標(biāo)準(zhǔn)的JAX-RPC對象,這些對象用于存儲服務(wù)調(diào)用的數(shù)據(jù)(metadata)。
Service service = new Service();
Call call = ( Call ) service.createCall();
//////////訪問定制發(fā)布的UserManagerService服務(wù)
call = ( Call ) service.createCall();
//設(shè)置訪問點(diǎn)
call.setTargetEndpointAddress( "http://localhost:8080/axis/services/UserManagerService" );
//設(shè)置操作名
call.setOperationName( "addUser" );
//設(shè)置入口參數(shù)
call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );
//設(shè)置返回類型
call.setReturnType( org.apache.axis.Constants.XSD_STRING );
//call.setReturnClass(String.class);//也可這樣設(shè)置返回類型
MyBean myBean = new MyBean();//此處是一個JavaBean 用來處理XML格式的數(shù)據(jù)
String userInfo = myBean.getMyBean("user.xml");//從文件中取
String ret=(String)call.invoke(new String[]{userInfo});
//調(diào)用服務(wù)
System.out.println( " 結(jié)果: " + ret + "" );
}
}
編譯,運(yùn)行。OK。
參考資料:http://blog.csdn.net/sunsnow8/archive/2005/01/10/246580.aspx