本文將引導你在Linux作業系統下利用Axis C++來構建Web服務,同時將介紹如何開發和部署可在Axis C++下使用的Web服務。
眾所周知,Axis是一個非常出名的Web服務架構軟體,它有Java和C++兩個版本。關於Java版我已經寫了兩篇文章來介紹它,分別是《應用AXIS開始Web Service之旅》以及《AXIS實現Web 服務之深入篇》,這兩篇文章的地址請參照本文末尾的資料參考部分。相比於Java版的Axis,C++的版本在安裝和配置方面就顯得複雜很多,而且對所依賴的程式的版本要求也比較嚴格,儘管這樣,Axis C++在經過幾個版本的發展已經日趨完善,只要遵照安裝的步驟以及嚴格使用所要求的版本即可成功完成構建過程。
安裝Axis C++ Web服務架構
在安裝Axis C++之前有兩個組件是必須安裝的,分別是Apache HTTP Server以及用於處理XML的程式Xerces;為了編譯Axis以及Apache HTTPD,你的Linux機器還應該裝有gcc編譯器。
1. 編譯並安裝Apache 2
你也可以使用Apache 1.3,但關於這個版本的安裝請參照相應文檔,這裡不再具體介紹。從Apache網站上下載最新的Apache HTTP Server源碼打包檔案,目前最新的穩定版本是2.0.52。假設下載的檔案名稱是httpd-2.0.52.tar.gz,執行以下命令編譯並安裝HTTP服務。
解壓:tar zxvf httpd-2.0.52.tar.gz cd httpd-2.0.52 配置:./configure --prefix=/apache/httpd #把HTTP服務安裝到/apache/httpd目錄下 編譯:make 安裝:make install 定製:編輯/apache/httpd/conf/httpd.conf中的ServerRoot值為”/apache/httpd” 去掉ServerName的注釋,並設定值為 localhost:80 啟動:/apache/httpd/bin/apachectl start 檢驗:使用瀏覽器開啟網址 http://localhost 看是否出現Apache的歡迎頁面。 |
至此Apache 2安裝完畢!Apache HTTP伺服器的安裝包下載路徑是 http://www.apache.org/dist/httpd/httpd-2.0.52.tar.gz
2. 安裝Xerces 2.2.0
Axis C++可以使用兩種程式庫來處理XML資訊,分別是Xerces以及Expat。在這裡我們使用的是Xerces。Axis C++對這兩個庫的版本要求特別嚴格,Xerces必須是2.2.0版。到http://archive.apache.org/dist/xml/xerces-c/Xerces-C_2_2_0/ 下載Xerces的二進位檔案,請注意Linux下的檔案名稱是:xerces-c2_2_0-linux8.0gcc32.tar.gz。使用下面命令將該檔案解壓到/apache/xerces目錄下並進行安裝。
解壓:tar zxvf xerces-c2_2_0-linux8.0gcc32.tar.gz --directory=/apache cd /apache ln –s xerces-c-LINUX-c++-2_2_0 xerces 安裝:cp xerces/lib/* /usr/lib |
3. 編譯並安裝Axis C++
Axis C++目前最新的穩定版本是1.3,從http://www.apache.org/dist/ws/axis-c/source/linux/ 地址上下載最新的1.3版本源碼包:axis-c-src-1-3-linux.tar.gz,使用下面的命令來編譯並安裝Axis C++。
解壓:tar zxvf axis-c-src-1-3-linux.tar.gz --directory=/apache 將axis c++源碼解壓到/apache/axis-c-src-1-3-linux目錄下。 設定環境變數: AXISCPP_HOME=/apache/axis-c-src-1-3-linux Axis C++解壓後所在的目錄 AXISCPP_DEPLOY=/apache/axiscpp Axis C++要安裝的目標目錄 LD_LIBRARY_PATH=/usr/lib:$AXISCPP_DEPLOY/lib:$LD_LIBRARY_PATH export AXISCPP_HOME AXISCPP_DEPLOY LD_LIBRARY_PATH cd $AXISCPP_HOME 配置:./configure --prefix=$AXISCPP_DEPLOY --with-apache2=/apache/httpd --with-xercesc=/apache/xerces 編譯:make (需要幾分鐘時間) 安裝:make install 檢驗:檢查/apache/axiscpp目錄下是否產生了Axis C++的目錄。 |
到此Axis C++安裝完畢,但是還需要經過一些配置步驟才能讓其運行,包括配置Apache HTTP Server服務以及Axis C++本身的一些參數。為了方便接下來的配置與開發,建議將前面提到的幾個環境變數放在目前使用者的設定檔中,以便使用者登入後自動化佈建。
配置Apache模組
開啟Apache的設定檔 /apache/httpd/conf/httpd.conf ,添加下面資訊到檔案中
LoadModule axis_module modules/libaxiscpp_mod2.so
SetHandler axis
如果你的Apache HTTP Server版本是1.3的話,那LoadModule行應該是LoadModule axis_module libexec/libaxiscpp_mod2.so。拷貝$AXISCPP_DEPLOY/lib/ libaxiscpp_mod2.so檔案到/apache/httpd/modules,對於1.3版本的Apache應該是libexec目錄。
配置Axis C++參數
Axis C++的Web服務的定義檔案存放在$AXISCPP_DEPLOY/etc/server.wsdd,所有的Web服務都將在這個檔案中定義。剛編譯完的Axis C++在etc目錄下有一個該配置的樣本檔案server.wsdd_linux,將它改名為server.wsdd。在這個檔案中有很多配置涉及到Axis C++安裝路徑,其預設的路徑是/usr/local/axiscpp_deploy,請開啟改名後的設定檔server.wsdd並替換其中的路徑/usr/local/axiscpp_deploy為實際的路徑/apache/axiscpp然後儲存。
關於Axis C++架構本身的設定檔還有一個是axiscpp.conf,同樣這個檔案在etc目錄下也有一個樣本axiscpp.conf_linux,同樣將該檔案改名為axiscpp.conf並替換其中Axis C++的安裝路徑為當前的路徑:/apache/axiscpp。
設定XML解析庫:
執行下面命令使Axis使用Xerces來處理XML:
ln -s $AXISCPP_DEPLOY/lib/libaxis_xercesc.so $AXISCPP_DEPLOY/lib/libaxis_xmlparser.so
4. 驗證Axis C++的安裝
為了盡量減小發生問題的範圍,首先利用Axis C++內建的簡單服務進行測試,執行 $AXISCPP_DEPLOY/bin/XXXXXX_axis_server 9090 ,開啟另外一個終端視窗執行 $AXISCPP_DEPLOY/bin/base http://localhost:9090/axis/base (該地址用瀏覽器訪問沒有任何響應,而且此時必須重新XXXXXX_axis_server方可再次使用base程式進行測試,否則base用戶端程式也無響應)可以看到整個調用過程如所示,如此便可確認Axis C++安裝成功。
現在就可以來驗證HTTP服務的模組安裝是否成功。運行 /apache/httpd/bin/apachectl start 命令來啟動HTTP服務,使用瀏覽器開啟網址 http://localhost/axis 後可以列出已經部署的Web服務列表則表示Apache HTTP模組安裝正確。
接下來通過Apache HTTP模組來驗證Axis C++的Web服務是否正常運行,進入$AXISCPP_DEPLOY/bin目錄,執行命令:./base http://localhost/axis/base 正常的結果應該所示。
如果出現瀏覽器無響應同時命令列驗證也被堵塞的情況,請停止HTTP服務然後重新啟動。其他的錯誤請檢查前面的安裝步驟是否有誤。
參考資料
Axis官方網站
http://ws.apache.org/axis
《應用AXIS開始Web Service之旅》
http://www-900.ibm.com/developerWorks/cn/webservices/ws-startaxis/index.shtml
《AXIS實現Web服務深入篇》
http://www-900.ibm.com/developerWorks/cn/webservices/ws-deepaxis/
《根據WSDL來產生服務端實現架構》
http://www.javayou.com/showlog.jspe?log_id=407
作者簡介
劉冬,一直使用J2EE從事移動業務方面的開發。現在可以通過Java自由人網站來跟我聯絡,網址是:http://www.javayou.com;另外我的郵件地址是winter.lau@163.com。