package com.alibaba.tamper.core.helper;
import java.io.InputStream;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import org.w3c.dom.Document;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import com.alibaba.tamper.core.BeanMappingException;
/**
* xml处理的一些简单包装
*
* @author jianghang 2011-5-26 下午10:07:25
*/
public class XmlHelper {
public static Document createDocument(InputStream xml, InputStream schema) {
try {
// schema
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema s = sf.newSchema(new StreamSource(schema));
// document
DocumentBuilderFactory bf = DocumentBuilderFactory.newInstance();
bf.setNamespaceAware(true);
bf.setSchema(s);
DocumentBuilder builder = bf.newDocumentBuilder();
builder.setErrorHandler(new ErrorHandler() {
@Override
public void warning(SAXParseException exception) throws SAXException {
throw new BeanMappingException("Xml Parser Warning.", exception);
}
@Override
public void fatalError(SAXParseException exception) throws SAXException {
throw new BeanMappingException("Xml Parser Fetal Error.", exception);
}
@Override
public void error(SAXParseException exception) throws SAXException {
throw new BeanMappingException("Xml Parser Error.", exception);
}
});
return builder.parse(xml);
} catch (Exception e) {
throw new BeanMappingException("Xml Parser Error.", e);
}
}
}