使用 Simple 简化 XML 序列化
真正简化从 Java 对象转换到 XML 的过程
简介: Java™ 开发人员在序列化和反序列化可扩展标记语言(Extensible Markup Language,XML)对象时有多种不同的选择。Simple 就是这样的一个例子,并且它有很多超越其他竞争方案的优势。本文概要介绍如何在 XML 通信系统中使用 Simple。
Simple 是什么?
Simple 是一个 Java 框架,用于简化序列化和反序列化 XML 的过程。使用 Simple,开发人员可以简化(名字由此而来)将简单老 Java 对象(POJO)转换成 XML 文档的过程 — 即所谓的序列化(serialization)过程。Simple 也可促进相反的过程:开发人员可以将 XML 文档转换成 POJO — 即所谓的反序列化(deserialization)过程。
Simple 名副其实,它使用注解来支持序列化和反序列化过程。根据相应的 XML 文档应该如何出现,对 POJO 进行注解。一些字段被注解为属性,另一些字段被注解为元素。类通常被注解为根元素。在序列化过程中,该框架处理冗长的解释注解和产生相应 XML 文档的过程。
无足为奇,在 XML 文档被转换成 POJO 的反序列化过程中,注解也会被解释。
使用 Simple 有几个优势。首先,它促进快速应用程序开发。Simple 是如此简单,它支持开发人员快速实现健壮的、使用 XML 序列化和反序列化的应用程序,无需完成长长的学习曲线以及付出繁重的开发劳动。
java xml是什么其次,Simple 不需要配置。前面已经提到,Simple 使用注解。这些注解取代了基于 XML 的配置文件(其他框架一般都有这样的配置文件)。
最后,Simple 只让使用它的应用程序增加少量的内存占用。Java 归档(Java Archive,JAR)文件只有 239 KB。Simple 也不依赖于一系列其他 JAR 文件,而其他框架则通常不是这样的。
获得 Simple
必须首先访问 参考资源 中列出的 Simple 网站下载归档文件,获得 Simple,然后才能使用它。但是关于这个过程,既有好消息,也有坏消息。好消息是,归档文件是免费的。坏消息是,归档文件是 . 格式的。所以,您若是想用 Microsoft® Windows® 本机归档文件
解压程序来打开这个归档文件的话,是会失望的。需要使用 WinZip 或其他类似的归档工具。
解压文件之后,注意在 jar 目录中有一个 JAR 文件(simple-xml-2.1.4.jar)。在编译时和运行时,类路径中需要有这个 JAR 文件。
序列化
将一个对象序列化成一个 XML 文档是一个相当简单的过程。涉及到两步:
1. 创建具有适当注解的 POJO。
2. 编写不多的几行代码,用于真正执行序列化过程。
为了本文目的,我们来回顾一下熟悉的鱼饵主题(当然只有读过我的文章的读者熟悉)。所以,清单 1 是一个表示鱼饵信息的 POJO。

清单 1. Lure 类
               
@Root
public class Lure {
    @Attribute
    private String type;
   
    @Element
    private String company;
   
    @Element
    private int quantityInStock;
   
    @Element
    private String model;
    public String getType() {
        return type;
    }
    public void setType(String type) {
          pe = type;
    }
    public String getCompany() {
          return company;
    }
    public void setCompany(String company) {
          thispany = company;
    }
    public int getQuantityInStock() {
          return quantityInStock;
    }
    public void setQuantityInStock(int quantityInStock) {
          this.quantityInStock = quantityInStock;
    }
    public String getModel() {
          return model;
    }
    public void setModel(String model) {
          del = model;
    }
}
这个 POJO 真的没有什么复杂的东西。其唯一可能初看起来不熟悉的部分是注解。同样,这是故意的。回想一下,Simple 框架的目的就是实现它名字的寓意。
@Root 注解描述 XML 文档的根元素。因为每个 XML 文档都需要一个根元素,所以一定要记得包含这个元素。
type 字段上面的 @Attribute 注解将该字段识别为属性。该属性被作为一个属性添加到根元素。
其余注解是 @Element 注解。这些注解位于以下 3 个字段的正上方:companyquantityInStockmodel。这些字段代表 XML 文档中的元素。
根据 JavaBean 标准,该 POJO 的其余部分由访问器(accessor)方法和 修改器(mutator)方法组成。
既然 POJO 已经创建完成了,下面就该编写序列化代码了。参见 清单 2 中的该代码。

