ApacheCamel框架之Freemarker做数据转换在做系统集成的时候,必不可少的任务就是将数据从一种格式转换为另一种格式,再把转换后的格式发到目标系统,在此用实例介绍一下Camel中利用Freemarker做数据转换.1,Freemarker的模板如下:12
3<#escapexasx?xml>4<#listbody.peopleListasp>567${p.fname}8${p.gname}910${p.email}1112<#ifp.level=="L1">13xxx14#if>1516#list>17#escape>182,与之对应的Java对象如下:每一个person节点对应一个ValueObject放在XMLTemplateParameter的peopleList里面.1publicclassXMLTemplateParameter{2privateStringfileName;3privateListpeopleList=newArrayList();45publicListgetPeopleList(){7}6returnpeopleList;891011121314151617}publicvoidsetPeopleList(ListpeopleList){this.peopleList=peopleList;}publicStringgetFileName(){returnfileName;}publicvoidsetFileName(StringfileName){this.fileName=fileName;}18publicclassValueObject{19privateStringfname;20privateStringgname;21privateStringemail;22privateStringmanager;23privateStringlevel;3,Route代码如下:12publicclassCamelFreemarkerRouteextendsRouteBuilder{publicvoidconfigure()throwsException{3from("quartz://report?cron=10****?&stateful=true")4.beanRef("fmBean","prepareFMValues")5.to("freemarker:com/test/camel/freemarker/test.ftl")6.to("file:d:/temp/outbox?fileName=fm.xml");7}8}4,Route里用到的bean如下:xmlTemplateParameter做为顶级对象放在body里面,Freemarker里取数据的body.peopleList就对应于xmlTemplateParameter.peopleList12publicclassFmProcessorBean{publicvoidprepareFMValues(Exchangeexchange){3XMLTemplateParameterxmlTemplateParameter=newXMLTemplateParameter();45ValueObjectval=null;6for(inti=0;i<3;i++){7val=newValueObject();8val.setFname("Yao");9val.setGname("Yorker"+i);10val.setEmail("test@mail.com");11val.setManager("m&an789com.test.camel.freemarker10116,启动Spring,在D:\temp\outbox文件夹下,每隔10秒钟,会根据freemarker模板生成一个fm.xml文件.ApplicationContextac=newClassPathXmlApplicationContext("config/camelFreemarker.xml");while(true){Thread.sleep(2000);}对本例beanRef("fmBean","prepareFMValues")的解释:其意思是调用fmBean的prepareFMValues方法,Camel会负责将message的body绑定到要调用方法的第一个参数上面,其中可能做相应的类型转换.(本例中的方法的第一个参数为Exchange,没有转换的过程),这里给一个如下示例图解释这个绑定转换的过程:Camel将Exchange的的inputmessage(exchange.getIn())转换为String,绑定到mtd方法的name参数上.(图片来源于CamelinAction)