JAXB 操作XML 与 Object

Java Architecture for XML Binding) 是一个业界的标准,是一项能够依据XML Schema产生Java类的技术。是一种xml与object映射绑定技术标准。

JDK5下面开发须要的jar包:activation.jar、jaxb-api.jar、 jaxb-impl.jar、 jsr173-api.jar

JDK6以上版本号已经集成JAXB2的JAR,在文件夹{JDK_HOME}/jre/lib/rt.jar中。


 @XmlAccessorType 注解 的枚举常量值说明:



代码片段:

 * xml字符串 转 pojo
	 * 
	 * @param t
	 * @param xmlStr
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static Object jaxbReadXml(Class cls, String xmlStr) {
		ByteArrayInputStream stream = null;
		try {
			JAXBContext context = JAXBContext.newInstance(cls);
			stream = new ByteArrayInputStream(xmlStr.getBytes("utf-8"));
			Unmarshaller um = context.createUnmarshaller();
			return um.unmarshal(stream);
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("----xml转对象出错:"+e.getMessage());
		} finally {
			if (stream != null) {
				try {
					stream.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		return null;
	}

	@SuppressWarnings("rawtypes")
	public static Object jaxbReadXml(Class cls, byte[] bs) {
		return jaxbReadXml(cls, new ByteArrayInputStream(bs));
	}
	
	@SuppressWarnings("rawtypes")
	public static Object jaxbReadXml(Class cls, InputStream in) {
		try {
			JAXBContext context = JAXBContext.newInstance(cls);
			Unmarshaller um = context.createUnmarshaller();
			return um.unmarshal(in);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (in != null) {
				try {
					in.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		return null;
	}

	/**
	 * pojo 转 xml字符串
	 * 
	 * @param pojo
	 * @return
	 */
	public static <T> String jaxbWriteXml(T pojo) {
		StringWriter out = null;
		String xmlStr = null;
		try {
			JAXBContext context = JAXBContext.newInstance(pojo.getClass());
			Marshaller marshaller = context.createMarshaller();
			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
			out = new StringWriter();
			marshaller.marshal(pojo, out);
			xmlStr = out.toString();
			// System.out.println(xmlStr);
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("----对象转xml出错:"+e.getMessage());
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return xmlStr;
	}

posted @ 2015-05-20 13:58  zfyouxi  阅读(271)  评论(0编辑  收藏  举报