VO对象通过groovy模板映射XML文件

介绍

在之前写过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;

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;

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;

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;

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>

VO对象通过groovy模板映射XML文件

时间: 2024-07-30 22:17:48

VO对象通过groovy模板映射XML文件的相关文章

MyBatis 入门到精通(二) SQL语句映射XML文件

MyBatis 真正强大之处就在这些映射语句,也就是它的魔力所在.对于它的强大功能,SQL 映射文件的配置却非常简单. 如果您比较SQL 映射文件配置与JDBC 代码,您很快可以发现,使用SQL 映射文件配置可以节省95%的代码量.MyBatis 被创建来专注于SQL,但又给您自己的实现极大的空间. 需要配置的基本元素 1. cache – 配置给定模式的缓存 2. cache-ref – 从别的模式中引用一个缓存 3. resultMap – 这是最复杂而却强大的一个元素了,它描述如何从结果集

MyBatis Spring整合配置映射接口类与映射xml文件

Spring整合MyBatis使用到了mybatis-spring,在配置mybatis映射文件的时候,一般会使用MapperScannerConfigurer,MapperScannerConfigurer会自动扫描basePackage指定的包,找到映射接口类和映射XML文件,并进行注入.配置如下: [html] view plain copy <!-- 数据源 --> <bean id="dataSource" class="com.mchange.v

Mybatis映射.xml文件报错

MyBatis框架里面,在dao层进行测试,控制台显示错误是:必须为元素类型 "delete" 声明属性 "resultType" 相应的.xml文件的sql语句是: 控制台的详细报错是: 1.必须为元素类型 "delete" 声明属性 "resultType" 2. 上网查资料说,每一个_sqlMapper.xml文件中尽量每中sql语句对一个namespace(每个dao层的完整java类):结果尝试,也没有成功: 最后索

java实现xml文件读取并保存到对象

首先浅聊一下解析xml的四种方式: 1.DOM方式:有缺点但是这个缺点却也是他的优点.下面详细介绍: 以树形的层次结构组织节点或信息片断集合,可以获得同一个文档中的多处不同数据.使用起来简单. 优点是:可以获得同一个文档中的多处不同数据,使用起来简单. 缺点是:需要加载整个xml文件,这对内存和资源有一定的消耗,如果是小型的xml文件可以尝试用 DOM方式解析. 经测试当用DOM方式读取大小为10M的文件时, 将会产生内存溢出异常. 2.SAX方式:在读取数据时检查数据,不用解析整个文档,因此不

ssm实战(2)------pom.xml文件 和 mybatis-generator

1.pom.xml文件:后续更新 2.mybatis-generator 相关坑:https://blog.csdn.net/qq_40307945/article/details/81351302 我遇到的坑: 1:在Maven Projects侧根本就找不到mybatis-generator, 无法双击 解决方法:打开pom文件,在pluginManagement标签的下面创建plugins标签,然后将mybatis-generator插件配置移动到plugins标签中 2: 找不到driv

java读取XML文件,及封装XML字符串

package com.yyl.text; import java.io.FileInputStream; import java.util.ArrayList; import org.junit.Test; import org.nuxeo.common.xmap.XMap; import com.yin.vo.Book; import com.yin.vo.Books; public class XmapTest { /** * 读取XML文件内容 * @throws Exception *

.NET下XML文件的读写

一.前言: XML是微软.Net战略的一个重要组成部分,而且它可谓是XML Web服务的基石,所以掌握.Net框架下的XML技术自然显得非常重要了.本文将指导大家如何运用C#语言完成.Net框架下的XML文档的读写操作.首先,我会向大家介绍.Net框架中与XML相关的命名空间和其中的重要类.其次,我还会给出有关的实例以使读者更进一步的了解XML文档的读写操作的具体方法. 二.XML命名空间和相关类简介: 在深入进行.Net框架下的XML文档的操作之前,我想很有必要向大家介绍.Net框架中与XML

c#读取xml文件配置文件Winform及WebForm-Demo具体解释

我这里用Winform和WebForm两种为例说明怎样操作xml文档来作为配置文件进行读取操作. 1.新建一个类,命名为"SystemConfig.cs".代码例如以下: <span style="font-family:Microsoft YaHei;font-size:14px;">using System; using System.Collections.Generic; using System.Text; using System.Xml;

android基础知识13:AndroidManifest.xml文件解析

1.重要性 AndroidManifest.xml是Android应用程序中最重要的文件之一.它是Android程序的全局配置文件,是每个 android程序中必须的文件.它位于我们开发的应用程序的根目录下,描述了package中的全局数据,包括package中暴露的组件 (activities, services, 等等),以及他们各自的实现类,各种能被处理的数据和启动位置等重要信息. 因此,该文件提供了Android系统所需要的关于该应用程序的必要信息,即在该应用程序的任何代码运行之前系统所