VO对象通过groovy模板映射XML文件
发布时间:2020-12-14 16:50:04 所属栏目:大数据 来源:网络整理
导读:介绍 ? ? 之前写过JAVA+XSLT相关的技术博客,最近研究了一个开源工具包org.codehaus.groovy,处理VO对象和XML文件映射非常方便。简言之:将VO对象中的属性(包括Collection,Map),通过groovy模板,映射XML文件。 Maven pom.xml dependencygroupIdorg.codeha
介绍 ? ? 之前写过JAVA+XSLT相关的技术博客,最近研究了一个开源工具包org.codehaus.groovy,处理VO对象和XML文件映射非常方便。简言之:将VO对象中的属性(包括Collection,Map),通过groovy模板,映射XML文件。 Maven pom.xml <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.3.0</version> </dependency> VO类: package shuai.study.groovy.demo.vo; import java.util.LinkedHashMap; import java.util.Map; /** * @author shengshu * */ public class MeasurementVO { private String dn = null; private String measurementType = null; private Map<String,Integer> counterMap = new LinkedHashMap<String,Integer>(); public String getDn() { return this.dn; } public void setDn(String dn) { this.dn = dn; } public String getMeasurementType() { return this.measurementType; } public void setMeasurementType(String measurementType) { this.measurementType = measurementType; } public Map<String,Integer> getCounterMap() { return this.counterMap; } public void setCounterMap(Map<String,Integer> counterMap) { this.counterMap = counterMap; } } Collection类: package shuai.study.groovy.demo.collection; import java.util.LinkedList; import java.util.List; import shuai.study.groovy.demo.vo.MeasurementVO; /** * @author shengshu * */ public class MeasurementCollection { List<MeasurementVO> MeasurementVoList = new LinkedList<MeasurementVO>(); public List<MeasurementVO> getMeasurementVoList() { return this.MeasurementVoList; } public void setMeasurementVoList(MeasurementVO measurementVO) { this.MeasurementVoList.add(measurementVO); } } groovy模板文件: <?xml version="1.0"?> <OMeS> <PMSetup> <PMMOResult> <% def measurementVoList=measurementCollection.getMeasurementVoList(); for (measurementVo in measurementVoList) { def dn=measurementVo.getDn(); def measurementType=measurementVo.getMeasurementType();%> <MO> <DN>${dn}</DN> </MO> <PMTarget measurementType="${measurementType}"> <% def counterMap=measurementVo.getCounterMap(); counterMap.each { def counterKey=it.key; def counterValue=it.value;%> <${counterKey}>${counterValue}</${counterKey}> <%}%> </PMTarget> <%}%> </PMMOResult> </PMSetup> </OMeS> Transfer类: package shuai.study.groovy.demo.transfer; import groovy.text.SimpleTemplateEngine; import groovy.text.Template; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.HashMap; import java.util.Map; import org.apache.commons.io.IOUtils; import org.codehaus.groovy.control.CompilationFailedException; import shuai.study.groovy.demo.collection.MeasurementCollection; /** * @author shengshu * */ public class MeasurementTransfer { private static MeasurementTransfer measurementTransfer = null; private Template template = null; public static MeasurementTransfer getMeasurementTransfer() { if (measurementTransfer == null) { synchronized (MeasurementTransfer.class) { if (measurementTransfer == null) { measurementTransfer = new MeasurementTransfer(); } } } return measurementTransfer; } private MeasurementTransfer() { File measurementTemplateFile = new File("/demo/groovy/template/measurementTemplate.xml"); if (!measurementTemplateFile.exists()) { throw new NullPointerException("Measurement template file " + measurementTemplateFile + " is null"); } try { template = new SimpleTemplateEngine().createTemplate(measurementTemplateFile); } catch (CompilationFailedException cfe) { cfe.printStackTrace(); } catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } } public void transfer(MeasurementCollection measurementCollection,File outputFile) { Map<String,MeasurementCollection> measurementCollectionMap = new HashMap<String,MeasurementCollection>(); measurementCollectionMap.put("measurementCollection",measurementCollection); Writer writer = null; try { FileWriter fileWriter = new FileWriter(outputFile); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); writer = template.make(measurementCollectionMap).writeTo(bufferedWriter); } catch (IOException ioe) { ioe.printStackTrace(); } finally { IOUtils.closeQuietly(writer); } } }Executer启动类: package shuai.study.groovy.demo; import java.io.File; import java.io.IOException; import java.util.LinkedHashMap; import java.util.Map; import org.apache.commons.io.FileUtils; import shuai.study.groovy.demo.collection.MeasurementCollection; import shuai.study.groovy.demo.transfer.MeasurementTransfer; import shuai.study.groovy.demo.vo.MeasurementVO; /** * @author shengshu * */ public class MeasurementExecuter { public static void main(String[] args) { Map<String,Integer>(); counterMap.put("nbrOfProvModify",100); counterMap.put("nbrOfProvCreate",300); counterMap.put("nbrOfProvDelete",500); MeasurementVO measurementVO = new MeasurementVO(); measurementVO.setDn("PLMN-PLMN/IPS-1/CNODE-2/STYP-3"); measurementVO.setMeasurementType("PERFMGMT"); measurementVO.setCounterMap(counterMap); MeasurementCollection measurementCollection = new MeasurementCollection(); measurementCollection.setMeasurementVoList(measurementVO); File measurementOutputFile = new File("/demo/groovy/output/measurementOutput.xml"); try { FileUtils.touch(measurementOutputFile); } catch (IOException ioe) { ioe.printStackTrace(); } MeasurementTransfer measurementTransfer = MeasurementTransfer.getMeasurementTransfer(); measurementTransfer.transfer(measurementCollection,measurementOutputFile); } } Output运行输出文件: <?xml version="1.0"?> <OMeS> <PMSetup> <PMMOResult> <MO> <DN>PLMN-PLMN/IPS-1/CNODE-2/STYP-3</DN> </MO> <PMTarget measurementType="PERFMGMT"> <nbrOfProvModify>100</nbrOfProvModify> <nbrOfProvCreate>300</nbrOfProvCreate> <nbrOfProvDelete>500</nbrOfProvDelete> </PMTarget> </PMMOResult> </PMSetup> </OMeS> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |