`
honno
  • 浏览: 56685 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

扩展camel功能,使它支持SDO

阅读更多

背景


      camel 已经具备了通过多种方式(在camel中称为language )访问exchange的header、property和body,比如
bean,constant,simple,xpath,jxpath,ognl,mvel,scripting等。这些方式可以很容易地操作exchange的内容。如果exchange中包含的内容是一个sdo实例,也就是一个DataObject,那么camel如何去操作它呢?根据我们的理解,DataObject也是一个JavaBean,因为jxpath 可以直接处理JavaBean,除此之外jxpath还可以处理Map,DOM,Servlet等,所以使用jxpath不就可以操作sdo了吗?


实例分析


      下面是截取的部分exchange的内容,可以看到它的BodyType和Body。


Headers:{JMSTimestamp=1258701583453, JMSDeliveryMode=1, JMSMessageID=ID:honnom-1258701582234-0:0:1:2:1, JMSXGroupID=null,
JMSPriority=4, JMSType=null, JMSCorrelationID=null, JMSDestination=queue://in, JMSRedelivered=false, JMSReplyTo=null, JMSExpiration=0},
BodyType:com.honnom.sdo.impl.DataObjectImpl, Body:<supermarketType __type="sdo:http://www.example.com/supermarket#supermarketType" __id="0">
<Name __type="java:java.lang.String">NGS</Name><Address __type="sdo:http://www.example.com/supermarket#addressType" __id="2">
<Street __type="java:java.lang.String">ZhangJiang</Street><City __type="java:java.lang.String">ShangHai</City>
<State __type="java:java.lang.String">China</State><Zip __type="java:java.lang.String">201204</Zip></Address>
<Customer __type="sdo:http://www.example.com/supermarket#customerType" __collection="list" __collectionid="1" __id="3" __index="0">
<Name __type="java:java.lang.String">Tom</Name><Gender __type="java:java.lang.String">Man</Gender><Age __type="java:java.lang.String">15</Age>
<Fee/></Customer><Customer __type="sdo:http://www.example.com/supermarket#customerType" __collection="list" __collectionid="1" __id="4" __index="1">
<Name __type="java:java.lang.String">Jim</Name><Gender __type="java:java.lang.String">Man</Gender><Age __type="java:java.lang.String">25
</Age><Fee/></Customer><Customer __type="sdo:http://www.example.com/supermarket#customerType" __collection="list"
__collectionid="1" __id="5" __index="2"><Name __type="java:java.lang.String">Jessica</Name><Gender __type="java:java.lang.String">Woman</Gender>
<Age __type="java:java.lang.String">15</Age> <Fee/></Customer></supermarketType>


      配置camle-config.xml的路由规则:<when><jxpath>in/body/Customer[3]/Age &lt;= 16</jxpath><to uri="jms:queue:honnom" /></when> 。这个规则的意思是如果该exchange的body内容中的Customer[3]的Age的值小于或等于16,那么会将该exchage发送到队列honnom。

      运行结果是队列honnom上没有接收到任何消息,也就是说jxpath认为该消息不符合该表达式,但从exchange的Body可以看到Customer[3]的Age值为15,小于16 ,应该是符合jxpath表达式的。所以jxpath不能正确的路由sdo。

解决方案

 

     为了解决这个问题,必须实现一个新的组件来支持对sdo的解析,在此命名为camle-sxpath。实现该组件的主要内容包括如下。

     1.在camel-config.xml中新增<expath> 元素。<expath> 表示将使用camle-sxpath解析exchange。

     2.实现EXPathLanguage.java,支持expression和predicate。

     3.实现EXPathExpression.java,支持对expression和predicate的evaluate。

     4.在SDL中支持expath()方法。


实现效果

 

    将上文提到的路由规则修改为<when><expath>in/body/Customer[3]/Age &lt;= 16</expath><to uri="jms:queue:honnom" /></when> 即可。可以在队列honnom上接收到该消息,说明对camle-sxpath的实现初步完成。

分享到:
评论

相关推荐

    camel in action 中文版 第一章

    Camel 打破了传统模式,它支持 80 多种不同的协议和数据类型,它的扩展性和模块性允许你实现你自己专有协议的无缝插件。 1.2.1 为什么使用 Camel Camel 为整합领域介绍了一些新奇的观点,这就是为什么它的作者们...

    matlab的6驼峰功能的实现六驼峰CAMEL功能说明:外形尺寸

    matlab的6驼峰功能的实现六驼峰CAMEL功能说明:外形尺寸:2左边的图显示了在其推荐的输入域的六驼峰骆驼功能,并且在右边的图显示了该结构域的仅一部分,以允许更容易地观看的功能键的特性。该函数有六个地方很小,...

    ApacheCamel-JDBC

    Apache Camel 的 JDBC 组件就是将这两个强大的工具结合在一起,使开发者能够方便地在Camel路由中执行SQL查询和操作数据库。 在"Apache Camel-JDBC"这个主题中,我们可以深入探讨以下几个关键知识点: 1. **Apache ...

    Camel in action(camel实战)

    Apache Camel is a Java framework that lets you implement the standard enterprise integration patterns in a few lines of code. With a concise but sophisticated DSL you snap integration logic into your ...

    ApacheCamel-FTP

    总的来说,Apache Camel FTP 组件是构建基于文件传输的集成解决方案的强大工具,通过其丰富的功能和易于使用的 API,能够简化开发工作,提升系统的可维护性和扩展性。结合提供的示例,你可以深入学习并掌握如何在...

    Camel_Camel3Camel6函数_

    Camel3 Camel6函数等matlab源代码

    Camel in action PDF和源代码

    Apache Camel是一款流行的开源项目,它提供了一种声明式的方式来进行企业应用集成。该框架的核心概念是“路由规则”(Routes),这些规则定义了数据流如何在不同系统间传输。Camel支持大量协议和API,包括HTTP、JMS...

    apache-camel-demo

    领域特定语言意味着Apache Camel支持你在的集成开发工具中使用平常的,类型安全的,可自动补全的Java代码来编写路由规则,而不需要大量的XML配置文件。同时,也支持在Spring中使用XML配置定义路由和中介规则。 在...

    camel in action@

    Apache Camel是一个流行的开源Java库,它提供了强大的路由和消息转换功能,使得在分布式系统中处理数据和实现组件间的通信变得更加简单。 本书深入浅出地介绍了Camel的核心概念,包括路由规则(DSL)、组件、数据...

    Apache Camel 开发指南.rar

    Apache Camel 是一个强大的开源企业级集成框架,它简化了在Java应用程序之间建立复杂的消息传递流程。这个"Apache Camel 开发指南"压缩包包含了丰富的资源,帮助开发者深入理解Camel的各个方面,包括路由表达式、...

    使用CXF和camel-cxf调用webservice

    在IT行业中,Web服务是一种广泛使用的通信方式,它允许不同系统之间通过网络交换数据和执行功能。Apache CXF和camel-cxf是两个流行的开源框架,它们可以帮助开发者轻松地创建、消费和集成Web服务。本篇文章将详细...

    05-ApacheCamel-CXF-WebService

    Camel的CXF组件使得能够利用CXF的功能,同时利用Camel的灵活性和路由能力来构建复杂的集成逻辑。 另一方面,"05-ApacheCamel-CXF-WebService"可能包含了服务端的实现,它展示了如何使用Camel和CXF来创建Web服务。在...

    Camel_应用开发文档.pdf

    Apache Camel 是一个功能强大且灵活的框架,能够帮助开发者快速构建企业应用集成系统。通过学习 Camel 应用开发文档,开发者能够更好地理解 Camel 的架构和使用方式,从而更好地应用 Camel 构建企业应用集成系统。

    [Camel实战].(Camel.in.Action).Claus.Ibsen&Jonathan;.Anstey.文字版

    中文名: Camel 实战 原名: Camel in Action 作者: Claus Ibsen Jonathan Anstey 资源格式: PDF 版本: 英文文字版/更新源代码 出版社: Manning书号: 9781935182368发行时间: 2010年12月 地区: 美国 语言: 英文 简介: ...

    Apache camel

    camel异步消息处理机制的工具包说明

    Apache Camel 集成组件.rar

    Apache Camel 的主要优势在于其灵活性、可扩展性和可维护性。它提供了一套统一的编程模型,降低了集成复杂性,使得开发者可以专注于业务逻辑而不是基础设施细节。此外,由于 Camel 支持大量的组件,因此可以轻松地...

    ApacheCamel-Timer

    Timer 组件是 Apache Camel 中的一个重要部分,它提供了定时触发事件的功能,类似于 Java 中的 javax.swing.Timer 或者 Quartz Scheduler。 在 Apache Camel 中,Timer 组件主要用于创建周期性的事件源,这些事件...

    akka-camel-5.0.0.zip

    Akka-Camel是Akka框架的一个模块,它将Apache Camel的路由和消息转换功能引入了Akka的世界。这个组件允许Akka应用程序与各种协议和服务进行交互,如HTTP、FTP、JMS、AMQP等。Akka-Camel 5.0.0版可能是该整合模块的一...

    Apache Camel 源码分析.rar

    Apache Camel 是一个强大的开源企业集成库,它提供了一种声明式的方式来定义路由和转换数据,使得构建复杂的分布式系统变得更加简单。Camel 使用一种名为“DSL”(Domain Specific Language)的语法规则,允许开发者...

    apache camel

    Apache Camel 是一个强大的开源集成框架,它允许开发者在各种企业应用程序之间建立灵活、可重用的数据路由和集成解决方案。这个框架的核心理念是“统一的消息模型”,它提供了多种组件,支持多种协议和数据格式,...

Global site tag (gtag.js) - Google Analytics