REST端点,可使用Apache Camel进行集成
順便說一句,對于那些想知道您的體系結(jié)構(gòu)確實(shí)是RESTful還是REST試圖緩解的高度耦合的RPC風(fēng)格的人,也許我很感興趣。 關(guān)于REST撰寫論文的Roy Fielding積極主張資源表示中的超鏈接對于REST風(fēng)格必不可少的觀點(diǎn),甚至進(jìn)一步闡明了實(shí)現(xiàn)REST的不確定性。
該示例的源代碼可以在我的github存儲庫中找到
Fuse中介路由器是FuseSource的企業(yè)級硬化版Apache Camel,提供了舒適的DSL,用于描述集成,中介和路由。 它是免費(fèi)的開放源代碼,并具有Apache許可證。 對于那些不熟悉Mediation Router / Camel的人,請看DZone企業(yè)集成區(qū)Apache Camel:Integration Nirvana的 Jon Anstey( Camel in Action的合著者)的介紹。
我們將使用中介路由器來幫助在REST端點(diǎn)和文件系統(tǒng)上的資源文件之間編寫簡單的集成。 我將使用camel-cxfrs組件公開REST端點(diǎn),并將使用camel-file組件讀取文件系統(tǒng)上的目錄。 該樣本的目的是描述必要的配置,以通過中介路由器公開REST接口,以某種方式與后端集成,將數(shù)據(jù)轉(zhuǎn)換為適當(dāng)?shù)腞EST響應(yīng)并發(fā)送回該響應(yīng)。
首先,讓我們專注于如何設(shè)置REST端點(diǎn)。 為此,您將創(chuàng)建一個JAX-RS資源,該資源描述將用作REST端點(diǎn)的java方法。 此樣本代碼要求熟悉RESTful Web服務(wù) (又稱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端點(diǎn)所涉及的操作,HTTP方法和mime類型。 注意,返回值全為空,因?yàn)榇祟悓?shí)際上將不會用于處理進(jìn)入端點(diǎn)的請求。 中介路由器路由將負(fù)責(zé)處理和響應(yīng)。 但是請注意,實(shí)例成員不可用于中介路由器交換,即,通過JAX-RS @Context注釋注入的任何實(shí)例成員將不可用。 要使它們可用,請將它們作為參數(shù)添加到您的方法中。
可以使用以下兩種方法之一來聲明使用中介路由器的CXF-RS端點(diǎn):直接在端點(diǎn)配置中,如下所示:
from("cxfrs://http://localhost:9090/route?resourceClasses=com.fusesource.samples.CustomerServiceResource")直接在配置中創(chuàng)建它需要較少的xml配置,但靈活性有限。 另一個選擇是創(chuàng)建一個負(fù)責(zé)端點(diǎn)的單獨(dú)的bean,然后在端點(diǎn)配置中引用它:
from("cxfrs:bean:rsServer")Bean rsServer應(yīng)該在駱駝上下文中定義。 例如:
<cxf:rsServer id="rsServer" address="http://localhost:9090/route"serviceClass="com.fusesource.samples.CustomerServiceResource"/>這種方法允許您解耦端點(diǎn)配置,并允許端點(diǎn)配置更快,更省力。 盡管使用了第一個選項(xiàng),但兩個選項(xiàng)都顯示在示例代碼中。
這就是使用中介路由器公開REST端點(diǎn)所需的全部配置。 很簡單。 下一步是根據(jù)來自REST端點(diǎn)的內(nèi)容來使用文件系統(tǒng)中的文件。 該文件的內(nèi)容將返回給REST調(diào)用的客戶端。 為此,我們使用駱駝文件組件,并通過DSL中的pollEnrich調(diào)用豐富Exchange:
.setHeader(Exchange.FILE_NAME, simple("test-${body}.xml")) .pollEnrich("file:src/data?noop=true", 1000, new CustomerEnricher())我們不能在pollEnrich調(diào)用中使用任何動態(tài)表達(dá)式,因此我們在設(shè)置擴(kuò)展之前設(shè)置文件組件可以理解的標(biāo)頭。 在這種情況下,REST消息的主體是可用于對文件系統(tǒng)資源進(jìn)行模板化的標(biāo)識符。
最后,我們可以對路線進(jìn)行一些附加處理:
.process(new CustomerServiceProcessor())如上所述,該示例的目的是顯示如何配置終結(jié)點(diǎn)并將其附加到進(jìn)一步的中介路由器處理中。 請注意,REST端點(diǎn)的消息交換模式(MEP)為InOut并期望響應(yīng)。 該示例并不意味著是完整的端到端解決方案,因?yàn)樵摻鉀Q方案將根據(jù)預(yù)期的功能而有所不同。 請注意上面有關(guān)Roy關(guān)于什么是REST和不是REST 的討論的鏈接。
如果我遺漏了一些內(nèi)容,或者您??需要對示例進(jìn)行更多說明,請給我評論,我們可以進(jìn)行討論。
參考:來自Christian Posta Software博客的JCG合作伙伴 Christian Posta 使用Apache Camel進(jìn)行集成的REST端點(diǎn) 。
翻譯自: https://www.javacodegeeks.com/2012/05/rest-endpoint-for-integration-using.html
總結(jié)
以上是生活随笔為你收集整理的REST端点,可使用Apache Camel进行集成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 男短发发型2022年最新款(夏季男生渐变
- 下一篇: ADF BC:创建绑定到业务组件的UI表