本篇文章主要是『教導(協助笨鳥記憶)』如何利用 Eclipse 簡單的製作出一個基於 AXIS 的 Web Service 程式。

執行環境
  .Eclipse 3.5.1
  .JDK 1.5.0.15
  .Tomcat 5.5.26

執行步驟
  1. 建立一個  Dynamic Web Project ( File -> New -> Dynamic Web Project)

   Easy_Step01.jpg    

  2. 填入「專案名稱」,並選擇要執行的 Server 與 J2EE 版本之後,按下 Finish 完成建立 Dynamic Web project 的動作。
   本例中,Project name 為「AxisTeach」。

   Easy_Step02.jpg  

  3. 完成上述步驟後,可以在 Eclipse 左方的 Project Explorer 中看到建立出來的 Dynamic Web Project

   Easy_Step03.jpg 

  4. 接下來,我們要建立一個 Java 檔來做 Web Service 。
   在 Project Explorer 畫面中,點選 Java Resource 資料夾,按滑鼠右鍵,在跳出來的選單裏依序選擇「New -> Class」 

    Easy_Step04.jpg 

  5. 在跳出來的選單內填好 Package 與 Name 之後按下 Finish 鈕,就完成新增一個 Java 檔的動作。
   本例中,Package 為「teach.axis」,Name 為「AxisWS1」。

    Easy_Step05.jpg 

  6. 我們一樣可以在 Eclipse 左邊的 Project Explorer 裏看到剛剛建立出來的 Java 檔。

   Easy_Step06.jpg  

  7. 接著,在 Project Explorer 視窗中點擊兩次剛建立的 Java 檔來開啟編輯視窗。
   然後在裏面寫上兩個 public 的方法,分別來測試輸入與輸出。
   以下為例,receive() 方法會從呼叫端傳入一個參數,並將該參數秀在 Console 上
   用來測試輸入的情況;而 send() 方法則為回傳一個字串給呼叫端,用來測試輸出的情況。

   Easy_Step07.jpg  

  8. 編寫好程式碼之後,在 Project Explorer 視窗上點選 java 檔,並按下滑鼠右鍵叫出選單,
   並依序點選「Web Services -> Create Web Service」

   Easy_Step08.jpg  

  9. 此時會跳出建立 Web Service 的操作視窗。
   基本上這個視窗不怎麼需要修改裏面的參數,不過如果想要改變部署的 Server 或是改用 AXIS2,
   則可以分別點擊 Configuration 區塊裏的 Server 與 Web service runtime (即下圖紅圈圈起來處)
   連結,點擊後會跳出修改視窗讓使用者修改。
   以上都設定完畢後,按下 Next 按鈕到下一步。

   Easy_Step09.jpg 

  10. 在接下來的視窗中,會列出此 Java 檔中所有 public 的方法,供使用者決定要將那些方法發佈成 Web Service。
   在下例中,我們將剛寫好的 receive() 與 send() 兩個方法皆勾選起來,在按下「Next」建行下一步。

   Easy_Step10.jpg  

  11. 部署 Web Service 需要 Server 是開啟的狀態,因此若 Server 尚會開啟,則會出現請你
   開啟 Server 的選單。此時按下該選單上的「Start server」按鈕,之後 Server 就啟動了。

   Easy_Step11.jpg  

  12. 成功開啟 Server 後,Start server 按鈕會變成 disable 的狀態,接下來按下 Next 鈕,
   開始進行部署/註冊 Web Service。

   Easy_Step12.jpg  

  13. 最後一個畫面會問你是否要開啟 Web Service Explorer 來測試剛部署好的 Web Service。
   此處我們先不勾選,按下 Finish 完成。

   Easy_Step13.jpg  

  14. 完成上述步驟後,我們可以在 Project Explore 視窗中看到在 WEB-INF 目錄中多了一個放置部署與卸載
   Web Service 的 wsdd 指令檔的目錄,此目錄以 Java Name + Service 為名 (以上述的例子為 AxisWS1Service) 。
   然後同樣在 WEB-INF 目錄中多了一個 server-config.wsdd 檔。 

   接著,我們打開 WEB-INF 目錄下的 lib 目錄,發現 Eclipse 已經幫我們在裏面多加了一些 Axis 需使用到的 jar 檔。
   最後,我們還可以發現在 WebContent 目錄中也多了一個 wsdl 目錄,並在該目錄內存放著 wsdl 檔。

   Easy_Step14.jpg    

  15. 接著打開 web.xml 檔,可以看到 Eclipse 幫我們在其中加入了與 AXIS 有關的設定。

   Easy_Step15.jpg  

  16. 最後,打開瀏覽器,輸入 http://your IP : port/your project name/services,以此範例為
   http://localhost:8080/AxisTeach/services。若出現該 Server 上部署中的 Web Service 清單
   (如下圖) 且剛部署的 Web Service 有在其內的話,則代表成功。

   Easy_Step16.jpg

  17. 接下來我們開啟 Web Service Explorer 來測試一下吧~~
   點擊 Eclipse 工具列中的 Web Service Explorer 圖示, 並在開啟的 Web Service Explorer 視窗擊右上方的
   WSDL Page 按鈕,將視窗切換到 WSDL。接著在右邊的 WSDL URL 輸入框內輸入要進行測試的 wsdl 的 url,
   以此為例為「http://localhost:8080/AxisTeach/services/AxisWS1?wsdl」,之後按下 Go 鈕。

   Easy_Step17.jpg  

  18. 若是順利連結成功的話,則會在 Navigator 裏看到此 Web Service 開放出來的方法,同樣的,在右邊的視窗同樣
   能看到這些開放出來的方法。

   Easy_Step18.jpg  

  19. 先來測試此範例中的 send 方法吧。
   點擊 Navigator 視窗內的 send 方法,此時右邊視窗會變成如下圖一般,因為 send 方法只會回傳字串而且
   不需輸入參數,因此只要按下「Go」鈕即可。之後,在下方畫面可以看到 send 方法丟回來的字串。

   Easy_Step19.jpg  

  20. 最後來測試這個範例中的 receive 方法。
   同樣點擊 Navigator 視窗內的 receive 方法,此時右邊畫面(如下圖)會跟剛才的 send 方法不同,那是因為
   receive 方法需要輸入參數,因此在這畫面裏會出現輸入框讓你輸入參數。

   我們在輸入完字串後按下「Go」鈕開始執行,因為 receive 方法會將呼叫者傳入的參數 output 到 Console
   (程式碼請看步驟 7),因此我們可以看到 Console 印出了我們剛剛 key 入的字串。

   Easy_Step20.jpg  

