为什么80%的码农都做不了架构师?>>>
平时我比较喜欢XML和java对象之间互转,同时每天要经常处理XML,所以我比较喜欢jaxb技术。下面是我对一些常用的简单封装。
package com.geostar.common.util;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.net.URL;import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.util.ValidationEventCollector;
import javax.xml.transform.sax.SAXSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;import org.apache.log4j.Logger;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import com.sun.xml.bind.marshaller.NamespacePrefixMapper;
/*** @author likehua* @ 工具类* */
public class JaxbUtil {private JaxbUtil(){};private static Logger logger=Logger.getLogger(JaxbUtil.class);//from object 2 xmlpublic static Object Xml2Object(Class<?> clazz,File file)throws JAXBException{JAXBContext context=JAXBContext.newInstance(clazz);Unmarshaller localUnmarshaller=context.createUnmarshaller();return localUnmarshaller.unmarshal(file);//return null;};public static Object Xml2Object(Class<?> clazz,File file,String schema)throws SAXException,JAXBException{Object obj = null ;try{ValidationEventCollector vec = new ValidationEventCollector(); SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema sch = sf.newSchema(new File(schema)); JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName()); Unmarshaller u = jc.createUnmarshaller(); u.setSchema(sch); u.setEventHandler(vec); obj = u.unmarshal(file);}catch(SAXException e){logger.error(e);throw e;}catch(JAXBException e){logger.error(e);throw e;}return obj; };//from xml 2 objectpublic static void Object2Xml(Object paramObject, NamespacePrefixMapper paramNamespacePrefixMapper, OutputStream paramOutputStream)throws JAXBException{Class localClass = paramObject.getClass();JAXBContext localJAXBContext = JAXBContext.newInstance(new Class[] { localClass });Marshaller localMarshaller = localJAXBContext.createMarshaller();localMarshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", paramNamespacePrefixMapper);localMarshaller.setProperty("jaxb.formatted.output", Boolean.valueOf(true));localMarshaller.marshal(paramObject, paramOutputStream);};//xml 2 objectpublic static Object Xml2Object(Class<?> clazz,InputStream is)throws JAXBException{JAXBContext context=JAXBContext.newInstance(clazz);Unmarshaller localUnmarshaller=context.createUnmarshaller(); return localUnmarshaller.unmarshal(is);//return null;};public static Object Xml2Object(Class<?> clazz,InputStream is,String schema)throws SAXException,JAXBException{Object obj = null ;try{ValidationEventCollector vec = new ValidationEventCollector(); SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema sch = sf.newSchema(new File(schema)); JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName()); Unmarshaller u = jc.createUnmarshaller(); u.setSchema(sch); u.setEventHandler(vec); obj = u.unmarshal(is);}catch(SAXException e){logger.error(e);throw e;}catch(JAXBException e){logger.error(e);throw e;}return obj; };//使用schema的url来验证jaxbpublic static Object Xml2Object(Class<?> clazz,InputStream is,URL schema)throws SAXException,JAXBException{Object obj = null ;try{ValidationEventCollector vec = new ValidationEventCollector(); SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); //InputSource inSource=new InputSource(schema);//SAXSource sax=new SAXSource(inSource);Schema sch = sf.newSchema(schema); JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName()); Unmarshaller u = jc.createUnmarshaller(); u.setSchema(sch); u.setEventHandler(vec); obj = u.unmarshal(is);}catch(SAXException e){logger.error(e);throw e;}catch(JAXBException e){logger.error(e);throw e;}return obj; };//通过流来判断public static Object Xml2Object(Class<?> clazz,InputStream is,InputStream schema)throws SAXException,JAXBException{Object obj = null ;try{ValidationEventCollector vec = new ValidationEventCollector(); SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); InputSource inSource=new InputSource(schema);SAXSource sax=new SAXSource(inSource);Schema sch = sf.newSchema(sax); JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName()); Unmarshaller u = jc.createUnmarshaller(); u.setSchema(sch); u.setEventHandler(vec); obj = u.unmarshal(is);}catch(SAXException e){logger.error(e);throw e;}catch(JAXBException e){logger.error(e);throw e;}return obj; };// xml 2 objectpublic static Object XML2Obejct(Class<?> clazz,Reader reader)throws JAXBException{JAXBContext context=JAXBContext.newInstance(new Class[]{clazz});Unmarshaller localMarshaller=context.createUnmarshaller();return localMarshaller.unmarshal(reader);};public static Object XML2Object(Class<?> clazz,Reader reader,InputStream schema)throws SAXException,JAXBException{//ssObject obj = null ;try{ValidationEventCollector vec = new ValidationEventCollector(); SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); InputSource inSource=new InputSource(schema);SAXSource sax=new SAXSource(inSource);Schema sch = sf.newSchema(sax); JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName()); Unmarshaller u = jc.createUnmarshaller(); u.setSchema(sch); u.setEventHandler(vec); obj = u.unmarshal(reader);}catch(SAXException e){logger.error(e);throw e;}catch(JAXBException e){logger.error(e);throw e;}return obj; };public static Object XML2Obejct(Class<?> clazz,Reader reader,String schema)throws SAXException,JAXBException{Object obj = null ;try{ValidationEventCollector vec = new ValidationEventCollector(); SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema sch = sf.newSchema(new File(schema)); JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName()); Unmarshaller u = jc.createUnmarshaller(); u.setSchema(sch); u.setEventHandler(vec); obj = u.unmarshal(reader);}catch(SAXException e){logger.error(e);throw e;}catch(JAXBException e){logger.error(e);throw e;}return obj; };// xml 2 objectpublic static void Object2Xml(Object ob,OutputStream os)throws JAXBException{Class local=ob.getClass();JAXBContext context=JAXBContext.newInstance(new Class[]{local});Marshaller marshaller=context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.marshal(ob, os); };
// from object 2 xml filepublic static void Object2XmlFile(Object ob, String path)throws JAXBException,FileNotFoundException {Class local=ob.getClass();JAXBContext context=JAXBContext.newInstance(new Class[]{local});Marshaller marshaller=context.createMarshaller();//marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", paramNamespacePrefixMapper);//marshaller.setProperty("jaxb.formatted.output", Boolean.valueOf(true));marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.marshal(ob, new FileOutputStream(new File(path))); };
// from object 2 xml filepublic static void Object2XmlFile(Object ob,NamespacePrefixMapper paramNamespacePrefixMapper, String path)throws JAXBException,FileNotFoundException {Class local=ob.getClass();JAXBContext context=JAXBContext.newInstance(new Class[]{local});Marshaller marshaller=context.createMarshaller();marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", paramNamespacePrefixMapper);marshaller.setProperty("jaxb.formatted.output", Boolean.valueOf(true));//.marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.marshal(ob, new FileOutputStream(new File(path)));//marshaller.marshal(ob, new File(path));};public static void main(String[] args)throws FileNotFoundException,JAXBException,SAXException{
// UpdateCSW cswRequest=(UpdateCSW)JaxbUtil.Xml2Object(UpdateCSW.class, new FileInputStream("C:\\request.xml"), UpdateCSW.class.getResourceAsStream("UpdateCSW.xsd"));
// System.out.println("通过");};
}