程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 用WSAS和Eclipse簡化Web服務的創建

用WSAS和Eclipse簡化Web服務的創建

編輯:關於JAVA

現在 Web 服務無處不在。如果需要為正在開發的新應用程序或是新特性創建 Web 服務,這是一個好機會。而在不久前,創建 Web 服務還是一項費力的工作。WSO2 意識到了這種情況並創建了一個 Eclipse 插件來幫助您更輕松地使用 Web 服務。本文將介紹 WSO2 Web Services Application Server (WSAS) Eclipse 插件以及它如何幫助開發 Web 服務。

WSO2 WSAS 是什麼?

在深入介紹適用於 Eclipse 的 Web Services Application Server (WSAS) 插件之前,需要先討論一下 WSAS 是什麼。WSAS 是針對 Web 服務的 Java™ 應用服務器。它是在 Apache Software License 下發布的開源項目。WSAS 包含適用於需要用 Web 服務完成的所有任務(包括創建、部署、管理等)的工具。它提供了尤為有效的工具,使用這些工具可以在現代 Web 服務(包括您聽說過的各種 WS-*)中啟用期望的許多功能。WSAS 是一個相對新的產品,但是它構建在經過檢驗的開源技術(包括 Axis2 和 Apache Tomcat)之上。

您可以將 WSAS 與其他應用服務器結合使用,例如 Tomcat 或 IBM® WebSphere®,但是它也可以完全獨立運行。在本文中,我們將以獨立模式使用 WSAS,主要介紹作為 WSAS 的一部分的 Eclipse 插件,並查看如何用該 Eclipse 插件更輕松地創建 Web 服務及它如何與 WSAS 綁定在一起。

WSAS —— 及 Web 服務標准本身 —— 背後的一些開發人員在 WSO2 工作,WSO2 是一家基於 Apache 項目開發開源軟件並提供支持、咨詢和培訓服務的公司。從 WSO2 的開發者門戶 WSO2 Oxygen Tank 下載 WSAS。

系統要求

需要配備 Eclipse V3.3、WSO2 WSAS 和 WSAS Eclipse 插件才能開發 Web 服務。WSAS 插件將利用 Eclipse Web Tools Platform。滿足這項要求的最簡單方法是使用 Eclipse Java EE。您還需要 WSO2 的 WSAS V2.1 和 Java Development Kit (JDK) V5.0 或更高版本。本文使用了 Mac OS X,但是所有軟件都要求能在 Windows® 和 Linux® 中運行。根據操作系統的不同,可能需要調整文件位置。

Eclipse 插件

WSAS 擁有一個功能強大的管理應用程序,稍後我們就會看到。它支持把各種基於 JAR 的歸檔部署成 Web 服務,甚至還支持把遺留的 Web 服務部署描述符與 Axis 結合使用。但是,您仍需要編寫代碼並創建這些不同工件。開發 Java 應用程序和使用 Eclipse 密不可分。並且使用 WSAS 插件可以輕松地把 Java 應用程序轉換為運行在 WSAS 上的 Web 服務。但是在開始使用它之前,需要先進行安裝和設置。

安裝

要安裝 WSAS 插件,必須已經安裝了 Eclipse 和 WSAS。您還需要設置 JAVA_HOME 環境變量(如果尚未設置)。此環境變量應當指向 JDK 的安裝目錄。設置完成後,請轉到 WSAS 安裝的 bin 目錄並運行安裝腳本。對於 Windows,此腳本為 install.bat,對於 Linux 和 OS X,此腳本為 install.sh。您應當收到清單 1 中所示的輸出。

清單 1. 運行安裝程序腳本

>./install.sh
Running WSO2 Web Services Application Server, v2.1 installer...

###########################################################
#                             #
#        WSO2 WSAS v2.1 Installation        #
#                             #
###########################################################

Please select your installation mode:
1) Eclipse WTP Plugin Installation
2) Servlet Container Installation
3) Windows NT Service Installation
4) Windows NT Service Uninstallation
:

選擇第 1 個選項,然後應當會看到清單 2 中所示的輸出。

