/* * Copyright (c) 2015. Bond(China), java freestyle app */ package com.jfa.commons.util; import javax.xml.bind.*; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.lang.reflect.Method; public class JAXBUtils { /** * 通过一个指定的Java类,和一个文件生成一个POJO * * @param clz Class * 由xjc.bat生成 * @param xmlDoc 数据文件 * @return * @throws JAXBException */ @SuppressWarnings("unchecked") public static <T extends Object> T parseXmlDocument(Class<?> clz, File xmlDoc) throws JAXBException { JAXBContext jaxbContext = JAXBContext.newInstance(clz); Unmarshaller shaller = jaxbContext.createUnmarshaller(); return (T) shaller.unmarshal(xmlDoc); } /** * 生成一个指定XML文档 * * @param t T * @param storeFileName * @return * @throws JAXBException * @throws FileNotFoundException */ public static <T extends Object> Boolean generalXmlDocument(T t, String storeFileName) throws JAXBException { try { String pkg = t.getClass().getPackage().getName(); JAXBContext context = JAXBContext.newInstance(pkg); JAXBElement<?> element = _invoke(t); if (element == null) { return false; } Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshaller.marshal(element, new FileOutputStream(storeFileName)); return true; } catch (Exception e) { throw new JAXBException(e); } } /* * 生成一个工厂对象,并创建JAXBElement对象 */ @SuppressWarnings("unchecked") private static <T extends Object> JAXBElement<T> _invoke(Object o) throws Exception { String pkg = o.getClass().getPackage().getName(); Class<?> clz = Class.forName(pkg + ".ObjectFactory"); Method[] methods = clz.getMethods(); Object factory = clz.newInstance(); String destName = "create" + o.getClass().getSimpleName(); for (Method method : methods) { if (method.getName().equals(destName)) { return (JAXBElement<T>) method.invoke(factory, o); } } return null; } }
Jaxb
最新推荐文章于 2023-11-27 12:42:42 发布