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软件博客上的REST端点,用于使用我们的JCG合作伙伴 Christian Posta的Apache Camel进行集成 。
翻译自: https://www.javacodegeeks.com/2012/05/rest-endpoint-for-integration-using.html
apache camel