清單 2. 選擇 Eclipse 主頁

Selection: Eclipse WTP Plugin Installation

Starting WSAS Eclipse WTP Plugin installation...
Please shutdown the Eclipse instance, If Already Running ...
Please enter Eclipse WTP Home :

如述,WSAS 插件將利用 Eclipse WTP。對於此提示,通常只需輸入 Eclipse 的安裝目錄。惟一的例外情況是您把 Eclipse 設置為將插件放在 Eclipse 安裝目錄之外。這種情況下,請輸入外部插件目錄。無論如何,您都應當能夠看到下列輸出。

清單 3. 安裝了 WSAS 插件

Copying WSAS Eclipse WTP Plugins /Applications/eclipse/plugins
OK

WSO2 WSAS Eclipse WTP Plugin installation was successful.
Please restart Eclipse WTP Instance..

以上是安裝 WSAS 插件的全部過程。如果現在啟動 Eclipse,則應當會看到 WSAS 工具和菜單,如下圖所示:

圖 1. WSAS IDE

現在 WSAS 插件已安裝,接下來需要配置 WSAS 插件以便我們可以開始使用。

配置

要配置 WSAS 插件,需要打開 Eclipse Preferences 並打開 Web Services > WSAS Preferences,如下所示:

圖 2. WSAS Preferences 面板

我們只有一件事需要做:選擇 WSAS Runtime。選定後,WSAS 插件將檢驗該位置並顯示一條表示它裝載了 WSAS 運行時的消息。完成後,您可以單擊 OK。現在您已經准備好開始使用 WSAS 插件開發 Web 服務。

開發 Web 服務

到目前為止,所完成的全部工作是安裝 WSAS 插件並通過告訴插件 WSAS 的安裝位置來配置插件。這將使您可以開始使用 WSAS 插件開發 Web 服務。您將獲得一個簡單的 Java 類並使用 WSAS 插件把它轉換為 Web 服務。然後使用 WSAS 測試 Web 服務。

使用 POJO

Web 服務已有多年歷史。只要有 Web 服務,就有創建 Web 服務的工具包和框架。這些框架的功能通常涉及聲明接口、實現框架所定義的接口或者創建用於生成代碼的 XML 文件(或以上所有功能)。現代 Web 服務則完全不同。普通 Java 對象(Plain Old Java Object,POJO)一詞通常用來指將普通 Java 類與諸如 Hibernate 之類的持久性框架結合使用,但是它們同樣適用於 Web 服務。所有 POJO 都可以成為使用 WSAS 插件的 Web 服務。因此對於我們來說,要開發 Web 服務,只需編寫 Java 類。我們將編寫一個確定整數因子的類。清單 4 顯示了該類的代碼。

清單 4. FactorService 類

package org.developerworks.services;

import java.util.LinkedList;
import java.util.List;

public class FactorService {
    public Integer[] factor(int num){
      List<Integer> factors = new LinkedList<Integer>();
      int sqrt = (int) Math.floor(Math.sqrt(num));
      for (int i=1;i<=sqrt;i++){
         if (num % i == 0){
           int mid = factors.size()/2;
           factors.add(mid, i);
           int quotient = num/i;
           if (i != quotient){
              factors.add(mid+1, quotient);
           }
         }
      }
      return factors.toArray(new Integer[factors.size()]);
    }
}

下面是該類如何工作的簡單說明。它接受一個整數進行分解。對輸入的整數求平方根,遍歷所有小於或等於平方根的整數。如果該整數可以除輸入整數,則不僅要加上該整數而且要加上除以計數整數的輸入整數,並將它們添加到一個列表中。它將按順序添加整數,因此在結束時已經給列表排好序。然後它將把列表轉換成返回的數組。這無疑是 POJO:沒有實現任何接口 —— 只有應用程序邏輯。這就像開發一樣簡單,因為除了實現業務邏輯之外我們什麼都沒做(計算整數因子)。因此把這一切轉換成 Web 服務有多麼簡單?讓我們使用 WSAS 插件並一探究竟。

