10.3. 规范化程序
概述
规范化程序 模式用于处理语义等效的消息,但到达不同的格式。规范化程序将传入的信息转换为通用格式。
在 Apache Camel 中,您可以通过组合使用 第 8.1 节 “基于内容的路由器” 来实现规范化程序模式,该 第 8.1 节 “基于内容的路由器” 检测到传入消息的格式,以及不同的 第 5.6 节 “消息 Translator” 的集合,它将不同的传入的格式转换为通用格式。
图 10.3. 规范化程序模式
Java DSL 示例
本例演示了一个 Message Normalizer,它将两种类型的 XML 消息转换为通用格式。然后会过滤采用这种通用格式的消息。
// we need to normalize two types of incoming messages from("direct:start") .choice() .when().xpath("/employee").to("bean:normalizer?method=employeeToPerson") .when().xpath("/customer").to("bean:normalizer?method=customerToPerson") .end() .to("mock:result");
在这种情况下,我们使用 Java bean 作为规范化程序。类类似如下
// Java public class MyNormalizer { public void employeeToPerson(Exchange exchange, @XPath("/employee/name/text()") String name) { exchange.getOut().setBody(createPerson(name)); } public void customerToPerson(Exchange exchange, @XPath("/customer/@name") String name) { exchange.getOut().setBody(createPerson(name)); } private String createPerson(String name) { return "<person name=\"" + name + "\"/>"; } }
XML 配置示例
XML DSL 中的同一示例
<camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <choice> <when> <xpath>/employee</xpath> <to uri="bean:normalizer?method=employeeToPerson"/> </when> <when> <xpath>/customer</xpath> <to uri="bean:normalizer?method=customerToPerson"/> </when> </choice> <to uri="mock:result"/> </route> </camelContext> <bean id="normalizer" class="org.apache.camel.processor.MyNormalizer"/>