REST端點,可使用Apache Camel進行集成

REST是一種用于組織資源的體系結構樣式,當應用于基于HTTP的服務時,REST可以構建無狀態的,解耦的,可伸縮的服務。 HTTP方法,HTTP標頭和mime類型都允許開發人員實現REST樣式。 諸如Jersey和Fuse Services Framework(Apache CXF)之類的框架可用于加快服務的開發和部署,以嘗試實現RESTful風格,在本博文中,我想討論如何構建資源的后端,依賴于Fuse中介路由器(也稱為Apache Camel)提供的集成。

順便說一句,對于那些想知道您的體系結構確實是RESTful還是REST試圖緩解的高度耦合的RPC風格的人,也許我很感興趣。 關于REST撰寫論文的Roy Fielding積極主張資源表示中的超鏈接對于REST風格必不可少的觀點,甚至進一步闡明了實現REST的不確定性。

該示例的源代碼可以在我的github存儲庫中找到

Fuse中介路由器是FuseSource的企業級硬化版Apache Camel,提供了舒適的DSL,用于描述集成,中介和路由。 它是免費的開放源代碼,并具有Apache許可證。 對于那些不熟悉Mediation Router / Camel的人,請看DZone企業集成區Apache Camel:Integration Nirvana的 Jon Anstey( Camel in Action的合著者)的介紹。

我們將使用中介路由器來幫助在REST端點和文件系統上的資源文件之間編寫簡單的集成。 我將使用camel-cxfrs組件公開REST端點,并將使用camel-file組件讀取文件系統上的目錄。 該樣本的目的是描述必要的配置,以通過中介路由器公開REST接口,以某種方式與后端集成,將數據轉換為適當的REST響應并發送回該響應。

首先,讓我們專注于如何設置REST端點。 為此,您將創建一個JAX-RS資源,該資源描述將用作REST端點的java方法。 此樣本代碼要求熟悉RESTful Web服務 (又稱JAX-RS)的Java API 。 對于那些不熟悉的人,這里有一些不錯的教程,可以幫助您理解JAX-RS。

@Path("/customerservice/")
public class CustomerServiceResource {// NOTE: The instance member variables will not be available to the
// Camel Exchange. They must be used as method parameters for them to
// be made available
@Context
private UriInfo uriInfo;public CustomerServiceResource() {
}@GET
@Path("/customers/{id}/")
@Produces("text/xml")
public Customer getCustomer(@PathParam("id") String id) {return null;
}@PUT
@Path("/customers/")
public Response updateCustomer(Customer customer) {return null;
}}

如您所見,注釋是JAX-RS注釋,用于描述REST端點所涉及的操作,HTTP方法和mime類型。 注意,返回值全為空,因為此類實際上將不會用于處理進入端點的請求。 中介路由器路由將負責處理和響應。 但是請注意,實例成員不可用于中介路由器交換,即,通過JAX-RS @Context注釋注入的任何實例成員將不可用。 要使它們可用,請將它們作為參數添加到您的方法中。

可以使用以下兩種方法之一來聲明使用中介路由器的CXF-RS端點:直接在端點配置中,如下所示:

from("cxfrs://http://localhost:9090/route?resourceClasses=com.fusesource.samples.CustomerServiceResource")

直接在配置中創建它需要較少的xml配置,但靈活性有限。 另一個選擇是創建一個負責端點的單獨的bean,然后在端點配置中引用它:

from("cxfrs:bean:rsServer")

Bean rsServer應該在駱駝上下文中定義。 例如:

<cxf:rsServer id="rsServer" address="http://localhost:9090/route"serviceClass="com.fusesource.samples.CustomerServiceResource"/>

這種方法允許您解耦端點配置,并允許端點配置更快,更省力。 盡管使用了第一個選項,但兩個選項都顯示在示例代碼中。

這就是使用中介路由器公開REST端點所需的全部配置。 很簡單。 下一步是根據來自REST端點的內容來使用文件系統中的文件。 該文件的內容將返回給REST調用的客戶端。 為此,我們使用駱駝文件組件,并通過DSL中的pollEnrich調用豐富Exchange:

.setHeader(Exchange.FILE_NAME, simple("test-${body}.xml"))
.pollEnrich("file:src/data?noop=true", 1000, new CustomerEnricher())