創建和部署 Web 服務

要創建一個新 Web 服務,首先創建一個 Web 應用程序。為此,選擇 File > New > Other,如圖 3 所示:

圖 3. 啟動新 Web 應用程序向導

現在選擇 Web > Dynamic Web Project。

圖 4. 新建動態 Web 項目

這將打開 New Dynamic Web Project 界面。

圖 5. 新建動態 Web 項目

您應當注意到的一件事是沒有 Target Runtime。我們需要指定 WSAS 作為目標運行時,因此單擊 New。這將打開 New Server Runtime 界面。

圖 6. 新建服務器運行時

在 New Server Runtime 界面中,確保指定 WSO2 > WSO2 WSAS 作為運行時類型。另外,確保選中 “Also create new local server” 旁邊的復選框,然後單擊 Finish。這樣做應當會重定向到 Dynamic Web Project 屏幕。

圖 7. 指定了服務器運行時的動態 Web 項目

一定要單擊 Next 而不要單擊 Finish。這應當會打開 Project Facets 界面。

圖 8. Project Facets

確保選擇 WSAS Web Service 方面。在這裡,繼續並單擊 Finish。這將為您創建一個骨架 Web 項目。現在可以把 FactorService 類添加到這個項目中(File > New > Class)。您還可以通過 FactorService 類創建 Web 服務。再次選擇 File > New > Other,但是這一次選擇 Web Services > Web Service。

圖 9. 新建 Web 服務

單擊 Next 將打開新 Web 服務界面。

圖 10. 定義新 Web 服務

注意在 Configuration 下,Web 服務運行時被選為 Apache Axis。我們需要更改此選項,因此在該選項上單擊,然後將打開 Service Deployment Configuration 界面。

圖 11. 服務部署配置

現在需要把 Web 服務運行時更改為 WSO2 Web Services Application Server,然後單擊 OK。這樣做應當會返回到 Web Service 界面。

圖 12. 選中了 WSAS 運行時的 Web Service 界面

在此屏幕中,確保選中 Publish the Web service,然後單擊 Next。這樣做將打開 WSAS Web Service Java Bean Configuration 界面。

圖 13. WSAS Web Service Java Bean Configuration

在此屏幕中,確保選中 Generate Default Services.xml 文件,然後單擊 Finish。這將導致 WSAS 插件創建 Web 服務必需的所有工件並把它發布到 WSAS 安裝中。要檢驗服務是否已發布,請打開 WSAS Management 控制台。該控制台通常可以在 https://localhost:9443 獲得。登錄到控制台並轉到 Services。

圖 14. WSAS Management 控制台:服務列表

您應當會看到 FactorService 列位於部署到 WSAS 中的 Web 服務表。您在列表中看到的其他服務都是 WSAS 附帶的默認服務。

祝賀您!您剛剛創建並部署了一項 Web 服務。當然,只是有了一項服務,還不知道它能否正常運行。我們需要測試它。使用 WSAS 將再次簡化操作。

測試 Web 服務

讓我們看看創建的 Web 服務。在 Service 表中,我們看到一個 WSDL V2.0 View 鏈接。單擊此鏈接,然後應當會看到如下所示的 WSDL:

清單 5. FactorService WSDL

