H2通用缓存加载(2)——使用sax解析xml

4 篇文章 0 订阅
1 篇文章 0 订阅

H2LoadConfig.xml

 

<?xml version="1.0" encoding="gb2312"?>
<h2>
    <table name="zgcode" text="职工代码表" database="zg" loadClass="com.dyna.report.config.H2load.ZgCodeLoadCache">
    	<columns>
		<column key="aaa102"  text="代码值" type="varchar(6)" order="0"></column>
		<column key="aaa103" text="代码名称" type="varchar(100)" order="1"></column>
		<column key="aaa100" text="代码" type="varchar(20)" order="2"></column>
		<column key="aaz093" text="代码表id" type="long" order="3"></column>
		</columns>
	</table>
	<table name="jmcode" text="居民代码表" database="jm" loadClass="com.dyna.report.config.H2load.JmCodeLoadCache">
    	<columns>
		<column key="aaa102"  text="代码值" type="varchar(6)" order="0"></column>
		<column key="aaa103" text="代码名称" type="varchar(100)" order="1"></column>
		<column key="aaa100" text="代码" type="varchar(20)" order="2"></column>
		<column key="aaz093" text="代码表id" type="long" order="3"></column>
		</columns>
	</table>
	
</h2>


sax  是基于事件解析的,即当读取到某一标签事件,开始读取文档事件,标签结束事件等,使用sax读取xml文件,需要继承 DefaultHandler

H2ConfigParse.java    内容                         读取xml文件的类  

 

package com.dyna.report.config.tools;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


import org.apache.log4j.Logger;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;

import com.dyna.report.config.abstracts.AbstractH2LoadCache;
import com.dyna.report.config.exceptions.BussException;

public class H2ConfigParse extends DefaultHandler {
	private static Logger logger = Logger.getLogger(H2ConfigParse.class
			.getName());
	private Map<String, H2Table> h2tables;
	private Map<String, H2Column> columns;

	private H2Table table;
	private H2Column column;
	/**
	 * 加载文档事件
	 */
	public void startDocument() throws SAXException {
		logger.info("加载H2配置文件/WEB-INF/conf/H2LoadConfig.xml");
		h2tables = new HashMap<String, H2Table>();
		super.startDocument();
	}

	/**
	 * 加载标签事件
	 */
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		logger.debug("开始读取标签"+qName);
		if("table".equalsIgnoreCase(qName)){
			table = new H2Table();
			table.setDatabase(attributes.getValue("database"));
			table.setName(attributes.getValue("name"));
			table.setText(attributes.getValue("text"));
			if(attributes.getValue("loadClass") != null &&!"".equals(attributes.getValue("loadClass"))){
				Object obj = Beanhelper.getClass(attributes.getValue("loadClass"));
				if(obj==null){
					throw new BussException(attributes.getValue("loadClass")+"在系统中未找到,请查验H2LoadConfig.xml配置是否正确");
				}
				if(! (obj instanceof AbstractH2LoadCache)){
					throw new BussException(attributes.getValue("loadClass")+"需继承自AbstractH2LoadCache,请查验该类是否正确");
				}
			   table.setLoadClass((AbstractH2LoadCache)obj);
			}
		}
		if("columns".equalsIgnoreCase(qName)){
			columns = new HashMap<String, H2Column>();
		}
		if("column".equalsIgnoreCase(qName)){
			column = new H2Column();
			column.setKey(attributes.getValue("key"));
			column.setText(attributes.getValue("text"));
			column.setType(attributes.getValue("type"));
			column.setOrder(attributes.getValue("order"));
			column.setTablename(table.getName());
		}
		
		super.startElement(uri, localName, qName, attributes);
	}

	/**
	 * 加载标签完毕
	 */
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if("table".equalsIgnoreCase(qName)){
			h2tables.put(table.getName(), table);
			table=null;
		}
		if("columns".equalsIgnoreCase(qName)){
			table.setColumns(columns);
			columns=null;
		}
		if("column".equalsIgnoreCase(qName)){
			columns.put(column.getKey(), column);
			column=null;
		}
		logger.debug("标签"+qName+"内容读取完毕");
		super.endElement(uri, localName, qName);
	}

	/**
	 * 加载文档完毕
	 */
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		logger.info("配置文件/WEB-INF/conf/H2LoadConfig.xml 加载完成");
	}

	public Map<String, H2Table> getH2tables() {
		return h2tables;
	}

	@Override
	public InputSource resolveEntity(String publicId, String systemId)
			throws IOException, SAXException {
		// TODO Auto-generated method stub
		return super.resolveEntity(publicId, systemId);
	}

	@Override
	public void notationDecl(String name, String publicId, String systemId)
			throws SAXException {
		// TODO Auto-generated method stub
		super.notationDecl(name, publicId, systemId);
	}

	@Override
	public void unparsedEntityDecl(String name, String publicId,
			String systemId, String notationName) throws SAXException {
		// TODO Auto-generated method stub
		super.unparsedEntityDecl(name, publicId, systemId, notationName);
	}

	@Override
	public void setDocumentLocator(Locator locator) {
		// TODO Auto-generated method stub
		super.setDocumentLocator(locator);
	}

	@Override
	public void startPrefixMapping(String prefix, String uri)
			throws SAXException {
		// TODO Auto-generated method stub
		super.startPrefixMapping(prefix, uri);
	}

	@Override
	public void endPrefixMapping(String prefix) throws SAXException {
		// TODO Auto-generated method stub
		super.endPrefixMapping(prefix);
	}

	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		// TODO Auto-generated method stub
		super.characters(ch, start, length);
	}

	@Override
	public void ignorableWhitespace(char[] ch, int start, int length)
			throws SAXException {
		// TODO Auto-generated method stub
		super.ignorableWhitespace(ch, start, length);
	}

	@Override
	public void processingInstruction(String target, String data)
			throws SAXException {
		// TODO Auto-generated method stub
		super.processingInstruction(target, data);
	}

	@Override
	public void skippedEntity(String name) throws SAXException {
		// TODO Auto-generated method stub
		super.skippedEntity(name);
	}

	@Override
	public void warning(SAXParseException e) throws SAXException {
		// TODO Auto-generated method stub
		super.warning(e);
	}

	@Override
	public void error(SAXParseException e) throws SAXException {
		// TODO Auto-generated method stub
		super.error(e);
	}

	@Override
	public void fatalError(SAXParseException e) throws SAXException {
		// TODO Auto-generated method stub
		super.fatalError(e);
	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值