Java与XML的故事二:XML与Java Object互相转换
来源:互联网 发布:go语言编程 编辑:程序博客网 时间:2024/05/22 06:05
XML文件和Java对象转换是一件非常简单的事情,有了annotation的java文件和XML schema XSD文件,可以简单的通过JAXB API来实现XML与Java Object转换
marshaller Java to XML
Exception is not display here
prviate static javax.xml.bind.JAXBContext jaxbCtx = null;private static Schema schema = null;static {jaxbCtx = javax.xml.bind.JAXBContext.newInstance(T.class); //jaxbcontext is thread safeSchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); // factory not thread safe Schema schema = sf.newSchema(new File("T.xsd")); //schema is thread safe}private static void validate(T t){ JAXBSource source = new JAXBSource(jaxbCtx, t); Validator validator = schema.newValidator(); // validator.setErrorHandler(new MyValidationErrorHandler()); validator.validate(source); // SAXException throws if failed, you can define your error handler or just notify the exception to caller}public static void marshToFile(T t, File file){ validate(t); javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller(); // not thread safe marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8"); marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); // if(logger.isDebugEnabled){ StringWriter sw = new StringWriter(); marshaller.marshal(t, sw); logger.debug(sw.toString());} marshaller.marshal( t, file);}
unmarshaller XML to Java
public static T unmarshFromXml(File xmlFile){ Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller(); unmarshaller.setSchema(schema); //unmarshaller.setEventHandler(new MyValidationErrorHandler()); T test = (T) unmarshaller.unmarshal(xmlFile); //UnmarshalException if failed }
ErrorHandler
默认抛出SAXException如果在validation的时候出现问题(fatal error),可以自己定制handler实现出现错误时候系统行为,例如更细节的错误记录。
public class MyValidationErrorHandler implements ErrorHandler {...... public void warning(SAXParseException ex) { logger.error(ex.getMessage()); } public void error(SAXParseException ex) { logger.error(ex.getMessage()); } public void fatalError(SAXParseException ex) throws SAXException { throw ex; }}
1 0
- Java与XML的故事二:XML与Java Object互相转换
- JAXB:Java Object与XML的互相转换
- Xml与Java Object 的转换[JAXB]
- JAXB 实现java对象与xml之间互相转换(二)
- 将java对象与xml互相转换
- xml与java对象互相转换
- java xml与实体对象 互相转换
- java Ojbect与xml之间的互相转换
- XStream xml与java对象互相转换,自动识别java
- 使用XStream, 对于java object与xml之间的转换
- JAXB 实现java对象与xml之间互相转换(一)
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- 【hibernate框架】一对多(多对一)双向CRUD-关于delete1
- hdu 2094 产生冠军 实实在在的水题啊!就是连拓扑排序都不要。直接统计入度就可以了
- 继续完善掼蛋游戏 其次说说朋友的情况
- Stripes Framework 編碼問題
- 关于js的强类型检查的思考
- Java与XML的故事二:XML与Java Object互相转换
- 【HTTP协议】控制缓存
- 【hibernate框架】一对多(多对一)双向CRUD-关于delete2
- 各种排序算法的稳定性和时间复杂度小结
- Learn How To Realize Positive Risk Response Strategies (Opportunities)
- 【hibernate框架】一对多(多对一)双向CRUD-关于update
- Word Break
- Chrome插件开发学习心得(三)之传值
- 负面测试 (Testing for failure) assertRaises