我們不能在pollEnrich調用中使用任何動態表達式,因此我們在設置擴展之前設置文件組件可以理解的標頭。 在這種情況下,REST消息的主體是可用于對文件系統資源進行模板化的標識符。

最后,我們可以對路線進行一些附加處理:

.process(new CustomerServiceProcessor())

如上所述,該示例的目的是顯示如何配置終結點并將其附加到進一步的中介路由器處理中。 請注意,REST端點的消息交換模式(MEP)為InOut并期望響應。 該示例并不意味著是完整的端到端解決方案,因為該解決方案將根據預期的功能而有所不同。 請注意上面有關Roy關于什么是REST和不是REST 的討論的鏈接。

如果我遺漏了一些內容,或者您??需要對示例進行更多說明,請給我評論,我們可以進行討論。

參考:來自Christian Posta Software博客的JCG合作伙伴 Christian Posta 使用Apache Camel進行集成的REST端點 。


翻譯自: https://www.javacodegeeks.com/2012/05/rest-endpoint-for-integration-using.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373198.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373198.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373198.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Appium+Python API相關知識了解

首先&#xff0c;要先了解&#xff0c;官方Appium API // https://testerhome.com/topics/3144 剛開始的時候&#xff0c;沒有看官方API&#xff0c;然后在網上瞎找學習資料&#xff0c;發現python相關的很少&#xff0c;看了API才知道&#xff0c;就是selenium webdriver的定位…

JSON用于多態Java對象序列化

長期以來&#xff0c;JSON已成為客戶端和服務器之間各種數據序列化的事實上的標準。 除其他外&#xff0c;它的優勢是簡單和易于閱讀。 但是&#xff0c;簡單起了一些限制&#xff0c;我今天要談的其中一個限制是&#xff1a;存儲和檢索多態Java對象。 讓我們從一個簡單的問題開…

linux 命令分類,常用linux 命令分類整理(篇一)

工作中接觸linux時間也不算短了&#xff0c;不同于Windows的圖形化操作&#xff0c;使用linux幾乎百分之九十五的情況是在命令行下過日子&#xff0c;過去的兩年里&#xff0c;零零碎碎整理過一版自己工作中涉及到和學習過的命令(不過常用的只有三十個左右)&#xff0c;思前想后…

考研復習策略

考研復習是一個不容易的過程&#xff0c;有好的策略事半功倍&#xff0c;以我曾經失敗的教訓和成功的實踐給出了我認為不錯的策略&#xff0c;只要能做到&#xff0c;我相信一定能考研成功。 院校選擇&#xff1a;985院校在選擇考研院校是有優勢的&#xff0c;院校考慮的因素有…

js中的this指針(二)

在 js 中聲明并定義一個函數后&#xff0c;除了定義時傳入的形式參數&#xff0c;函數還會接收到 2 個附加的參數&#xff1a;this 和 arguments。 this 指針的值取決于調用時的模式。 當這個函數被保存為對象的一個屬性時&#xff0c;它被稱為“方法”。當一個方法被調用時&am…

使用AspectJ和Spring簡化了AOP

我最近開始研究面向方面的編程&#xff08;AOP&#xff09;&#xff0c;至少可以說使我興奮。 當然我很熟悉它&#xff0c;因為我看到它在Spring中用于事務管理&#xff0c;但是我從未深入研究它。 在本文中&#xff0c;我想展示通過AspectJ可以快速掌握AOP和Spring。 本文中的…

第一沖刺階段 工作總結 04

1、昨天我繼續我的任務&#xff0c;連接數據庫。 2、今天打算繼續做數據庫的連接。 3、遇到的問題&#xff1a;昨天在數據庫連接時&#xff0c;老是連接不上&#xff0c;顯示錯誤&#xff0c;所以今天打算接著弄。轉載于:https://www.cnblogs.com/zz0906/p/5422510.html

windows2012同步linux時間,Windows server2012時間同步NTP配置

遇到經常服務器時間無法同步&#xff0c;可以自己建立一臺時間同步服務器&#xff0c;NTP配置如下&#xff1a;一、服務端配置 (Ntp服務器&#xff0c;客戶端將根據這臺服務器的時間進行同步)1、微軟鍵R鍵&#xff0c;進入“運行”&#xff0c;輸入“regedit”,進入注冊表2、 H…

反差萌

