如何正确的使用JAXB

  介绍

这期内容当中小编将会给大家带来有关如何正确的使用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必须成对出现才会被序列化

如何正确的使用JAXB