介绍
之前写过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 = new LinkedHashMap<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>
分享到:
相关推荐
groovy模板
groovy 创建xml,并生成xml文件的代码
NULL 博文链接:https://genius.iteye.com/blog/620029
GOM Groovy 对象映射器
脚本解析工具,可使用Groovy或Xquery解析JSON报文或XML报文
包含翻译后的API文档:groovy-3.0.9-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.codehaus.groovy:groovy:3.0.9; 标签:groovy、codehaus、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用...
groovy api 资料 自学文档,
xstream、dom4j、groovy、jdom解析xml,所给的xml的例子比较全吧,基本搞懂了这些,这四种解析就差不多了
包含翻译后的API文档:groovy-2.5.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.codehaus.groovy:groovy:2.5.1; 标签:codehaus、groovy、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用...
bb4-common.zip,通用BB4 Java代码。库项目。所有bb4项目的公共scala代码。
GORM(Grails对象映射) [Grails] [Grails]是用于使用[Groovy] [Groovy]编程语言构建Web应用程序的框架。 该项目为Hibernate和NoSQL数据存储上的GORM的新实现提供了GORM API管道。 [Grails]: : [Groovy]: : ...
[Groovy入门]第十讲.使用模板引擎开发界面
通过groovy自定义函数实现提取明细表字段至主表字段,同时根据表单上的字段进行计算,将计算结果在字段上显示;致远、groovy
包含翻译后的API文档:groovy-3.0.9-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.codehaus.groovy:groovy:3.0.9; 标签:groovy、codehaus、jar包、java、中英对照文档; 使用方法:解压翻译后的...
包含翻译后的API文档:groovy-2.5.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.codehaus.groovy:groovy:2.5.1; 标签:codehaus、groovy、中英对照文档、jar包、java; 使用方法:解压翻译后的...
包含翻译后的API文档:groovy-all-2.4.13-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.codehaus.groovy:groovy-all:2.4.13; 标签:all、groovy、codehaus、jar包、java、API文档、中文版; 使用方法:解压...
ROS hydro,groovy,indigo示例文档,ROS必看文档,希望有帮助
软件项目的可扩展性和动态维护性是非常重要的,例如在微服务的网关动态过滤器中,要实现过滤器的动态更新而不影响项目的持续运行,就需要借助groovy的动态编译功能,而这个功能是通过 .groovy文件实现的。...
包含翻译后的API文档:groovy-all-2.4.5-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.codehaus.groovy:groovy-all:2.4.5; 标签:codehaus、groovy、all、中文文档、jar包、java; 使用方法:解压翻译后的...
打开里面的内容,替换idea项目中的Generate POJOs.groovy文件(文件路径:SCratches and Consoles -> extensions -> Database Tools and SQL -> schema - > Generate POJOs.groovy)