概述
XFire是與Axis 2并列的新一代Web Service框架,通過(guò)提供簡(jiǎn)單的API支持Web Service各項標準協(xié)議,幫助你方便快速地開(kāi)發(fā)Web Service應用。XFixe內建在STAX的基礎上之上,STAX是基于流的XML解析引擎,這使得XFire擁有很高的性能。
相對Axis來(lái)說(shuō),目前它的人氣指數相當高,加上其提供了和String集成的支持,在目前的Web Service開(kāi)源社區擁有眾多的追隨者,XFire被多個(gè)開(kāi)源項目所使用。XFire為Spring提供了支持,這使得我們可以很容易在Spring中使用XFire構建Web Service應用。本文講述了如何使用XFire在Spring中開(kāi)發(fā)Web Service的具體過(guò)程。
XFire特性
XFire是Web Service框架的后起之秀,它從現有的框架中借鑒了許多優(yōu)秀的理念,力爭將Web Service的應用開(kāi)發(fā)難度降到最低。此外,還提供了各種綁定技術(shù)、支持多種傳輸協(xié)議,對Web Service體系中許多新的規范提供了支持。簡(jiǎn)單來(lái)說(shuō),它具有以下一些特性:
XFire 體系及重要API
ServiceFactory是XFire的核心類(lèi),它可以將一個(gè)POJO生成為一個(gè)Web Service。讓我們通過(guò)一個(gè)最簡(jiǎn)單的例子了解ServiceFactory的用途,假設我們在一個(gè)POJO中定義了一個(gè)業(yè)務(wù),現在希望將其導出為Web Service,通過(guò)ServiceFactory可以輕而易舉地達到目的:
XFire xfire = XFireFactory.newInstance().getXFire();
ServiceFactory factory = new ObjectServiceFactory(xfire.getTransportManager(), null);
Service service = factory.create(YourService.class);
這樣我們就為YourService類(lèi)創(chuàng )建基于SOAP 1.1封裝的Web Service。Service的輸入輸出參數如果為簡(jiǎn)單類(lèi)型的對象(由String、int、long等基本類(lèi)型組成),無(wú)須進(jìn)行額外的映射設置,對于復雜類(lèi)型的輸入輸出Service,XFire將會(huì )自動(dòng)嘗試將其序列化(通過(guò)Aegis綁定)。緊接著(zhù),你就可以注冊這個(gè)Service。
xfire.getServiceRegistry().register(service);
XFire推薦通過(guò)一個(gè)接口開(kāi)放服務(wù),此時(shí),你可以指定一個(gè)具體的實(shí)現類(lèi):
service.setProperty(ObjectInvoker.SERVICE_IMPL_CLASS, YourServiceImpl.class);
一個(gè)Handler可以看成是XFire的一個(gè)加工套件,XFire通過(guò)它們定義SOAP發(fā)送和接收之前的各種加工處理邏輯。如Handler可以對SOAP體的內容進(jìn)行加工處理,或者SOAP頭進(jìn)行處理??梢院?jiǎn)單地通過(guò)擴展AbstractHandler定義一個(gè)自己的Handler類(lèi):
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.handler.AbstractHandler;
public class YourHandler extends AbstractHandler
{
public void invoke(MessageContext context)
{
// Do Sth...
}
}
Handler可以注冊到Service或Transport(代表SOAP輸入輸出的的傳輸對象)中,在服務(wù)請求和響應管道里,Service和Transport注冊的Handler將執行額外的處理操作。你可以按如下方式注冊Handler:
…
Servic s = factory.create(YourService.class);
s.addInHandler(new YourHandler1());①添加一個(gè)Handler,對輸入SOAP進(jìn)行處理
s.addOutHandler(new YourHandler2());②添加一個(gè)Handler,對輸出SOAP進(jìn)行處理
s.addFaultHandler(new YourHandler3());③添加一個(gè)Handler,對錯誤SOAP進(jìn)行處理
…
下面的Handler對SOAP頭進(jìn)行處理,添加一些特定的信息:
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.handler.AbstractHandler;
public class YourHandler extends AbstractHandler
{
…
public QName[] getUnderstoodHeaders()
{
return new QName[] { new QName("YourHeader", "urn:your:header:ns") };
}
}
聯(lián)系客服