Apache Camel框架之Freemarker做数据转换
来源:互联网 发布:如何关闭windows筛选器 编辑:程序博客网 时间:2024/04/30 00:02
在做系统集成的时候,必不可少的任务就是将数据从一种格式转换为另一种格式,再把转换后的格式发到目标系统,在此用实例介绍一下Camel中利用Freemarker做数据转换.
1,Freemarker的模板如下:
<?xml version="1.0" encoding="UTF-8"?><people xmlns:h="http://www.w3.org/TR/html4/"> <#escape x as x?xml> <#list body.peopleList as p> <person id="000001" age="20"> <name> <family>${p.fname}</family> <given>${p.gname}</given> </name> <email>${p.email}</email> <link manager="${p.manager}" /> <#if p.level == "L1"> <l1tag>xxx</l1tag> </#if> </person> </#list> </#escape></people>
2,与之对应的Java对象如下:每一个person节点对应一个ValueObject放在XMLTemplateParameter的peopleList里面.
public class XMLTemplateParameter { private String fileName; private List<ValueObject> peopleList = new ArrayList<ValueObject>(); public List<ValueObject> getPeopleList() { return peopleList; } public void setPeopleList(List<ValueObject> peopleList) { this.peopleList = peopleList; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; }}public class ValueObject { private String fname; private String gname; private String email; private String manager; private String level;
3,Route代码如下:
public class CamelFreemarkerRoute extends RouteBuilder { public void configure() throws Exception { from("quartz://report?cron=10 * * * * ?&stateful=true") .beanRef("fmBean","prepareFMValues") .to("freemarker:com/test/camel/freemarker/test.ftl") .to("file:d:/temp/outbox?fileName=fm.xml"); }}
4,Route里用到的bean如下:xmlTemplateParameter做为顶级对象放在body里面,Freemarker里取数据的body.peopleList就对应于xmlTemplateParameter.peopleList
public class FmProcessorBean { public void prepareFMValues(Exchange exchange){ XMLTemplateParameter xmlTemplateParameter = new XMLTemplateParameter(); ValueObject val = null; for(int i=0;i<3;i++){ val = new ValueObject(); val.setFname("Yao"); val.setGname("Yorker" +i); val.setEmail("test@mail.com"); val.setManager("m&an<ager"); val.setLevel("L" + i); xmlTemplateParameter.getPeopleList().add(val); } exchange.getIn().setBody(xmlTemplateParameter); } }
5,Spring的配置文件如下:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://camel.apache.org/schema/spring" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd" default-autowire="byName" default-init-method="init"> <bean id="fmBean" class="com.test.camel.freemarker.FmProcessorBean"/> <camelContext id="testCamelContext" xmlns="http://camel.apache.org/schema/spring"> <package>com.test.camel.freemarker</package> </camelContext> </beans>
6,启动Spring,在D:\temp\outbox文件夹下,每隔10秒钟,会根据freemarker模板生成一个fm.xml文件.
ApplicationContext ac = new ClassPathXmlApplicationContext("config/camelFreemarker.xml");
while (true) {
Thread.sleep(2000);
}
对本例beanRef("fmBean","prepareFMValues")的解释:
其意思是调用fmBean的prepareFMValues方法,Camel会负责将message的body绑定到要调用方法的第一个参数上面,其中可能做相应的类型转换.(本例中的方法的第一个参数为Exchange,没有转换的过程 ),这里给一个如下示例图解释这个绑定转换的过程:Camel将Exchange的的input message(exchange.getIn())转换为String,绑定到mtd方法的name参数上.(图片来源于Camel in Action)本文转自:Apache Camel框架之Freemarker做数据转换
0 0
- Apache Camel框架之Freemarker做数据转换
- Apache Camel框架之Freemarker做数据转换
- Apache Camel框架之Freemarker做数据转换
- Apache Camel框架之Freemarker做数据转换
- Apache Camel之数据转换
- apache Camel之数据转换
- Apache Camel框架之FTP路由
- Apache Camel框架之JMS路由
- Apache Camel框架之HTTP路由
- Apache Camel框架之Error handling
- Apache Camel框架之事务控制
- Apache Camel框架之FTP路由
- Apache Camel框架之JMS路由
- Apache Camel框架之HTTP路由
- Apache Camel框架之Error handling
- Apache Camel框架之HTTP路由
- Apache Camel框架之FTP路由
- Apache Camel框架之事务控制
- SDUTOJ 2780 ——Pots BFS
- 周期串。输入一个长度不超过80的串,输出它的最小周期。
- C语言基础用基本的循环语句打印实心和空心菱形、九九乘法表
- Web学习笔记1——几个名词
- XML文件格式简介
- Apache Camel框架之Freemarker做数据转换
- BaseDao....
- 关于select下拉框选择触发事件
- 设计模式之23种模式
- Unsupported major.minor version 51.0 (of class java.lang.UnsupportedClassVersionError)
- 详细解析Java中抽象类和接口的区别(转自http://dev.yesky.com/436/7581936.shtml)
- 最长的相交线段---2014亚马逊机试第2题
- Think in Java 观后感(第14章)
- JAVA实现邮箱找回密码