国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
使用 Axis2 和 JiBX 將 Java 類轉(zhuǎn)換成 Web 服務(wù),第 2 部分: 把 XML 轉(zhuǎn)換成功能全面的 Web 服務(wù)
使用 Axis2 和 JiBX 將 Java 類轉(zhuǎn)換成 Web 服務(wù),第 2 部分: 把 XML 轉(zhuǎn)換成功能全面的 Web 服務(wù)
http://blog.csdn.net/phantomhu/archive/2008/02/26/2121653.aspx ]


Apache Axis2 提供了好幾種 XML 解決方案,可以輕松的開發(fā)功能強(qiáng)大的 Web 服務(wù)。Axis2 是實(shí)現(xiàn) Web 服務(wù)的一個(gè)非常不錯(cuò)的選擇。由于 Apache Axis2 和 Apache Geronimo duo 是免費(fèi)而且開放源碼的,因此可以考慮使用這兩者。

在本系列的前一部分中,我向您介紹了在本系列兩篇文章中使用到的 Java 類(參見 參考資料)。我們通過 WSDL 將這些類作為 Web 服務(wù)公開,然后創(chuàng)建了一個(gè) JiBX 定義描述,該定義描述將在文本中與 JiBX 數(shù)據(jù)綁定通信,來測試 Web 服務(wù)。在測試過程中,我們通過編譯 JiBX 綁定類來創(chuàng)建包裝類,使數(shù)據(jù)綁定類成為整個(gè) Web 服務(wù)中的一個(gè)功能部分。

在繼續(xù)深入開發(fā)之前,先要確保 <axis2_home>/lib 中的所有的 JAR 文件(包括您在本系列文章第一部分中拷貝的 JiBX 文件)都在您的類路徑下,并且在本文整個(gè)過程中要一直存在。同時(shí),還需確保您的系統(tǒng)中已安裝 Ant。Ant 可以從 Apache 下載獲得(參見 參考資料)。

讓我們開始生成服務(wù)吧。

生成服務(wù)

首先,需要使用 Axis2 生成服務(wù),這樣您就可以使用稍后創(chuàng)建的客戶機(jī)來對它進(jìn)行測試。在上篇文章開始之前,您應(yīng)該已下載好必要的工具,并且設(shè)置好 AXIS2_HOME 環(huán)境變量。要開始創(chuàng)建服務(wù),鍵入清單 1 中的命令。


清單 1. 創(chuàng)建服務(wù)

java org.apache.axis2.wsdl.WSDL2Java
-uri C:
appswebappsIBM-JiBXSimpleService.wsdl
-p com
.ibm.devWorks.xml.simpleService -d jibx -s -ss -sd -ssi 
-Ebindingfile 
../binding.xml

這將為您創(chuàng)建最基本的服務(wù)!下列部分顯示了各命令開關(guān)的注解:

  • -uri 開關(guān)告訴 Axis2 在哪能找到用于生成服務(wù)的 WSDL 文件。
  • -p 開關(guān)告訴 Axis2 服務(wù)要使用的 Java 包類。
  • -d jibx 選項(xiàng)指定 JiBX 數(shù)據(jù)綁定。
  • -s 開關(guān)指定只有同步(塊)方法可用。
  • -ss 開關(guān)告訴 Axis2 要構(gòu)建服務(wù)器端代碼。
  • -sd 開關(guān)告訴 Axis2 要構(gòu)建一個(gè)服務(wù)描述符(services.xml 文件)。
  • -ssi 開關(guān)是可選的,用于為服務(wù)實(shí)現(xiàn) ( SimpleServiceSkeleton.java ) 創(chuàng)建一個(gè) Java 接口。
  • -Ebinding 開關(guān)告訴 Axis2 在哪能找到 JiBX 定義說明文件。

現(xiàn)在已經(jīng)有了一個(gè) Web 服務(wù),但是還沒有任何定義。下一部分 將對服務(wù)進(jìn)行定義。

定義服務(wù)主干

只要成功調(diào)用了 Web 服務(wù)的一項(xiàng)操作,便會(huì)調(diào)用服務(wù)主干中的方法。Web 服務(wù)操作的實(shí)現(xiàn)代碼包含在一個(gè)叫做 SimpleServiceSkeleton.java 的文件中(在本例中)。該文件位于 src/com/ibm/devWorks/xml/simpleService 目錄,并且是空文件。對它進(jìn)行定義,如清單 2 所示。


清單 2. 定義服務(wù)主干

package com.ibm.devWorks.xml.simpleService;

public class SimpleServiceSkeleton implements SimpleServiceSkeletonInterface{

    
public  void OneWay
        (
         com.ibm.devWorks.xml.simpleService.OneWayRequest OneWayRequest
         )
    
{
        System.err.println(
"Request data: " + 
                           OneWayRequest.getRequestData());
    }


    
public  com.ibm.devWorks.xml.simpleService.TwoWayResponse TwoWay
        (
         com.ibm.devWorks.xml.simpleService.TwoWayRequest TwoWayRequest
         )
    
{
        System.err.println(
"Echo String : " +
                            TwoWayRequest.getEchoString());
        System.err.println(
"Booolean    : " +
                           TwoWayRequest.getBooolean());
                
        TwoWayResponse res 
= new TwoWayResponse();
                
        res.setEchoString(TwoWayRequest.getEchoString());
        res.setInvertedBoolean(
!TwoWayRequest.getBooolean());

        
return res;
    }

}

清單 2 中的代碼含有兩個(gè)方法,分別對應(yīng)于本系列第一篇文章中討論的兩個(gè)操作(請參見 參考資料)。第一個(gè)方法,OneWay,是單向(或者只輸入)操作,它使用 OneWayRequest Java 對象作為輸入?yún)?shù),并且沒有返回值。其實(shí)現(xiàn)僅僅是在屏幕上顯示從客戶機(jī)發(fā)送過來的內(nèi)容。

第二個(gè)方法, TwoWay,使用 TwoWayRequest Java 對象作為輸入,并且返回 TwoWayResponse 響應(yīng)。這個(gè)方法首先顯示傳入請求對象的 echoStringbooolean 字段,把響應(yīng)中的 echoString 設(shè)置為請求中的 echoString 字段值,并把響應(yīng)對象中的 invertedBoolean 值設(shè)置為請求對象中的 booolean 值的相反值(真則設(shè)為假,假則設(shè)為真)。然后把響應(yīng)對象返回給客戶機(jī)。

服務(wù)已經(jīng)定義好了。接下來,我們將構(gòu)建服務(wù)并創(chuàng)建 JiBX 數(shù)據(jù)綁定包裝類。

完成 JiBX 數(shù)據(jù)綁定

在編譯和創(chuàng)建 JiBX 數(shù)據(jù)綁定包裝類之前,我們必須首先編譯各類。要編譯項(xiàng)目,鍵入:ant

此時(shí)切換到 build/classes 目錄創(chuàng)建包裝類,鍵入:java -jar <axis2_home>\lib\jibx-bind.jar ..\..\..\binding.xml。

您會(huì)發(fā)現(xiàn)四個(gè)新的 JiBX_* 類文件。包裝類已經(jīng)創(chuàng)建完成?,F(xiàn)在重新打包 Axis2 服務(wù)存檔文件,鍵入(與之前相同的目錄):ant。

請注意,您不必構(gòu)建代碼兩次。此處通過 Ant 可以知道代碼已構(gòu)建好,但是看到還有新文件,因此需要重新打包 Axis2 存檔文件。

服務(wù)已經(jīng)就緒,下節(jié)將在 Geronimo 上部署服務(wù)。

在 Geronimo 上部署

現(xiàn)在我們將部署剛剛創(chuàng)建和編譯好的服務(wù)。如果 Geronimo 還未運(yùn)行,應(yīng)啟動(dòng)它,鍵入: java -jar <geronimo_home>/bin/server.jar

現(xiàn)在將服務(wù)存檔文件 build/lib/SimpleService.aar 拷貝到 <geronimo_home>/repository/default/axis2/1166439304031/axis2-1166439304031.war/WEB-INF/services 目錄(需注意,準(zhǔn)確的目錄將有所不同)。

服務(wù)將很快自動(dòng)部署好,現(xiàn)在一切已就緒,下節(jié)將創(chuàng)建一個(gè)客戶機(jī)對其進(jìn)行測試。

生成客戶機(jī)

客戶機(jī)允許您測試 Web 服務(wù)的功能和部署的正確性。同樣,我們將使用 JiBX 數(shù)據(jù)綁定創(chuàng)建一個(gè)客戶機(jī),用于測試已部署好的 Web 服務(wù)。

鍵入清單 3 中的命令,生成 Web 服務(wù)。


清單 3. 生成 Web 服務(wù)

java org.apache.axis2.wsdl.WSDL2Java
-uri C:
appswebappsIBM-JiBXSimpleService.wsdl
-p com
.ibm.devWorks.xml.simpleService
-d jibx -Ebindingfile 
../binding.xml -s

上面的命令簡單地創(chuàng)建了客戶樁(client stub)代碼。有關(guān)使用到的開關(guān)的解釋,請參見 生成服務(wù)。接下來,我們將定義真正的客戶機(jī)代碼,其代碼將用于測試 Web 服務(wù)。

編寫測試代碼

現(xiàn)在我們將編寫用于測試 Web 服務(wù)已成功部署的代碼,這會(huì)使用到我們剛剛使用 JiBX 數(shù)據(jù)綁定創(chuàng)建的客戶樁。創(chuàng)建一個(gè) src/com/ibm/devWorks/xml/simpleService/Client.java 文件,并對它進(jìn)行定義,如清單 4 所示。


清單 4. 測試客戶樁和部署的 Web 服務(wù)

package com.ibm.devWorks.xml.simpleService;

public class Client{
    
public static void main(java.lang.String args[]){
        
try{
            SimpleServiceStub stub 
=
                
new SimpleServiceStub
                (
"http://localhost:8080/axis2/services/SimpleService");

            oneWay(stub);
            twoWay(stub);
        }
 catch(Exception e){
            e.printStackTrace();
            System.out.println(
" ");
        }

    }


    
public static void oneWay(SimpleServiceStub stub){
        
try{
            OneWayRequest req 
= new OneWayRequest();

            req.setRequestData(
"Here is your requested data!");

            stub.OneWay(req);
        }
 catch(Exception e){
            e.printStackTrace();
            System.out.println(
" ");
        }

    }


    
public static void twoWay(SimpleServiceStub stub){
        
try{
            TwoWayRequest req 
= new TwoWayRequest();

            req.setEchoString(
"echo!... echo!");
            req.setBooolean(
false);

            TwoWayResponse res 
= stub.TwoWay(req);

            System.out.println(
"Echo String : " +
                               res.getEchoString());
            System.out.println(
"Inv Boolean : " + 
                               res.getInvertedBoolean());
        }
 catch(Exception e){
            e.printStackTrace();
            System.out.println(
" ");
        }

    }

}

粗體顯示了值得注意的代碼。這個(gè)客戶機(jī)首先初始化客戶樁對象,然后將其傳遞給兩個(gè)可用方法。第一個(gè)方法,oneWay,創(chuàng)建一個(gè) OneWayRequest 對象,并將 requestData 字段的值初始化為 Here is your requested data!,然后數(shù)據(jù)將傳送到服務(wù)器,由于是單向操作,因此沒有返回。

第二個(gè)方法,twoWay,創(chuàng)建一個(gè) TwoWayRequest 對象并初始化 echoStringbooolean 字段。然后把請求對象發(fā)送給服務(wù),并返回一個(gè) TwoWayResponse 對象。根據(jù) 清單 1 中定義的邏輯,響應(yīng)對象中的 echoString 值應(yīng)該匹配請求對象中 echoString 的值,并且響應(yīng)對象中的invertedBoolean 應(yīng)該與請求對象中的 booolean 的字段值相反,或者為真(在本例中)。

我們已經(jīng)完成了客戶機(jī)定義?,F(xiàn)在我們只需編譯 JiBX 綁定包裝類,與前面構(gòu)建服務(wù)中的編譯一樣。

完成 JiBX 數(shù)據(jù)綁定

在為客戶機(jī)編譯和創(chuàng)建 JiBX 數(shù)據(jù)綁定包裝類之前,我們首先需要編譯各類。要編譯項(xiàng)目,鍵入:ant。

現(xiàn)在切換到 build/classes 目錄創(chuàng)建包裝類,鍵入:java -jar <axis2_home>\lib\jibx-bind.jar ..\..\..\binding.xml。

我們應(yīng)該注意到四個(gè)新創(chuàng)建的 JiBX_* 類文件,這與我們之前構(gòu)建服務(wù)時(shí)一樣。要重新打包包含客戶機(jī)代碼的 JAR 文件,鍵入(與之前相同的目錄):ant。

這就全部完成了!最后剩下要做的就是完成測試。

測試

現(xiàn)在,運(yùn)行我們剛剛定義的客戶機(jī)代碼,我們應(yīng)該在屏幕上看到正確的輸出。在運(yùn)行客戶機(jī)之前,必須確保含有客戶機(jī)代碼(build/lib/SimpleService-test-client.jar)的 JAR 文件在您的類路徑下。

要運(yùn)行客戶機(jī),鍵入如下內(nèi)容: java com.ibm.devWorks.xml.simpleService.Client

我們應(yīng)該能看到服務(wù)的輸出,如圖 1 所示。


圖 1. 顯示服務(wù)輸出的標(biāo)準(zhǔn)輸出結(jié)果


請注意,正確的值已發(fā)送給服務(wù)?,F(xiàn)在我們將檢驗(yàn)發(fā)回客戶機(jī)的值是否同樣正確,這可以通過查看客戶機(jī)的輸出來完成,如圖 2 所示。


圖 2. 顯示客戶機(jī)輸出


一切都工作良好,您現(xiàn)在就可以施展 Jibx 魔法了!

結(jié)束語

現(xiàn)在,您應(yīng)該算是一員 JiBX-Axis2 Web 服務(wù)開發(fā)人員了,能夠使用 Axis2 和 JiBX 將您喜歡的一些 Java 類轉(zhuǎn)換成 Web 服務(wù)。

在本系列的兩篇文章中,我們通過 WSDL 將 Java 類公開,并使用 JiBX 定義描述將它們映射到 XML 數(shù)據(jù)。在這篇文章中,我們創(chuàng)建了一個(gè)實(shí)時(shí)的 Web 服務(wù),這個(gè)服務(wù)是使用 Axis2 和 Geronimo 部署的。然后使用 Axis2 創(chuàng)建和運(yùn)行客戶機(jī),來測試最終的實(shí)現(xiàn)。對于客戶機(jī)和服務(wù),我們都指定了 JiBX 數(shù)據(jù)綁定并分別為它們成功地創(chuàng)建了數(shù)據(jù)綁定包裝類。

下載

描述 名字 大小 下載方法
第 2 部分示例代碼 x-jibx2-source.zip 24KB HTTP


參考資料

學(xué)習(xí)

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
axis2五種創(chuàng)建服務(wù)方式的比較
Axis2快速上手指南
Java 中的 XML: 數(shù)據(jù)綁定,第 2 部分:性能
JiBX初步 - Missing in Action - JavaEye技術(shù)網(wǎng)站
SpringMVC 中整合JSON、XML視圖二
了解 Web 服務(wù)規(guī)范,第 1 部分: SOAP
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服