介绍
这期内容当中小编将会给大家带来有关如何正确的使用JAXB,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
<强>一、JAXB是什么,
强>
,,,JAXB是Java架构XML绑定的缩写。可以将一个Java对象转变成为XML格式,反之亦然只
,,,我们把对象与关系数据库之间的映射称为ORM,其实也可以把对象与XML之间的映射称为OXM(对象XML映射)。原来JAXB是Java EE的一部分,在JDK1.6中,太阳将其放到Java SE中了,这也是太阳的一贯做法.JDK1.6中自带的这个JAXB版本是2.0,比起1.0 (JSR 31)来,JAXB2 (JSR 222)用JDK5的新特性注释来标识要作绑定的类和属性等,这就极大简化了开发的工作量只
<强>二、JAXB应用模式,强>
,,,在JAVA EE 5 \ 6中,jaxb可以很方便的与jax - rs, jax - ws集成,极大的简化了web服务接口的开发工作量只
<强>三、jaxb代码举例,
强>
首先定义两个示例类ClassA, ClassB,用于后续的示例演示
包com.bjpowernode.test; 公开课ClassA { 私人int classAId; 私人字符串classAName; 私人ClassB ClassB; 公共int getClassAId () { 返回classAId; } 公共空间setClassAId (int classAId) { 这一点。classAId=classAId; } 公共字符串getClassAName () { 返回classAName; } 公共空间setClassAName(字符串classAName) { 这一点。classAName=classAName; } 公共ClassB getClassB () { 返回classB; } 公共空间setClassB (ClassB ClassB) { 这一点。classB=classB; } }
包com.bjpowernode.test; 公开课ClassB { 私人int classBId; 私人字符串classBName; 公共int getClassBId () { 返回classBId; } 公共空间setClassBId (int classBId) { 这一点。classBId=classBId; } 公共字符串getClassBName () { 返回classBName; } 公共空间setClassBName(字符串classBName) { 这一点。classBName=classBName; } }
用于序列化的XmlUtil
包com.bjpowernode.test; 进口java.io.StringReader; 进口java.io.StringWriter; 进口javax.xml.bind。*; 公开课XmlUtil { 公共静态字符串toXML(对象obj) { 尝试{ JAXBContext上下文=JAXBContext.newInstance (obj.getClass ()); Marshaller Marshaller=context.createMarshaller (); marshaller.setProperty (Marshaller。JAXB_ENCODING,“UTF-8");////编码格式 marshaller.setProperty (Marshaller。JAXB_FORMATTED_OUTPUT,真);//是否格式化生成串的xml marshaller.setProperty (Marshaller。JAXB_FRAGMENT、假);//是否省略xm头声明信息 StringWriter作家=new StringWriter (); 信号员。元帅(obj,作家); 返回writer.toString (); }捕捉(异常e) { 把新的RuntimeException (e); } } @SuppressWarnings (“unchecked") 公共静态& lt; T>T fromXML (xml字符串,ClassvalueType) { 尝试{ JAXBContext上下文=JAXBContext.newInstance (valueType); 解组程序解组程序=context.createUnmarshaller (); 返回(T)解组程序。unmarshal(新StringReader (xml)); }捕捉(异常e) { 把新RuntimeException (e.getMessage ()); } } }
调用如下:
包com.bjpowernode.test; 公开课MainRun {/* * * @param arg游戏 */公共静态void main (String [] args) { ClassB ClassB=new ClassB (); classB.setClassBId (22); classB.setClassBName (“B2"); ClassA ClassA=new ClassA (); classA.setClassAId (11); classA.setClassAName (“A1"); classA.setClassB (classB); System.out.println (XmlUtil.toXML (classA)); } }
输出结果如下:
& lt;及# 63;xml version=?.0”;编码=癠TF-8"独立=皔es", # 63;比; & lt; classA> & lt; classAId> 11 & lt;/classAId> & lt; classAName> A1 & lt; classB> & lt; classBId> 22 & lt;/classBId> & lt; classBName> B2 & lt;/classB> & lt;/classA>
这里要注意以下几点
1。要序列化的类加上,@XmlRootElement注解,否则会报错(错误提示很清晰,这里就不贴出来了)
2。JAXB序列化XML时,默认序列化getter和setter,且getter和setter必须成对出现才会被序列化