成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Java系統(tǒng)WebService:Spring與CXF的集成

waterc / 2556人閱讀

摘要:我們?cè)偈褂眠@樣的來(lái)查看這個(gè)服務(wù)具體的定義這個(gè)用以通過(guò)查看服務(wù)也就是我們開(kāi)頭所說(shuō)的用通用格式來(lái)描述的功能入?yún)⒑头祷刂担刮覀兊恼{(diào)用者明白服務(wù)的使用方法具體詳情可以查看我們的這個(gè)服務(wù)的頁(yè)面。

WebService是什么呢?顧名思義,是Web系統(tǒng)提供的服務(wù),其目的呢,往大了說(shuō):是系統(tǒng)實(shí)現(xiàn)多異構(gòu)模塊協(xié)同合作,服務(wù)實(shí)現(xiàn)SOA(Services oriented Architecture面向服務(wù)的體系結(jié)構(gòu)),往小了說(shuō):我們的系統(tǒng)模塊能夠定義一些功能開(kāi)放給其他模塊,也可以調(diào)用其他模塊的一些功能。

WebService的實(shí)現(xiàn)基本原理就是選擇一個(gè)各異構(gòu)系統(tǒng)(結(jié)構(gòu)、開(kāi)發(fā)方式、運(yùn)行環(huán)境等都不完全相同)都能處理的交互信息的方式,讓各系統(tǒng)模塊能夠“聽(tīng)懂”彼此的請(qǐng)求,也可以“告訴”彼此自己的請(qǐng)求,進(jìn)而實(shí)現(xiàn)功能的調(diào)用,將追求的功能轉(zhuǎn)為一組合適的通用交互API,開(kāi)發(fā)者只需要根據(jù)開(kāi)放出的API在自己的系統(tǒng)中發(fā)出合乎要求的請(qǐng)求就可以了。因此,XML這一相對(duì)來(lái)說(shuō)通用性非常強(qiáng)的消息傳遞方式被選為了完成這一任務(wù)的“傳遞語(yǔ)言”:服務(wù)發(fā)布方用XML來(lái)描述自己系統(tǒng)內(nèi)開(kāi)放功能的XML格式的API,其中方法的名稱(chēng)、入?yún)ⅰ⒎祷刂档榷荚赬ML中有明確規(guī)定,服務(wù)調(diào)用方則將自己需要功能的方法、入?yún)?、返回值等信息通過(guò)XML告知服務(wù)發(fā)布方,如此一來(lái),就實(shí)現(xiàn)了WebService的交互。

如果每個(gè)系統(tǒng)都要從頭開(kāi)始構(gòu)建自己的WebService描述,處理服務(wù)消息發(fā)布、接收等任務(wù)的話系統(tǒng)的重用性將大大降低,因此,就像所有的系統(tǒng)級(jí)開(kāi)發(fā)一樣,在WebService這里也有很多現(xiàn)成的框架來(lái)幫助開(kāi)發(fā)者快速部署自己的Web服務(wù)?,F(xiàn)在的主流WebService服務(wù)框架主要有:

1、JWS(Java WebService)是Java語(yǔ)言對(duì)WebService服務(wù)的一種實(shí)現(xiàn),用來(lái)開(kāi)發(fā)和發(fā)布服務(wù)。而從服務(wù)本身的角度來(lái)看JWS服務(wù)是沒(méi)有語(yǔ)言界限的。但是Java語(yǔ)言為Java開(kāi)發(fā)者提供便捷發(fā)布和調(diào)用WebService服務(wù)的一種途徑。這是最原生的JAVA語(yǔ)言層面上支持的WebService,只不過(guò)功能較弱。

2、Axis2是Apache下的一個(gè)重量級(jí)WebService框架,準(zhǔn)確說(shuō)它是一個(gè)Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能制作和發(fā)布WebService,而且可以生成Java和其他語(yǔ)言版WebService客戶(hù)端和服務(wù)端代碼。這是它的優(yōu)勢(shì)所在。但是,這也不可避免的導(dǎo)致了Axis2的復(fù)雜性,使用過(guò)的開(kāi)發(fā)者都知道,它所依賴(lài)的包數(shù)量和大小都是很驚人的,打包部署發(fā)布都比較麻煩,不能很好的與現(xiàn)有應(yīng)用整合為一體。但是如果你要開(kāi)發(fā)Java之外別的語(yǔ)言客戶(hù)端,Axis2提供的豐富工具將是你不二的選擇。