如何手動部署與卸載 Web Service
  由於以上介紹的步驟皆由 Eclipse 幫我們將 Web Service 製作好並部署上去,若我們只要單純的部署與卸載 Web Service
  時,在 Eclipse 上又該如何執行呢?

  首先,我們必須要先準備好部署與卸載的 wsdd 檔,若是透過 Eclipse 來產生 Web Service,則可在 WEB-INF 目錄中
  名為「Java name + "Service"」的子目錄中找到 (詳見上述的步驟 14)。

  下圖為 Eclipse 產生的 deploy.wsdd 檔內容

  wsdd01-deploy.jpg 

  下圖為 Eclipse 產生的 undeploy.wsdd 檔內容

  wsdd02-undeploy.jpg


  有了 wsdd 檔之後,我們要新增一個 Eclipse 的執行設定檔,透過 axis.jar 中的 org.apache.axis.client.AdminClient
  類別來執行 wsdd 檔。 

  A. 點選 Eclipse 的工具列上的 Run 指令旁的小箭,會開啟一個小選單,點擊「Run Configurations...」。

   AddRunC_Step01.jpg  

  B. 在開啟的 Run Configurations 視窗中,點選左邊樹狀目錄的「Java Application」後,按滑鼠右鍵跳出子選單
   ,在子選單上點擊「New」。

   AddRunC_Step02.jpg  

  C. 此時視窗右邊的畫面會變成如下圖的輸入畫面。
   在 Name 欄位輸入此 Run Configuration 的名字,此範例命名為「RunAxisWsdd」。
   然後,在點擊此視窗中間名為「Main」的 Tab,接著在 Main Tab 的畫面中輸入 Project 欄位 (此範例為 AxisTeach)
   與要執行的 Class 全名,因為我們要靠 axis.jar 中的 org.apache.axis.client.AdminClient 類別來執行 wsdd 檔,
   所以此處填入「apache.axis.client.AdminClient」。

   AddRunC_Step03.jpg

  D. 因為 AdminClient 在執行時需要傳入參數,因此我們需點擊 Arguments Tab,將畫面切換到執行參數輸入畫面。

   由於 AdminClient 類別會使用 soap 協定與 Axis Web Service Server上預設的 AdminService
   (AdminService 是在經過先前介紹的方式產生 Web Service 時就會預設產生出來的一個 Web Service)
   ,因此參數必需傳入此 Service 的位置,在隔一個空格之後,再跟上要執行的 wsdd 檔。指令如下:

   org.apache.axis.client.AdminClient -lhttp://your IP : port/your project name/services/AdminService wsdd檔

   例:
     org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisTeach/services/AdminService deploy.wsdd

   了解要傳入什麼參數之後,接下來我們在「Program arguments」輸入框中輸入:
   -lhttp://localhost:8080/AxisTeach/services/AdminService ${selected_resource_loc}
   其中的 ${selected_resource_loc} 是 Eclipse 的預設環境變數,在執行時會將使用者所選擇到的檔案路徑與名稱代入。

   設定完成之後,按下「Apply」鈕後,再按下「Close」鈕完成設定。

   AddRunC_Step04.jpg

  E. 完成上述的設定後,接著來試著執行看看。
   首先,由於經過先前建立 Web Service 的步驟之後,現在 Server 上已經有 Web Service 在執行了,
   因此我們在這裏先試著執行卸載 Web Service 的 wsdd 檔。

   點選 Project Explorer 視窗裏的 undeploy.wsdd 之後,開啟 Eclipse 工具列上的「Run」的小選單,
   在其內我們可以看到剛剛建立出來的 Run Configuration (此例中為 RunAxisWsdd),然後點擊這個
   Run Configuration 來執行指令。如果順利執行完畢的話,在 Console 視窗可以看到 AdminClinet 類別
   丟出「<Admin>Done processing</Admin>」字串。 

   AddRunC_Step05.jpg 

  D. 成功執行後,打開瀏覽器輸入 http://your IP : port/your project name/services
   (此例中為 http://localhost:8080/AxisTeach/services) 來查看 Web Service 清單,
   然後我們可以看到此範例的 AxisWS1 已不在清單中了。

   AddRunC_Step06.jpg  

  F. 接下來我們在用同樣的方法來執行 deploy.wsdd 檔,將 AxisWS1 這個 Web Service 重新部署上去。
   執行成功後同樣可以在 Console 上看到 <Admin>Done processing</Admin> 字串。

   AddRunC_Step07.jpg 

  G. 最後再進入 Web Service 清單,這時可以看到 AxisWS1 又出現在清單中了。

   AddRunC_Step08.jpg  

參考文件:
 .在 axis 中通过 wsdd 文件发布和卸载 webservice
 .使用 Apache Axis 部署 Web 服务时的常见问题及解决方法

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大笨鳥 的頭像
    大笨鳥

    大笨鳥的私房菜

    大笨鳥 發表在 痞客邦 留言(0) 人氣()