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

  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,表示这是第二个版本。

未完,如须查看原文,请到:http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=9099

你可能感兴趣的:(apache,xml,bean,IBM)