快速业务通道

JiBX 1.2,第2部分: 从XML模式到Java代码(二) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

JiBX 1.2,第2部分: 从XML模式到Java代码(二)

时间:2012-01-14 IBM Dennis Sosnoski

为 TimeCard 生成的代码

hrxml 目录中的 Ant build.xml 文件将定义尝试为 TimeCard 模式生成基本代码的 Ant 目标,包括默认生成和几个自定义示例(稍后讨论)。样例目录还包含一个测试程序 org.jibx.hrxml.Test。它将使用生成的数据模型类将样例文档解组,然后将文档重新编组并将结果与原始文档相比较。并且样例目录中有一组来自 HR-XML 发行版的测试文档。codegen 目标将使用默认值运行 CodeGen,compile 将编译生成的代码和测试代码,bind 将编译 JiBX 绑定,而 roundtrip 将对样例文档运行测试程序。您还可以使用 full 任务按顺序运行所有这些步骤。

大多数通过模式生成代码的方式都将为每个 complexType 定义及枚举 simpleType 生成一个单独的类。通过在可能的位置检查引用和内联定义,并且忽略包括和导入的模式定义中未使用的定义,CodeGen 通常能够减少生成的类的数量。在 TimeCard 模式中,有总计 10 个全局(命名的)complexType 和附加的 23 个本地(匿名)complexType,以及 8 个枚举 simpleType。生成的默认数据模型将包含 15 个顶级类和 23 个内部类,要比根据模式组件计算的少一些。您稍后将看到,如果不需要用到全部模式组件,如何使用自定义进一步简化数据模型。

<xs:choice> 处理

清单 8 显示了 CodeGen 如何处理 TimeCardType complexType 定义中的两个元素之间的选择。默认情况下,CodeGen 将使用一个选择变量来跟踪目前处于活动状态的选择。选择中包括的值的 set 方法将允许您写入目前选择的新值,但是不能直接更改选择(如果您尝试这样做,则抛出 IllegalStateException)。要在设定后更改目前的选择,首先需要调用一个清除方法(此处为 clearReportedResourceSelect()),该方法将重置选择状态。

清单 8. HR-XML TimeCard 生成的代码样例

/**
 * Schema fragment(s) for this class:
 * <pre>
 * <xs:complexType xmlns:ns="http://ns.hr-xml.org/2007-04-15" 
 *  xmlns:ns1="http://www.w3.org/XML/1998/namespace" 
 *  xmlns:xs="http://www.w3.org/2001/XMLSchema" name="TimeCardType">
 *  <xs:sequence>
 *   <xs:element type="ns:EntityIdType" name="Id" minOccurs="0"/>
 *   <xs:element name="ReportedResource">
 *    <xs:complexType>
 *     <xs:choice>
 *      <xs:element type="ns:TimeCardPersonType" name="Person"/>
 *      <xs:element name="Resource">
 *       <!-- Reference to inner class Resource -->
 *      </xs:element>
 *     </xs:choice>
 *    </xs:complexType>
 *   </xs:element>
 *   ...
 */
public class TimeCardType
{
  private EntityIdType id;
  private int reportedResourceSelect = -1;
  private final int REPORTED_RESOURCE_PERSON_CHOICE = 0;
  private final int RESOURCE_CHOICE = 1;
  private TimeCardPersonType reportedResourcePerson;
  private Resource resource;
  ...
  private void setReportedResourceSelect(int choice) {
   if (reportedResourceSelect == -1) {
     reportedResourceSelect = choice;
   } else if (rep

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号