303.7. Samples
在 Spring XML 示例中,我们基于一个标头值进行过滤:
在 Message Filter 模式中,简单语言可用于上述 predicate 测试,其中我们测试了消息中是否有 foo
标头(带有键 foo
的标头)。如果表达式评估为 true,则消息被路由到 mock:fooOrders
端点,否则消息被丢弃。
Java DSL 中的相同示例:
from("seda:orders") .filter().simple("${in.header.foo}") .to("seda:fooOrders");
from("seda:orders")
.filter().simple("${in.header.foo}")
.to("seda:fooOrders");
您还可以将简单语言用于简单文本串联,例如:
from("direct:hello") .transform().simple("Hello ${in.header.user} how are you?") .to("mock:reply");
from("direct:hello")
.transform().simple("Hello ${in.header.user} how are you?")
.to("mock:reply");
请注意,我们现在必须使用 $\{ } 占位符来允许 Camel 正确解析它。
本示例使用 date 命令来输出当前的日期。
from("direct:hello") .transform().simple("The today is ${date:now:yyyyMMdd} and it is a great day.") .to("mock:reply");
from("direct:hello")
.transform().simple("The today is ${date:now:yyyyMMdd} and it is a great day.")
.to("mock:reply");
在以下示例中,我们调用 bean 语言来调用要包含在返回的字符串中的 bean 的方法:
from("direct:order") .transform().simple("OrderId: ${bean:orderIdGenerator}") .to("mock:reply");
from("direct:order")
.transform().simple("OrderId: ${bean:orderIdGenerator}")
.to("mock:reply");
其中 orderIdGenerator
是 Registry 中注册的 bean 的 ID。如果使用 Spring,则它是 Spring bean id。
如果要声明在订单 ID 生成器上调用的方法,我们必须添加 .method 名称
,比如下面调用 generateId
方法。
from("direct:order") .transform().simple("OrderId: ${bean:orderIdGenerator.generateId}") .to("mock:reply");
from("direct:order")
.transform().simple("OrderId: ${bean:orderIdGenerator.generateId}")
.to("mock:reply");
我们可以使用我们熟悉 Bean 组件本身的 ?method=methodname
选项:
from("direct:order") .transform().simple("OrderId: ${bean:orderIdGenerator?method=generateId}") .to("mock:reply");
from("direct:order")
.transform().simple("OrderId: ${bean:orderIdGenerator?method=generateId}")
.to("mock:reply");
通过从 Camel 2.3 开始,您可以将正文转换为给定类型,例如确保它是一个 String:
<transform> <simple>Hello ${bodyAs(String)} how are you?</simple> </transform>
<transform>
<simple>Hello ${bodyAs(String)} how are you?</simple>
</transform>
有几种类型有简写表示法,因此我们可以使用 String
而不是 java.lang.String
。这些为: byte[]、String、Integer、Long
。所有其他类型都必须使用其 FQN 名称,例如 org.w3c.dom.Document
。
也可以从 Camel 2.3 中的标头 映射
中查找值:
<transform> <simple>The gold value is ${header.type[gold]}</simple> </transform>
<transform>
<simple>The gold value is ${header.type[gold]}</simple>
</transform>
在上面的代码中,我们使用名称 类型
查找标头,并将其作为 java.util.Map
,然后以键 金
键进行查找并返回该值。如果标头无法转换为映射异常,则会抛出异常。如果名称 类型为
的标头不存在,则返回 null
。
在 Camel 2.9 开始,您可以嵌套功能,如下所示:
<setHeader headerName="myHeader"> <simple>${properties:${header.someKey}}</simple> </setHeader>
<setHeader headerName="myHeader">
<simple>${properties:${header.someKey}}</simple>
</setHeader>