动态管理 XMLBeans 应用程序中的 XML 模式变体

来源:互联网 发布:读取大智慧实时数据 编辑:程序博客网 时间:2024/06/05 03:38
Apache XMLBeans 本身并不支持多个 XML 模式版本。对于需要这种支持来实现兼容性管理的应用程序,这种是一个很大的限制。但是这个问题是可以解决的。在本文中,您将了解到动态类加载技术如何帮助解决问题。

Apache XMLBeans 是一种开源的、与 XML 和 Java™ 绑定的工具,可用来从 XML 模式生成 Java 类和接口。使用生成的 beans,就可以解析或生成遵循模式的 XML 文档。因此,这种绑定会紧密地将生成的 Java 类和 XML 模式耦合在一起。在对 XML 模式执行或大或小的修改时,将重新生成 bean 并使用与修改后的 XML 模式对应的新 bean。至少,它正设法实现这一点。不幸的是,应用程序有时需要支持多个模式版本。例如,如果将 XML 用作数据交换标准,应用程序必须提供向前和向后兼容性,以支持较新或较旧的版本标准。

环境设置

考虑一个雇员数据管理应用程序,其中应用程序使用 XML 文件的形式保存雇员信息,并使用 Apache XMLBeans 进行处理。雇员数据一直由 XSD 定义,如清单 1 所示。模式使用 XMLBeans 模式编译器编译。应用程序然后使用生成的 Java 类和接口处理传入的 XML 文档,这个文档遵循 XSD,名称空间为 com.ibm.sample.employee:1


清单 1. 雇员 XML 模式的第一个版本

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="com.ibm.sample.employee:1" elementFormDefault="qualified"
xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="com.ibm.sample.employee:1">

<element name="employee" type="tns:employeeType"></element>

<complexType name="employeeType">
<sequence>
<element name="firstName" type="string"></element>
<element name="lastName" type="string"></element>
<element name="department" type="string"></element>
<element name="phone" type="string"></element>
<element name="eEmail" type="string"></element>
</sequence>
</complexType>
</schema>

清单 2 展示了处理雇员 XML 的应用程序,清单 3 展示了使用它的客户机应用程序:


清单 2. XMLBeans 应用程序

public class EmployeeApplication {

public void parseXML(String xmlFileName){

EmployeeDocument employeeDoc =
EmployeeDocument.Factory.parse(new File(xml));
EmployeeType employee = employeeDoc.getEmployee();
System.out.println(employee.getFirstName());
// Do something more useful with the employee data

}
}


清单 3. 客户机

EmployeeApplication app = new EmployeeApplication();
app.parseXML(xmlFilePath);

模式变更简介

现在假设模式被更改,为旧模式生成的 Java bean 再也不能使用新模式处理 XML。清单 4 展示了修改后的模式,其中添加了一些新元素,并将名称空间改为 com.ibm.sample.employee:2,表示这是第二个版本。


清单 4. 雇员 XML 模式的第二个版本


本文转自IBM Developerworks中国

      请点击此处查看全文