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"/>