转:JAXB简介及教程
JAXB简介及教程
原文http://opsunv.com/programming/2013/06/jaxb-tutorial/
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。JAXB 2.0是JDK 1.6的组成部分。JAXB 2.2.3是JDK 1.7的组成部分。
jaxb为了应对各种情况的bean到java类的映射定义了一套注解机制,下面简单说明几个常用的注解及其作用:
@XmlAccessorType
控制字段或属性的序列化。XmlAccessType.FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。一般情况如果没有指定XmlAccessType注解可能会导致一个异常的产生:
Exception in thread "main" com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptionsClass has two properties of the same name "nodes"this problem is related to the following location:at public java.util.Map com.zznode.e2esqm.core.diagnosis.schema.DiagnosisSchema.getNodes()at com.zznode.e2esqm.core.diagnosis.schema.DiagnosisSchemathis problem is related to the following location:at private java.util.Map com.zznode.e2esqm.core.diagnosis.schema.DiagnosisSchema.nodesat com.zznode.e2esqm.core.diagnosis.schema.DiagnosisSchema
JAXBContext context = JAXBContext.newInstance(clazz);Unmarshaller unmarshaller = context.createUnmarshaller(); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();dbf.setNamespaceAware(true);DocumentBuilder db = dbf.newDocumentBuilder();ByteArrayInputStream in = new ByteArrayInputStream(xml.getBytes());//xml为对应的需要转换为bean的xml字符串Document doc = db.parse(in);Node fooSubtree = doc.getFirstChild(); JAXBElement<?> el = unmarshaller.unmarshal( fooSubtree, clazz);el.getValue();//这个就是bean的实例