10.3. 规范化程序
概述
规范化程序 模式用于处理平等同的消息,但会达到不同的格式。规范化程序将传入的信息转换为通用格式。
在 Apache Camel 中,您可以通过组合 第 8.1 节 “基于内容的路由器” (它检测到传入的消息的格式)来实现规范化程序模式,它带有一组不同的 第 5.6 节 “message 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"/>