反差萌 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 0 Accepted Submission(s): 0 Problem Description有2N個人&#xff0c;每人有個萌值Mi(1<i<2N)。 要求將他們分為N對&#xff0c;使得反差值之和…

Java EE 6示例– Galleria第2部分

您可能在最后一篇Java EE 6 Galleria示例帖子中關注了我。 第一個是基本介紹。 第二個是關于在最新的GlassFish上運行它。 有人提到RedHat&#xff0c;我們應該研究將這個示例從GlassFish中移除。 很好;&#xff09;感謝您的好主意。 這正是我們今天要做的。 我將把Galleria示例…

suggest

http://lovebeyond.iteye.com/blog/941633轉載于:https://www.cnblogs.com/sunxun/p/5421251.html

linux的tar命令壓縮26g文件,linux如何使用tar命令大包壓縮進文件

linux如何使用tar命令大包壓縮進文件發布時間&#xff1a;2020-05-29 12:30:14來源&#xff1a;億速云閱讀&#xff1a;206作者&#xff1a;Leah本篇文章主要介紹linux中使用tar命令大包壓縮進文件的方法。內容比較詳細&#xff0c;文章包含了命令的使用示例&#xff0c;希望大…

與reCAPTCHA的Spring集成

有時我們只需要CAPTCHA &#xff0c;這是一個可悲的事實。 今天&#xff0c;我們將學習如何與reCAPTCHA集成。 因為主題本身并不是特別有趣和高級&#xff0c;所以我們將通過使用Spring Integration處理低級細節來過度設計&#xff08;&#xff1f;&#xff09;。 Google決定使…

《機器學習基石》---感知機算法

1 推導感知機模型 基本思想是&#xff0c;把特征的線性加權值作為一個分數&#xff0c;根據這個分數與一個門限值的關系來進行分類&#xff1a; 我們加一個特征x0等于1&#xff0c;門限值就可以放到w里面去&#xff0c;得到更簡單的形式&#xff1a; 這就是感知機模型&#xff…

未知錯誤:1000正在終止線程

若在try{} catch{}的catch 塊中加入 catch (Exception ex) { Response.Write(ex.Message); Response.End(); } 則捕獲異常后&#xff0c;提示未知錯誤&#xff1a;1000正在終止線程 轉載于:https://www.cnblogs.com/dennysong/p/5422567.…

分叉并加入Java 7 – JSR 166并發實用程序

Java 7最有趣的改進之一是對并發的更好支持。 使用JSR 166并發實用程序&#xff0c;我們可以對并發進行一些非常有用的改進。 在我看來&#xff0c;fork-join庫在軟件工程中具有很高的實際應用潛力。 Fork and join為算法提供了非常簡單的編程模型&#xff0c;可以將其實現為遞…

linux內核源碼代碼量,Linux內核源代碼數量已經超過1000萬行

Linux版本2.6.27更新后,人們發現,這一內核的源代碼數量已經超過了1000萬行.當然,這些行數僅僅是計算機統計出來的行數,包括空白行,為了代碼的可讀性增加的注釋等,當然Linux和所有的長期項目一樣,隨著時間的推移,舊的代碼 會被丟棄和更換,但總體規模來說,Linux的內核在不斷增強,…

Python之路【第八篇】:堡壘機實例以及數據庫操作

Python之路【第八篇】&#xff1a;堡壘機實例以及數據庫操作 堡壘機前戲 開發堡壘機之前&#xff0c;先來學習Python的paramiko模塊&#xff0c;該模塊機遇SSH用于連接遠程服務器并執行相關操作 SSHClient 用于連接遠程服務器并執行基本命令 基于用戶名密碼連接&#xff1a; 12…

關于typedef的使用方法

在計算機編程語言中用來為復雜的聲明定義簡單的別名。與宏定義有些差異。它本身是一種存儲類的keyword&#xff0c;與auto、extern、mutable、static、register等keyword不能出如今同一個表達式中。typedef聲明&#xff0c;簡稱typedef&#xff0c;為現有類型創建一個新的名字&…

ADF BC:創建綁定到業務組件的UI表

在此示例中&#xff0c;我們將展示如何創建綁定到業務組件的簡單UI表&#xff08;af&#xff1a;table&#xff09;。 我再次嘗試使用簡單的標準在網上進行搜索&#xff1a; “如何創建綁定到業務組件ADF 11g的af&#xff1a;table” 我必須承認我沒有得到我想要的答案。 信息…