3、XFire是一個(gè)高性能的WebService框架,在Java6之前,它的知名度甚至超過(guò)了Apache的Axis2,XFire的優(yōu)點(diǎn)是開(kāi)發(fā)方便,與現(xiàn)有的Web整合很好,可以融為一體,并且開(kāi)發(fā)也很方便。但是對(duì)Java之外的語(yǔ)言,沒(méi)有提供相關(guān)的代碼工具。XFire后來(lái)被Apache收購(gòu)了,原因是它太優(yōu)秀了,收購(gòu)后,隨著Java6 JWS的興起,開(kāi)源的WebService引擎已經(jīng)不再被看好,漸漸的都敗落了。

4、CXF是Apache旗下一個(gè)重磅的SOA簡(jiǎn)易框架,它實(shí)現(xiàn)了ESB(企業(yè)服務(wù)總線)。CXF來(lái)自于XFire項(xiàng)目,經(jīng)過(guò)改造后形成的,就像目前的Struts2來(lái)自WebWork一樣??梢钥闯鯴Fire的命運(yùn)會(huì)和WebWork的命運(yùn)一樣,最終會(huì)淡出人們的視線。CXF不但是一個(gè)優(yōu)秀的Web Services / SOAP / WSDL 引擎,也是一個(gè)不錯(cuò)的ESB總線,為SOA的實(shí)施提供了一種選擇方案,當(dāng)然他不是最好的,它僅僅實(shí)現(xiàn)了SOA架構(gòu)的一部分。

在這里,我們使用Spring這一依賴(lài)注入框架和CXF這一WebService框架來(lái)寫(xiě)一個(gè)Demo用以展示W(wǎng)ebService構(gòu)建Java下Web服務(wù)的基本過(guò)程。

我們使用Eclipse在JDK6下開(kāi)發(fā),導(dǎo)入的CXF框架版本2.7,合適的版本對(duì)環(huán)境的搭建非常重要,不匹配的版本無(wú)法正常協(xié)同工作。

新建Web工程HowIsTheWeather,導(dǎo)入CXF的lib目錄下的全部包,其中包括Spring的包,這些包將在Eclipse的默認(rèn)構(gòu)建環(huán)境下加入項(xiàng)目編譯的classpath下。

創(chuàng)建WebService服務(wù)接口com.rocking.weather.WeatherService:

@WebService
public interface WeatherService {
    public String getWeather(String city);
}

實(shí)現(xiàn)以上接口的實(shí)現(xiàn)類(lèi)com.rocking.weather.WeatherServiceImpl:

@WebService(endpointInterface = "com.rocking.weather.WeatherService", serviceName = "WeatherService")
public class WeatherServiceImpl implements WeatherService{
    @Override
    public String getWeather(String city) {
        //fake weather data:
        String shanghai = "12C,almost sunny";
        String beijing = "7C,most part fog";
        String guangzhou = "20C,a little rain";
        if(city.equals("shanghai"))
            return shanghai;
        else if(city.equals("beijing"))
            return beijing;
        else if (city.equals("guangzhou"))
            return guangzhou;
        else 
            return "no data";
    }
}

在Web.xml中聲明基本的CXF的服務(wù)servlet和Spring的IOC容器:

Spring IOC容器使用ContextLoaderListener監(jiān)聽(tīng)器來(lái)注入需要的bean,bean的配置詳情寫(xiě)在classpath下的applicationContext-server.xml(實(shí)際也就是src下的applicationContext-server.xml,在構(gòu)建后classpath下就會(huì)出現(xiàn)這個(gè)配置文件)。

同所有的servlet一樣,servlet存在的目的就是將web前端的URL請(qǐng)求映射到后臺(tái)的處理器中去,因此web.xml中需要配置映射原則,這里我們可以看到CXFServlet用于映射帶有ws標(biāo)識(shí)的URL到自己的處理范圍里,也就是說(shuō),一旦滿(mǎn)足這樣模式的URL,都將請(qǐng)求WebService。

