国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java系統WebService:Spring與CXF的集成

waterc / 2518人閱讀

摘要:我們再使用這樣的來查看這個服務具體的定義這個用以通過查看服務也就是我們開頭所說的用通用格式來描述的功能入參和返回值,使我們的調用者明白服務的使用方法具體詳情可以查看我們的這個服務的頁面。

WebService是什么呢?顧名思義,是Web系統提供的服務,其目的呢,往大了說:是系統實現多異構模塊協同合作,服務實現SOA(Services oriented Architecture面向服務的體系結構),往小了說:我們的系統模塊能夠定義一些功能開放給其他模塊,也可以調用其他模塊的一些功能。

WebService的實現基本原理就是選擇一個各異構系統(結構、開發方式、運行環境等都不完全相同)都能處理的交互信息的方式,讓各系統模塊能夠“聽懂”彼此的請求,也可以“告訴”彼此自己的請求,進而實現功能的調用,將追求的功能轉為一組合適的通用交互API,開發者只需要根據開放出的API在自己的系統中發出合乎要求的請求就可以了。因此,XML這一相對來說通用性非常強的消息傳遞方式被選為了完成這一任務的“傳遞語言”:服務發布方用XML來描述自己系統內開放功能的XML格式的API,其中方法的名稱、入參、返回值等都在XML中有明確規定,服務調用方則將自己需要功能的方法、入參、返回值等信息通過XML告知服務發布方,如此一來,就實現了WebService的交互。

如果每個系統都要從頭開始構建自己的WebService描述,處理服務消息發布、接收等任務的話系統的重用性將大大降低,因此,就像所有的系統級開發一樣,在WebService這里也有很多現成的框架來幫助開發者快速部署自己的Web服務。現在的主流WebService服務框架主要有:

1、JWS(Java WebService)是Java語言對WebService服務的一種實現,用來開發和發布服務。而從服務本身的角度來看JWS服務是沒有語言界限的。但是Java語言為Java開發者提供便捷發布和調用WebService服務的一種途徑。這是最原生的JAVA語言層面上支持的WebService,只不過功能較弱。

2、Axis2是Apache下的一個重量級WebService框架,準確說它是一個Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能制作和發布WebService,而且可以生成Java和其他語言版WebService客戶端和服務端代碼。這是它的優勢所在。但是,這也不可避免的導致了Axis2的復雜性,使用過的開發者都知道,它所依賴的包數量和大小都是很驚人的,打包部署發布都比較麻煩,不能很好的與現有應用整合為一體。但是如果你要開發Java之外別的語言客戶端,Axis2提供的豐富工具將是你不二的選擇。

3、XFire是一個高性能的WebService框架,在Java6之前,它的知名度甚至超過了Apache的Axis2,XFire的優點是開發方便,與現有的Web整合很好,可以融為一體,并且開發也很方便。但是對Java之外的語言,沒有提供相關的代碼工具。XFire后來被Apache收購了,原因是它太優秀了,收購后,隨著Java6 JWS的興起,開源的WebService引擎已經不再被看好,漸漸的都敗落了。

4、CXF是Apache旗下一個重磅的SOA簡易框架,它實現了ESB(企業服務總線)。CXF來自于XFire項目,經過改造后形成的,就像目前的Struts2來自WebWork一樣。可以看出XFire的命運會和WebWork的命運一樣,最終會淡出人們的視線。CXF不但是一個優秀的Web Services / SOAP / WSDL 引擎,也是一個不錯的ESB總線,為SOA的實施提供了一種選擇方案,當然他不是最好的,它僅僅實現了SOA架構的一部分。

在這里,我們使用Spring這一依賴注入框架和CXF這一WebService框架來寫一個Demo用以展示WebService構建Java下Web服務的基本過程。

我們使用Eclipse在JDK6下開發,導入的CXF框架版本2.7,合適的版本對環境的搭建非常重要,不匹配的版本無法正常協同工作。

新建Web工程HowIsTheWeather,導入CXF的lib目錄下的全部包,其中包括Spring的包,這些包將在Eclipse的默認構建環境下加入項目編譯的classpath下。

創建WebService服務接口com.rocking.weather.WeatherService:

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

實現以上接口的實現類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的服務servlet和Spring的IOC容器:

Spring IOC容器使用ContextLoaderListener監聽器來注入需要的bean,bean的配置詳情寫在classpath下的applicationContext-server.xml(實際也就是src下的applicationContext-server.xml,在構建后classpath下就會出現這個配置文件)。

同所有的servlet一樣,servlet存在的目的就是將web前端的URL請求映射到后臺的處理器中去,因此web.xml中需要配置映射原則,這里我們可以看到CXFServlet用于映射帶有ws標識的URL到自己的處理范圍里,也就是說,一旦滿足這樣模式的URL,都將請求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則負責Spring容器中的bean注入的詳情,這里配置的bean都將在容器啟動的時候裝配注入進去,jaxws可以看作是一種特殊的bean,WebService服務實體bean,這是CXF框架為Spring提供的集成支持,在這里我們可以看到,當URL的請求地址為/getWeather時,將會調用我們已經注入的服務bean處理這個請求,進而完成外界對系統開放的WebService的調用。