<wsdl2:description xmlns:wsdl2="http://www.w3.org/ns/wsdl"
    xmlns:tns="http://services.developerworks.org"
    xmlns:wsoap="http://www.w3.org/ns/wsdl/soap"
    xmlns:ns0="http://services.developerworks.org"
    xmlns:ns1="http://org.apache.axis2/xsd"
    xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
    xmlns:wsdlx="http://www.w3.org/ns/wsdl-extensions"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:whttp="http://www.w3.org/ns/wsdl/http"
    xmlns="http://www.w3.org/ns/wsdl"
    targetNamespace="http://services.developerworks.org">
    <wsdl2:documentation>FactorService</wsdl2:documentation>
    <wsdl2:types>
      <xs:schema xmlns:ns="http://services.developerworks.org"
         attributeFormDefault="qualified" elementFormDefault="qualified"
         targetNamespace="http://services.developerworks.org">
         <xs:element name="factor">
           <xs:complexType>
              <xs:sequence>
                <xs:element minOccurs="0" name="num"
                   type="xs:int" />
              </xs:sequence>
           </xs:complexType>
         </xs:element>
         <xs:element name="factorResponse">
           <xs:complexType>
              <xs:sequence>
                <xs:element maxOccurs="unbounded" minOccurs="0"
                   name="return" type="xs:int" />
              </xs:sequence>
           </xs:complexType>
         </xs:element>
      </xs:schema>
    </wsdl2:types>
    <wsdl2:interface name="ServiceInterface">
      <wsdl2:operation name="factor"
         pattern="http://www.w3.org/ns/wsdl/in-out">
         <wsdl2:input element="ns0:factor" wsaw:Action="urn:factor" />
         <wsdl2:output element="ns0:factorResponse"
           wsaw:Action="urn:factorResponse" />
      </wsdl2:operation>
    </wsdl2:interface>
    <wsdl2:binding name="FactorServiceSOAP11Binding"
      interface="tns:ServiceInterface" type="http://www.w3.org/ns/wsdl/soap"
      wsoap:version="1.1">
      <wsdl2:operation ref="tns:factor" wsoap:action="urn:factor" />
    </wsdl2:binding>
    <wsdl2:binding name="FactorServiceSOAP12Binding"
      interface="tns:ServiceInterface" type="http://www.w3.org/ns/wsdl/soap"
      wsoap:version="1.2">
      <wsdl2:operation ref="tns:factor" wsoap:action="urn:factor" />
    </wsdl2:binding>
    <wsdl2:binding name="FactorServiceHttpBinding"
      interface="tns:ServiceInterface"
      type="http://www.w3.org/ns/wsdl/http">
      <wsdl2:operation ref="tns:factor"
         whttp:location="FactorService/factor" />
    </wsdl2:binding>
    <wsdl2:service name="FactorService"
      interface="tns:ServiceInterface">
      <wsdl2:endpoint name="SecureSOAP11Endpoint"
         binding="tns:FactorServiceSOAP11Binding"
         address="https://192.168.0.104:9443/services/FactorService">
         <wsdl2:documentation>
           This endpoint exposes a SOAP 11 binding over a HTTPS
         </wsdl2:documentation>
      </wsdl2:endpoint>
      <wsdl2:endpoint name="SecureSOAP12Endpoint"
         binding="tns:FactorServiceSOAP12Binding"
         address="https://192.168.0.104:9443/services/FactorService">
         <wsdl2:documentation>
           This endpoint exposes a SOAP 12 binding over a HTTPS
         </wsdl2:documentation>
      </wsdl2:endpoint>
      <wsdl2:endpoint name="SecureHTTPEndpoint"
         binding="tns:FactorServiceHttpBinding"
         address="https://192.168.0.104:9443/services/FactorService">
         <wsdl2:documentation>
           This endpoint exposes a HTTP binding over a HTTPS
         </wsdl2:documentation>
      </wsdl2:endpoint>
      <wsdl2:endpoint name="SOAP11Endpoint"
         binding="tns:FactorServiceSOAP11Binding"
         address="http://192.168.0.104:9762/services/FactorService">
         <wsdl2:documentation>
           This endpoint exposes a SOAP 11 binding over a HTTP
         </wsdl2:documentation>
      </wsdl2:endpoint>
      <wsdl2:endpoint name="SOAP12Endpoint"
         binding="tns:FactorServiceSOAP12Binding"
         address="http://192.168.0.104:9762/services/FactorService">
         <wsdl2:documentation>
           This endpoint exposes a SOAP 12 binding over a HTTP
         </wsdl2:documentation>
      </wsdl2:endpoint>
      <wsdl2:endpoint name="HTTPEndpoint"
         binding="tns:FactorServiceHttpBinding"
         address="http://192.168.0.104:9762/services/FactorService">
         <wsdl2:documentation>
           This endpoint exposes a HTTP binding over a HTTP
         </wsdl2:documentation>
      </wsdl2:endpoint>
    </wsdl2:service>
