jaxb学习简单例子
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
好了,废话少说,看看简单的例子。
介绍下相关的类。SmsDeliverReq是一个请求对象,类中有两个属性,分别为ReqHeader reqHeader和List<SmsBody> smsBodys。ReqHeader和SmsBody都为自定义类型。这两个类中的属性都为基本数据类型。
现在需要做的是将SmsDeliverReq的实例转换为xml和将xml转换为SmsDeliverReq实例,Test.java中封装了xml->javabean 和 javabean->xml的两个方法。并且实现了将生成的xml格式的字符串保存到xml文件中
ReqHeader.java
package cn.mr.javabeanxml;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.StringReader;import java.io.StringWriter;import java.util.ArrayList;import java.util.List;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import javax.xml.bind.Unmarshaller;import cn.mr.javabeanxml.ReqHeader;import cn.mr.javabeanxml.SmsBody;import cn.mr.javabeanxml.SmsDeliverReq;public class Test {/** * XML转换为javabean * Jul 25, 2013 9:39:05 PM xuejiangtao添加此方法 * @param <T> * @param xml * @param t * @return * @throws JAXBException */public static <T> T xmlToBean(String xml, T t) throws JAXBException {JAXBContext context = JAXBContext.newInstance(t.getClass());Unmarshaller um = context.createUnmarshaller();StringReader sr = new StringReader(xml);t = (T) um.unmarshal(sr);return t;}/** * javabean转换为XML * Jul 25, 2013 9:39:09 PM xuejiangtao添加此方法 * @param smsDeliverReq * @return * @throws JAXBException * @throws FileNotFoundException */public static <T> StringWriter beanToXml(T t) throws JAXBException, FileNotFoundException {JAXBContext context = JAXBContext.newInstance(t.getClass());Marshaller m = context.createMarshaller();StringWriter sw = new StringWriter();m.marshal(t, sw);m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);//是否格式化m.marshal(t, new FileOutputStream("src/cn/mr/javabeanxml/test.xml"));return sw;}/** * Jul 24, 2013 10:12:39 PM xuejiangtao添加此方法 * @param args * @throws JAXBException * @throws FileNotFoundException */public static void main(String[] args) throws JAXBException, FileNotFoundException {ReqHeader reqHeader = new ReqHeader();reqHeader.setReqNo("111");reqHeader.setAuthCode("DDDD");reqHeader.setSysId("jjj");SmsBody smsBody = new SmsBody();smsBody.setContent("类容讷讷");smsBody.setDestAddr("1589594");smsBody.setSourceAddr("9999");SmsBody smsBody1 = new SmsBody();smsBody1.setContent("asdf");smsBody1.setDestAddr("asdf");smsBody1.setSourceAddr("4fdf");SmsDeliverReq smsDeliverReq = new SmsDeliverReq();smsDeliverReq.setReqHeader(reqHeader);List<SmsBody> smsBodys = new ArrayList<SmsBody>();smsBodys.add(smsBody);smsBodys.add(smsBody1);smsDeliverReq.setSmsBodys(smsBodys);StringWriter sw = beanToXml(smsDeliverReq);System.out.println(sw.toString());SmsDeliverReq xmlToBean = xmlToBean(sw.toString(), smsDeliverReq);System.out.println(xmlToBean.toString());}}