applicationContext-server.xml:



    
    
    
    

將我們的工程部署到Tomcat服務器中去,啟動服務器查看如下URL:http://localhost:8080/HowIsTheWeather/ws
在這里瀏覽器會返回CXF渲染的web頁面用以說明當前的CXFServlet能夠導向的服務有哪些:WeatherService使用/getWeather的URL就可以調用。
我們再使用這樣的URL來查看這個服務具體的定義:http://localhost:8080/HowIsTheWeather/ws/getWeather?wsdl
這個URL用以通過WSDL(WebService Description Language)查看Web服務:也就是我們開頭所說的用通用格式來描述WebService的功能、入參和返回值,使我們的調用者明白服務的使用方法:具體詳情可以查看我們的這個服務的WSDL頁面。

至此,說明我們的服務已經部署到我們的服務器上了,接下來需要有客戶端來調用這個服務,我們仍然使用Spring的依賴注入來處理:

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:



    
    
    
    
    
        
        
    

這樣我們就在同一系統中實現了WebService的調用,但是,我們不得不說這不是我們的要求,因為誰也不會大費周折在項目內部從WebService獲取服務。我們的目的是在另一個項目中獲取這個項目提供的開放服務,而另一個系統需要的,就是這個服務提供的接口:WeatherService,這樣一來,我們可以直接使用這個接口的源文件,或者打成jar包提供給調用方。

在這里,我們新建一個一般的Java項目,將CXF的包導入classpath,將WeatherService接口導入到和原來在服務提供方一樣的包路徑下(這和jar包的自動路徑是一樣的),然后配置好Spring的配置文件:



    
    
    
    
    
        
        
    

或者這樣注入:


Client客戶端可以調用接口,像調用本地方法一樣調用遠程服務提供的方法。

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);
    }
}

以上內容就是我們展示的CXF和Spring集成的WebService開發過程,例子雖小,但是闡明了WebService創建的基本過程。

現在我們回過頭來想,我們當初所說的WebService的調用方使用XML格式發送消息接收消息并沒有看到啊,我們這里直接使用了導入的本地接口像調用本地方法一樣調用遠程方法,看來和XML沒有什么區別啊,其實這就是WebService框架帶來的好處,我們在代碼中雖然沒有出現XML,但是這些請求會在CXF的幫助下變成XML在服務器端和服務交互,得到的結果也會以類似的樣子返回來,只不過我們看到的都是冰層之上的事情了,這也從一個側面反映了WebService框架開發帶來的好處。

另外,我們在服務的WSDL頁面上其實已經看到了CXF為我們的代碼生成的使用WSDL描述的XML化的服務“說明書”,如果想要更徹底地通過服務源碼獲取可以移植到客戶端的接口,可以使用CXF的wsdl2java工具來生成接口。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65427.html

相關文章

  • WebService就是這么簡單

    摘要:它使用方式,接收和響應外部系統的某種請求。回顧我們在學習基礎網絡編程章節已經知道了這么一個連接了。使用指定名稱的命名空間。名詞簡單對象訪問協議作為一個基于語言的協議用于有網上傳輸數據。以的根元素出現。代理這么一個概念就更加清晰了。 WebService介紹 首先我們來談一下為什么需要學習webService這樣的一個技術吧.... 問題一 如果我們的網站需要提供一個天氣預報這樣一個需求...

    SwordFly 評論0 收藏0
  • SpringBoot 使用CXF 集成WebService

    摘要:啟動后我們直接輸入項目地址指定的服務名會看到生成的。測試在這就不寫了,大家可以使用生成客戶端,或者直接使用發送格式數據進行請求。總結使用集成開發很簡單,不用在單獨的部署到外部上,這為我們熟悉開發的同學帶了很好的體驗。 1、寫在前面 WebService 對我來說既熟悉又陌生,已經將近六七年沒有看到過他了, 具體的介紹我就不多少了, 想了解的百度百科下說的很詳細。 之所以突然研究WebS...

    miracledan 評論0 收藏0
  • RPC框架是啥之Apache CXF一款WebService RPC框架入門教程

    摘要:支持相關規范和標準,包括同上。支持多種傳輸協議和協議綁定數據綁定。構建端還有其服務實現,接口使用注解,標明是一個遠程服務接口。然后編寫一個的啟動程序,并運行,我想你會成功的因為我看到了下圖是一種跨平臺的技術協議。 本博客 貓叔的博客,轉載請申明出處 學習系列 RPC框架是啥? RPC框架是啥之Java自帶RPC實現,RMI框架入門 Apache CXF一款WebService RP...

    SolomonXie 評論0 收藏0
  • 使用 Apache cxf 實現 WebService 客戶端

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

    mingzhong 評論0 收藏0
  • 使用 Apache cxf 創建 WebService 服務端

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

    seasonley 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<