清单 2. LureExample 类
               
public static void main(String[] args) {
    try {
          Serializer serializer = new Persister();
          Lure lure = new Lure();
          lure.setCompany("Donzai");
          lure.setModel("Marlin Buster");
          lure.setQuantityInStock(23);
          lure.setType("Trolling");
       
          File result = new File("l");
          serializer.write(lure, result);
    } catch (Exception e) {
          e.printStackTrace();
    }
}
第一件事就是实例化一个 Persister 对象。注意,该类是 Simple 框架的一部分,它实现 Serializer 接口。
接下来,实例化 Lure 对象并设置适当的字段。在本例中,制造鱼饵的公司名称是 Donzai,模型的名字是 Marlin Buster,库存数量是 23。最后,鱼饵的类型是 Trolling
再接下来,实例化一个 File 对象,它的名称是将成为 XML 文档的那个文件的名称。在本例中,该名称是 l。
最后,调用 serializer 来编写文件。write() 方法中提供两个参数。第一个参数是 POJO,第二个参数是 File 对象。
现在可以执行该代码了。清单 2 是一个 Java 应用程序,所以您可以使用自己喜欢的集成开发环境 (IDE) 来运行它。确保 simple-xml-2.1.4.jar 在类路径中。如果使用的是 Eclipse,只需在文件上右击,选择 Run As,再从出现的菜单中选择 Java Application 即可。
如果一切正常(应该如此 — 这很简单,是不是?),那么产生的 XML 文档应该类似于 清单 3

清单 3. LureExample 的输出
               
<lure type="Trolling">
  <company>Donzai</company>
  <quantityInStock>23</quantityInStock>
  <model>Marlin Buster</model>
</lure>
注意关于 清单 3 的几点。首先,注意 lure 类型是根元素的一个属性。这没有疑义,因为前面在 POJO 中是用 @Attribute 而不是 @Element 注解了 type 字段。
关于产生的 XML,另一个重点是元素名称遵循 JavaBean 标准。例如,根元素是 lure,尽管类名称是 Lure。3 个子元素名称完全匹配字段名称。同样,这也是有意为之,因为您不想要首字母大写的根元素,而子元素名称则遵循另外的模式。
反序列化
序列化一个对象是如此地容易,那么反序列化对象也很容易,对不对?对!
回想一下,反序列化是将 XML 文档转换成 POJO 的过程。很不错的是,可以使用刚才创建的 XML 文档来进行反序列化。
清单 4 展示了反序列化代码。

清单 4. LureExample2 类
               
public static void main(String[] args) {
    try {
          Serializer serializer = new Persister();
          File source = new File("l");
          Lure lure = ad(Lure.class, source);
          System.out.Company());
          System.out.Model());
          System.out.QuantityInStock());
          System.out.Type());
    } catch (Exception e) {
          e.printStackTrace();
    }
}
同样,首先是实例化一个实现 Serializer 接口的对象(Persister)。
另一个类似行是 File 对象的实例化。但是,这里有一个明显的不同。在 清单 3 中,是为一个不存在的文件实例化了 File 对象。此处假设(实际上必须这样)该文件已经存在。
接下来,通过从 Serializer 对象调用 read 方法,从而实例化 POJO。read 方法有两个参数:POJO 的类和 File 对象,后者代表包含数据的 XML 文件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。