</wsdl2:description>

在這裡應當注意幾點。在 wsdl12:types/xs:schema 下,定義了兩個類型:factor 和 factorResponse。這些是服務的輸入和輸出參數。第一個是單個整數,而另一個是一個無限制的整數序列。如果您必須親自編寫 WSDL,則很可能需要編寫這些內容。但是您不必這樣做!WSAS 和 WSAS 插件已經幫您完成。

讓我們繼續探究運行在 WSAS 上的服務。返回到 Service 表並單擊 Services 列中的 FactorService 鏈接。這樣做將打開 Service Management 界面。

圖 15. Service Management

您可以在此屏幕中處理與服務相關的許多事務。您可以管理安全配置和傳輸配置,但是目前,讓我們單擊 Try It 鏈接。這樣做將打開 Try Web Service 界面。

圖 16. Try Web Service

繼續並輸入一些數字,然後做一些測試。這裡發生了什麼?WSAS 是不是直接調用 Java 類並且只顯示結果?是不是調用了某種代理並由它調用您的 Web 服務?觀察 HTTP 流量,並且您將看到清單 6 和清單 7 中所示的內容。

清單 6. 調用 FactorService.factor(783) 的 HTTP 請求

<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
    xmlns:wsa="http://www.w3.org/2005/08/addressing">
    <s:Header>
      <wsa:To>https://localhost:9443/services/FactorService</wsa:To>
      <wsa:ReplyTo>
         <wsa:Address>
           http://www.w3.org/2005/08/addressing/anonymous
         </wsa:Address>
      </wsa:ReplyTo>
      <wsa:MessageID>
         http://identifiers.wso2.com/messageid/1197868769405/8468659498
      </wsa:MessageID>
      <wsa:Action>urn:factor</wsa:Action>
    </s:Header>
    <s:Body>
      <p:factor xmlns:p="http://services.developerworks.org">
         <num xmlns="http://services.developerworks.org">
           783
         </num>
      </p:factor>
    </s:Body>
</s:Envelope>

這是 SOAP 請求。它將針對我們在清單 5 中看到的 WSDL 進行驗證。您認為我們將從 SOAP 請求得到什麼結果?

清單 7. 調用 FactorService.factor(783) 的 HTTP 響應

<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope
    xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
    xmlns:wsa="http://www.w3.org/2005/08/addressing">
    <soapenv:Header>
      <wsa:Action>
         urn:factorResponse
         </wsa:Action>
      <wsa:RelatesTo>
           http://identifiers.wso2.com/messageid/1197868769405/8468659498
         </wsa:RelatesTo>
    </soapenv:Header>
    <soapenv:Body>
      <ns:factorResponse xmlns:ns="http://services.developerworks.org">
           <ns:return>1</ns:return>
           <ns:return>3</ns:return>
           <ns:return>9</ns:return>
           <ns:return>27</ns:return>
           <ns:return>29</ns:return>
           <ns:return>87</ns:return>
           <ns:return>261</ns:return>
           <ns:return>783</ns:return>
      </ns:factorResponse>
    </soapenv:Body>
</soapenv:Envelope>

這是一個 SOAP 響應。同樣,這將針對 WSDL 進行驗證。WSAS 使用名為 WSRequest(屬於 WSAS)的 Ajax 庫直接調用了 Web 服務。未使用任何代理。這就是使用您的服務的客戶機將使用的請求類型,並且正是 Web 服務將發送回客戶機的響應的類型。

結束語

Web 服務取得不少進展。不需要編寫或實現更多的接口。不需要生成代碼或創建 XML 文件。WSAS 將簡化需要創建的內容。創建 Web 服務只要求完成很少的工作。少量必要的工作可以由面向 Eclipse 的 WSAS 插件完成。使用 WSAS 和 WSAS 插件,您只需把精力放在編寫業務邏輯上而無需考慮其他問題。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved