免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

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

開通VIP
XFire:開發(fā)WEB服務(wù)簡易之道
Web服務(wù)
Web服務(wù)允許我們建立應(yīng)用組件放置于網(wǎng)絡(luò)上的分布式系統(tǒng). 不管這些應(yīng)用組件是怎么寫的,使用什么語言寫的,要運(yùn)行在什么操作系統(tǒng)上, 我們都能以統(tǒng)一的方式訪問這些組件.如果一個(gè)Web服務(wù)有效并且設(shè)計(jì)實(shí)現(xiàn)了互用性問題,那么無論你的應(yīng)用是用什么語言,在什么平臺(tái)上開發(fā)的,都可以使用這些服務(wù). 

 為了實(shí)現(xiàn)平臺(tái)無關(guān),實(shí)現(xiàn)獨(dú)立的訪問Web服務(wù), 業(yè)界制定了一系列技術(shù)標(biāo)準(zhǔn),下面是一些最重要的技術(shù):
 * XML
 * SOAP
 * WSDL
下圖展示了上述技術(shù)在工作環(huán)境中是如何使用的.

在這里,提供者是可以提供服務(wù)的應(yīng)用組件, 申請(qǐng)者是需要使用服務(wù)的客戶端程序. 很多其他技術(shù)也參與了這個(gè)交互過程,但是這里只顯示了在Web服務(wù)環(huán)境中必不可少的核心組件.

XFire
XFire是一個(gè)免費(fèi)的,開源的SOAP框架. 它不僅允許你輕松簡易地實(shí)現(xiàn)這么一個(gè)環(huán)境.而且還提供了很多先進(jìn)的特性.不錯(cuò),你沒有看錯(cuò),"輕松簡易". 本文中你將會(huì)看到用XFire構(gòu)建Web服務(wù)是多么的簡單.如果你的Web應(yīng)用有一個(gè)Java類, 現(xiàn)在你希望這個(gè)類編程Web服務(wù),用XFire完成這一工作你不必寫一句代碼.僅需操作一下部署描述器,你就會(huì)得到一個(gè)Web服務(wù). 是的, 就是這么簡單.讓我們來看個(gè)例子.

一個(gè)簡單的Java類
我的這個(gè)例子是一個(gè)位于Apache Tomcat 5.5.7主機(jī)運(yùn)行在J2SE 1.4.2_07下的銀行應(yīng)用. 我假設(shè)你已經(jīng)知道如何使用Java編寫web應(yīng)用并且已經(jīng)配置了Tomcat服務(wù)器.我們的這個(gè)應(yīng)用很簡單,  只完成一項(xiàng)工作, 就是將錢從一個(gè)帳戶轉(zhuǎn)到另一個(gè)帳戶.BankingService類中的transferFunds()為我們完成這一工作. 他需要4個(gè)傳入?yún)?shù)
  1. String fromAccount
  2. String toAccount
  3. double amount
  4. String currency

下面是代碼:

package com.mybank.xfire.example;

import java.text.NumberFormat;
import java.text.DecimalFormat;

/** XFire WebServices sample implementation class. 
*/

public class BankingService implements IBankingService {
    
    
//Default constructor.
    public BankingService(){    
    }

    
    
/** Transfers fund from one account to another.
    
*/

    
public String transferFunds(
        String fromAccount, String toAccount, 
double amount, String currency){
        
        String statusMessage 
= "";
                      
        
//Call business objects and other components to get the job done.
        
//Then create a status message and return.
        try {
            NumberFormat formatter 
= new DecimalFormat("###,###,###,###.00");       
            statusMessage 
= "COMPLETED: " + currency + " " + formatter.format(amount)+ 
            
" was successfully transferred from A/C# " + fromAccount + " to A/C# " + toAccount;
        }
 catch (Exception e){
            statusMessage 
= "BankingService.transferFunds(): EXCEPTION: " + e.toString();
        }

        
return statusMessage;
    }

    
}

在上面的代碼中你看到奇怪的代碼了嗎? 大概沒有吧. 除了那個(gè)公共的默認(rèn)構(gòu)造函數(shù).這個(gè)構(gòu)造函數(shù)是必不可少的,因?yàn)閄Fire要用他來實(shí)例這個(gè)類.

因?yàn)槭褂媒涌趤硗瓿墒呛芎玫膶?shí)踐,因此我們的類也實(shí)現(xiàn)了一個(gè)名叫IBankingService的接口.代碼很簡單:

package com.mybank.xfire.example;

public interface IBankingService {  

    
public String transferFunds(
        String fromAccount, String toAccount, 
double amount, String currency);
        
}

實(shí)際開發(fā)中,這個(gè)方法可能包含所有復(fù)雜的調(diào)用,請(qǐng)求和處理操作,但是我們的例子將其最小化以便我們能將精力集中到我們的目標(biāo)上:將這個(gè)方法轉(zhuǎn)換成Web服務(wù).

你可以看到,我們的BankingService只不過是一個(gè)普通的Java類,沒有任何代碼說明它是否在Web服務(wù)中使用.這就對(duì)了!我們不需要寫任何代碼,所有工作都交給部署描述去處理.
后面我將介紹如何編寫部署描述。
摘要:XFire本身就是基于Servlet的應(yīng)用,因此我們需要向文件中添加一些必要的參照.那么我們就需要配置我們創(chuàng)建的Web服務(wù).我們使用名叫services.xml的文件來完成配置。

Web應(yīng)用的部署描述
在Java中,Web應(yīng)用至少使用一個(gè)名叫web.xml的部署描述來部署. XFire本身就是基于Severlet的應(yīng)用,因此我們需要向文件中添加一些必要的參照.那么我們就需要配置我們創(chuàng)建的Web服務(wù).我們使用名叫services.xml的文件來完成配置.

web.xml
首先想讓我們看一下web.xml.我們需要加上如下語句:
    <servlet>
        <servlet-name>XFireServlet</servlet-name>
        <display-name>XFire Servlet</display-name>
        <servlet-class>org.codehaus.xfire.transport.http.XfireConfigurableServlet
         </servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/servlet/XFireServlet/*</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

services.xml
下面我們就要描述一下我們的Web服務(wù)都包含什么.這個(gè)工作在services.xml中完成.這個(gè)文件位于META-INF/xfire目錄下,下面是基本的配置條目:

<beans xmlns="http://xfire.codehaus.org/config/1.0">
  
  <service>
    <name>Banking</name>
    <namespace>mybank</namespace>
    <serviceClass>com.mybank.xfire.example.IBankingService</serviceClass>
    <implementationClass>com.mybank.xfire.example.BankingService</implementationClass>
  </service>  
  
</beans>

讓我們看看文件中的具體內(nèi)容. 對(duì)Web服務(wù)的定義包含在<service>元素內(nèi).<service>元素下還有若干子元素.
第一個(gè)子元素是<name>, 你可以提供任何有效的xml名字,這個(gè)名字會(huì)被客戶端程序和服務(wù)器上的其他組件使用.例如,當(dāng)服務(wù)器起來以后,你可以在瀏覽器上使用這個(gè)名稱來查看WSDL.
下一個(gè)子元素是<namespace>. 任何有效地xml名稱都可以, <namespace>將作為你服務(wù)器的唯一標(biāo)識(shí)變量使用.
<serviceClass>元素包含Java類名用來指明方法的簽名.在我們的這個(gè)例子中是IBankingService接口.如果你的Java類沒有實(shí)現(xiàn)任何接口,那就填入類名.在你的Java類或接口中也許含有不知一個(gè)方法,只需要一個(gè)入口來將他們轉(zhuǎn)換成Web服務(wù).
<implementationClass>元素記錄實(shí)現(xiàn)接口的Java類名.這是一個(gè)可選元素.如果前一個(gè)元素<serviceClass>填入的是接口,那么此處就要填入相應(yīng)的實(shí)現(xiàn)類名.
至此,我們的Web服務(wù)配置工作就完成了.

XFire和其他庫
現(xiàn)在,我們做最后一步工作--獲得所有必要的庫文件.我們?cè)趺传@得他們呢? 訪問XFire官方網(wǎng)站
http://xfire.codehaus.org/ 下載xfire-distribution-1.0.zip并解壓到本地文件夾中.將下列文件拷貝到WEB-INF\lib:
  • activation-1.0.2.jar
  • commons-codec-1.3.jar
  • commons-httpclient-3.0.jar
  • commons-logging-1.0.4.jar
  • jaxen-1.1-beta-8.jar
  • jdom-1.0.jar
  • log4j-1.2.x.jar
  • mail-1.3.3_01.jar
  • spring-1.2.x.jar
  • stax-api-1.0.jar
  • wsdl4j-1.5.2.jar
  • wstx-asl-2.9.jar
  • xbean-2.1.0.jar
  • xbean-spring-2.2.jar
  • xfire-all-1.0.jar
  • XmlSchema-1.0.jar

    大功告成!讓我們部署并啟動(dòng)應(yīng)用.要部署這個(gè)例子,只需要將websvc.war復(fù)制到Apache Tomcat 環(huán)境的webapps目錄下,等待幾分鐘,應(yīng)用會(huì)自動(dòng)啟動(dòng). 例子的所有源代碼也包含在這個(gè)war文件中(文件太大,我將其分卷壓縮)part1  part2  part3  part4  part5.現(xiàn)在,我們的應(yīng)用已經(jīng)是一個(gè)Web服務(wù)了. 

    我們?cè)趺粗繵eb服務(wù)有效?
    我們來做一些測(cè)試,看看Web服務(wù)是否有效.
    首先,我們先來看看WSDL是否有效。在瀏覽器中輸入U(xiǎn)RL。哪個(gè)URL?因?yàn)槲覀兊膚ar文件名叫websvc.war,services.xml 中給出的servicenames是Banking, 那么WSDL URL為
    http://localhost:8080/websvc/services/Banking?wsdl。
    請(qǐng)注意:URL的前一部分,例如:
    http://localhost:8080會(huì)根據(jù)你安裝的應(yīng)用服務(wù)不同而不同。如果你輸入了URL,你將會(huì)看到以<wsdl:definitions>為根結(jié)點(diǎn)的xml文件。這個(gè)文件叫做web服務(wù)的WSDL.如果你看到了這個(gè)文件,那么初步驗(yàn)證你的Web服務(wù)有效。
    但是這個(gè)驗(yàn)證還不夠。有時(shí)候情況會(huì)復(fù)雜一些,你可以看到WSDL,但是客戶端卻無法訪問Web服務(wù)。因此要真正檢驗(yàn)Web服務(wù)是否真的好使,就要用客戶端程序?qū)eb服務(wù)作一次真正的調(diào)用。

  • 摘要:在《XFire:開發(fā)Web服務(wù)的簡易之道(二)》中最后提到過:要想檢驗(yàn)Web服務(wù)是否有效,需要一個(gè)客戶端程序?qū)嶋H調(diào)用一下這個(gè)Web服務(wù)。本章我們就來創(chuàng)建這樣一個(gè)用于檢驗(yàn)的客戶端程序,驗(yàn)證一下我們前面的工作是不是真的有效。最后總結(jié)一下用XFire開發(fā)Web服務(wù)的步驟。

    創(chuàng)建客戶端程序
    我們可以使用很多方法,任何SOAP工具來創(chuàng)建客戶端程序,例如.Net或Apache Axis。我的這個(gè)例子中我是用一個(gè)名叫WsClient.java的Servlet中的動(dòng)態(tài)代理。為了減少編碼的代價(jià),我將所有屏幕構(gòu)建元素都放到doGet()方法中。對(duì)Web服務(wù)服務(wù)的實(shí)際調(diào)用在callWebService()方法中。代碼很簡單:

    /* Call the Web service
        *
        
    */

        
    public String callWebService(
            String fromAccount, String toAccount, 
    double amount, String currency) 
            
    throws MalformedURLException, Exception {
            
            
    //Create a metadata of the service      
            Service serviceModel = new ObjectServiceFactory().create(IBankingService.class);        
            log.debug(
    "callSoapServiceLocal(): got service model." );
       
            
    //Create a proxy for the deployed service
            XFire xfire = XFireFactory.newInstance().getXFire();
            XFireProxyFactory factory 
    = new XFireProxyFactory(xfire);      
        
            String serviceUrl 
    = "http://localhost:8080/websvc/services/Banking";
            
            IBankingService client 
    = null;
            
    try {
                client 
    = (IBankingService) factory.create(serviceModel, serviceUrl);
            }
     catch (MalformedURLException e) {
                log.error(
    "WsClient.callWebService(): EXCEPTION: " + e.toString());
            }
        
                   
            
    //Invoke the service
            String serviceResponse = "";
            
    try 
                serviceResponse 
    = client.transferFunds(fromAccount, toAccount, amount, currency);
           }
     catch (Exception e){
                log.error(
    "WsClient.callWebService(): EXCEPTION: " + e.toString());                 
                serviceResponse 
    = e.toString();
            }
            
            log.debug(
    "WsClient.callWebService(): status=" + serviceResponse);              

            
    //Return the response
            return serviceResponse;
        }
       


    這段代碼做了些什么?讓我解釋一下:首先我們創(chuàng)建了一個(gè)服務(wù)模型,里面包含了對(duì)服務(wù)的描述,換句話說,我們創(chuàng)建了服務(wù)的元數(shù)據(jù)。我們是用XFire的ObjectServiceFactory通過接口IBankingService.class創(chuàng)建了這個(gè)服務(wù)模型。

    下一步就是獲取XFire的代理對(duì)象。這一步中沒有任何應(yīng)用細(xì)節(jié)。通過proxyFactory,使用服務(wù)模型和服務(wù)終點(diǎn)URL(用于獲得WSDL),我們獲得了服務(wù)的本地代理。

    這個(gè)代理就是實(shí)際的客戶端?,F(xiàn)在我們可以調(diào)用transferFunds()方法獲得我們想要的Web服務(wù)了。

    一旦這個(gè)例子部署成功并啟動(dòng),就可以用下面的Servlet URL檢驗(yàn):
    http://localhost:8080/websvc/ws
    Servlet使用默認(rèn)的參數(shù)訪問Web服務(wù)并顯示接收到的響應(yīng)。你應(yīng)該能看到下面兩行信息
    Response Received
    COMPLETED: CDN$ 500.00 was successfully transferred from A/C# 11111-01234 to A/C# 99999-05678
    現(xiàn)在你可以確信Web服務(wù)真的起來了并且工作正常。

    你可以嘗試傳入不同的數(shù)據(jù)。你可以輸入類似于下面的URL
    http://localhost:8080/websvc/ws?from=11-2345&to=77-9876&amt=250.00&cur=EUR.

    Web服務(wù)開發(fā)的基本步驟
    下面列出了使用XFire開發(fā)Web服務(wù)的基本步驟:
    1、檢驗(yàn)Java類的方法和構(gòu)造函數(shù)時(shí)公共的;
    2、將XFire Servlet相關(guān)的入口添加到web.xml中;
    3、創(chuàng)建services.xml并把它放到WEB-INF/classes/META-INF/xfire目錄下;
    4、將Xfire和其他第三方庫添加到你的Web應(yīng)用的WEB-INF/lib 目錄下。
    OK,這就是全部要做,就是這么簡單。

  • 本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
    打開APP,閱讀全文并永久保存 查看更多類似文章
    猜你喜歡
    類似文章
    XFire:輕松簡單地開發(fā)Web Services
    XFire: The easy and simple way to develop Web...
    XFire:開發(fā)Web服務(wù)的簡易之道(三)--開發(fā)客戶端程序
    Java使用XFire調(diào)用WebService接口
    利用CXF的wsdl2java來建立Web Service.
    使用XFire+Spring構(gòu)建Web Service(一)
    更多類似文章 >>
    生活服務(wù)
    分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
    綁定賬號(hào)成功
    后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
    如果VIP功能使用有故障,
    可點(diǎn)擊這里聯(lián)系客服!

    聯(lián)系客服