web.xml:



    HowIsTheWeather
    
        contextConfigLocation
        classpath:applicationContext-server.xml
    
    
        org.springframework.web.context.ContextLoaderListener
    
    
        CXFServlet
        CXFServlet
        org.apache.cxf.transport.servlet.CXFServlet
        1
    
    
        CXFServlet
        /ws/*
    

applicationContext-server.xml則負(fù)責(zé)Spring容器中的bean注入的詳情,這里配置的bean都將在容器啟動(dòng)的時(shí)候裝配注入進(jìn)去,jaxws可以看作是一種特殊的bean,WebService服務(wù)實(shí)體bean,這是CXF框架為Spring提供的集成支持,在這里我們可以看到,當(dāng)URL的請(qǐng)求地址為/getWeather時(shí),將會(huì)調(diào)用我們已經(jīng)注入的服務(wù)bean處理這個(gè)請(qǐng)求,進(jìn)而完成外界對(duì)系統(tǒng)開(kāi)放的WebService的調(diào)用。

applicationContext-server.xml:



    
    
    
    

將我們的工程部署到Tomcat服務(wù)器中去,啟動(dòng)服務(wù)器查看如下URL:http://localhost:8080/HowIsTheWeather/ws
在這里瀏覽器會(huì)返回CXF渲染的web頁(yè)面用以說(shuō)明當(dāng)前的CXFServlet能夠?qū)虻姆?wù)有哪些:WeatherService使用/getWeather的URL就可以調(diào)用。
我們?cè)偈褂眠@樣的URL來(lái)查看這個(gè)服務(wù)具體的定義:http://localhost:8080/HowIsTheWeather/ws/getWeather?wsdl
這個(gè)URL用以通過(guò)WSDL(WebService Description Language)查看Web服務(wù):也就是我們開(kāi)頭所說(shuō)的用通用格式來(lái)描述WebService的功能、入?yún)⒑头祷刂担刮覀兊恼{(diào)用者明白服務(wù)的使用方法:具體詳情可以查看我們的這個(gè)服務(wù)的WSDL頁(yè)面。

至此,說(shuō)明我們的服務(wù)已經(jīng)部署到我們的服務(wù)器上了,接下來(lái)需要有客戶(hù)端來(lái)調(diào)用這個(gè)服務(wù),我們?nèi)匀皇褂肧pring的依賴(lài)注入來(lái)處理:

public class Client {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "applicationContext-client.xml");
        WeatherService weatherService = (WeatherService) context.getBean("client");
        String response = weatherService.getWeather("beijing");
        System.out.println(response);
    }
}

applicationContext-client.xml:



    
    
    
    
    
        
        
    

這樣我們就在同一系統(tǒng)中實(shí)現(xiàn)了WebService的調(diào)用,但是,我們不得不說(shuō)這不是我們的要求,因?yàn)檎l(shuí)也不會(huì)大費(fèi)周折在項(xiàng)目?jī)?nèi)部從WebService獲取服務(wù)。我們的目的是在另一個(gè)項(xiàng)目中獲取這個(gè)項(xiàng)目提供的開(kāi)放服務(wù),而另一個(gè)系統(tǒng)需要的,就是這個(gè)服務(wù)提供的接口:WeatherService,這樣一來(lái),我們可以直接使用這個(gè)接口的源文件,或者打成jar包提供給調(diào)用方。

在這里,我們新建一個(gè)一般的Java項(xiàng)目,將CXF的包導(dǎo)入classpath,將WeatherService接口導(dǎo)入到和原來(lái)在服務(wù)提供方一樣的包路徑下(這和jar包的自動(dòng)路徑是一樣的),然后配置好Spring的配置文件:



    
    
    
    
    
        
        
    

或者這樣注入:


Client客戶(hù)端可以調(diào)用接口,像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程服務(wù)提供的方法。

public class Client {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "applicationContext-client.xml");
        WeatherService weatherService = (WeatherService) context.getBean("client");
        String response = weatherService.getWeather("shanghai");
        System.out.println(response);
    }
}

以上內(nèi)容就是我們展示的CXF和Spring集成的WebService開(kāi)發(fā)過(guò)程,例子雖小,但是闡明了WebService創(chuàng)建的基本過(guò)程。

現(xiàn)在我們回過(guò)頭來(lái)想,我們當(dāng)初所說(shuō)的WebService的調(diào)用方使用XML格式發(fā)送消息接收消息并沒(méi)有看到啊,我們這里直接使用了導(dǎo)入的本地接口像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法,看來(lái)和XML沒(méi)有什么區(qū)別啊,其實(shí)這就是WebService框架帶來(lái)的好處,我們?cè)诖a中雖然沒(méi)有出現(xiàn)XML,但是這些請(qǐng)求會(huì)在CXF的幫助下變成XML在服務(wù)器端和服務(wù)交互,得到的結(jié)果也會(huì)以類(lèi)似的樣子返回來(lái),只不過(guò)我們看到的都是冰層之上的事情了,這也從一個(gè)側(cè)面反映了WebService框架開(kāi)發(fā)帶來(lái)的好處。

另外,我們?cè)诜?wù)的WSDL頁(yè)面上其實(shí)已經(jīng)看到了CXF為我們的代碼生成的使用WSDL描述的XML化的服務(wù)“說(shuō)明書(shū)”,如果想要更徹底地通過(guò)服務(wù)源碼獲取可以移植到客戶(hù)端的接口,可以使用CXF的wsdl2java工具來(lái)生成接口。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65427.html

相關(guān)文章

  • WebService就是這么簡(jiǎn)單

    摘要:它使用方式,接收和響應(yīng)外部系統(tǒng)的某種請(qǐng)求。回顧我們?cè)趯W(xué)習(xí)基礎(chǔ)網(wǎng)絡(luò)編程章節(jié)已經(jīng)知道了這么一個(gè)連接了。使用指定名稱(chēng)的命名空間。名詞簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議作為一個(gè)基于語(yǔ)言的協(xié)議用于有網(wǎng)上傳輸數(shù)據(jù)。以的根元素出現(xiàn)。代理這么一個(gè)概念就更加清晰了。 WebService介紹 首先我們來(lái)談一下為什么需要學(xué)習(xí)webService這樣的一個(gè)技術(shù)吧.... 問(wèn)題一 如果我們的網(wǎng)站需要提供一個(gè)天氣預(yù)報(bào)這樣一個(gè)需求...

    SwordFly 評(píng)論0 收藏0
  • SpringBoot 使用CXF 集成WebService

    摘要:?jiǎn)?dòng)后我們直接輸入項(xiàng)目地址指定的服務(wù)名會(huì)看到生成的。測(cè)試在這就不寫(xiě)了,大家可以使用生成客戶(hù)端,或者直接使用發(fā)送格式數(shù)據(jù)進(jìn)行請(qǐng)求。總結(jié)使用集成開(kāi)發(fā)很簡(jiǎn)單,不用在單獨(dú)的部署到外部上,這為我們熟悉開(kāi)發(fā)的同學(xué)帶了很好的體驗(yàn)。 1、寫(xiě)在前面 WebService 對(duì)我來(lái)說(shuō)既熟悉又陌生,已經(jīng)將近六七年沒(méi)有看到過(guò)他了, 具體的介紹我就不多少了, 想了解的百度百科下說(shuō)的很詳細(xì)。 之所以突然研究WebS...

    miracledan 評(píng)論0 收藏0
  • RPC框架是啥之Apache CXF一款WebService RPC框架入門(mén)教程

    摘要:支持相關(guān)規(guī)范和標(biāo)準(zhǔn),包括同上。支持多種傳輸協(xié)議和協(xié)議綁定數(shù)據(jù)綁定。構(gòu)建端還有其服務(wù)實(shí)現(xiàn),接口使用注解,標(biāo)明是一個(gè)遠(yuǎn)程服務(wù)接口。然后編寫(xiě)一個(gè)的啟動(dòng)程序,并運(yùn)行,我想你會(huì)成功的因?yàn)槲铱吹搅讼聢D是一種跨平臺(tái)的技術(shù)協(xié)議。 本博客 貓叔的博客,轉(zhuǎn)載請(qǐng)申明出處 學(xué)習(xí)系列 RPC框架是啥? RPC框架是啥之Java自帶RPC實(shí)現(xiàn),RMI框架入門(mén) Apache CXF一款WebService RP...

    SolomonXie 評(píng)論0 收藏0
  • 使用 Apache cxf 實(shí)現(xiàn) WebService 客戶(hù)端

    摘要:證書(shū)有兩種形式指定路徑有三種形式的插件可以指定參數(shù)來(lái)解決一下常見(jiàn)的問(wèn)題下的可以選擇所需的命令參數(shù)使用參考添加解決中命名沖突添加指定自動(dòng)生成的包名 ws-client-demo 客戶(hù)端調(diào)用遠(yuǎn)程服務(wù) http://localhost:8280/services/HelloWorld?wsdl spring + cfx 配置 maven 添加依賴(lài)包 org.apache.cxf c...

    mingzhong 評(píng)論0 收藏0
  • 使用 Apache cxf 創(chuàng)建 WebService 服務(wù)端

    摘要:本地服務(wù)地址具體端口跟配置有關(guān)配置添加依賴(lài)包在增加的配置和的配置編寫(xiě)服務(wù)在增加的配置,記得要的配置就能看到接口說(shuō)明可以直接運(yùn)行的 ws-server-demo 本地服務(wù)地址(具體端口跟tomcat配置有關(guān)) http://localhost:8280/services/HelloWorld?wsdl spring + cfx 配置 maven 添加依賴(lài)包 org.apache.c...

    seasonley 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<