快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
n Sexes       (0 - Not Known; 1 - Male; 2 - Female; 9 - Not specified)</xsd:documentation>   </xsd:annotation>   <xsd:restriction base="xsd:integer">    <xsd:pattern value="[0129]"/>   </xsd:restriction>  </xsd:simpleType>

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

时间:2012-01-14 IBM Dennis Sosnoski

清单 12 显示了可以改进生成数据模型的这些缺点的自定义。package="org.hrxml.timecard" 属性将提供用于生成的类的 Java 包。type-substitutions="xs:integer xs:int" 属性将定义 CodeGen 所应用的模式类型置换,在本例中使用 xs:int 类型替换模式中引用的 xs:integer。通过向列表中添加更多类型名称,使用空格分隔每对置换以及其中的类名,您可以定义多对置换。

嵌套的 name-converter 元素将确定如何处理被转换为 Java 名称的 XML 名称。在本例中,strip-suffixes="Type" 属性将告诉 CodeGen 只要 Type 出现在名称末尾就删除它。您可以用一张用空格分隔的列表来提供要通过此属性删除的多个备选内容。您也可以使用 strip-prefixes 属性删除名称中不必要的前导文本,以及其他几种形式的自定义。如果您需要在名称转换中执行一些特殊操作,甚至可以用您自己的实现来替换默认的名称转换类。有关这些 name-converter 选项的完整信息,请参阅 JiBX CodeGen 文档。

最后,嵌套的 class-decorator 元素将向代码生成序列中添加一个修饰符(decorator)。在本例中,修饰符是 CodeGen 发行版中提供的预定义内容,它将添加用于集合值的有用的支持方法。在 CodeGen 构造数据模型类的源代码时,它将按顺序调用所有已配置的代码生成修饰符,并且这些修饰符可以进行修改或者添加到 CodeGen 生成的字段、方法和类构造中。使用 Eclipse AST 实现,把所有这些构造作为抽象语法树(Abstract Syntax Tree,AST)组件传递给修饰符。提供的修饰符(包括在这里用于添加方法的 org.jibx.schema.codegen.extend.CollectionMethodsDecorator 修饰符,以及用于向数据模型类中添加 java.io.Serializable 接口和可选的版本 id 的 org.jibx.schema.codegen.extend.SerializableDecorator)演示了如何结合使用 Eclipse AST 以扩展 CodeGen,因此这些类的源代码是编写您自己的修饰符的最佳起点。

清单 12. TimeCard 自定义示例

<schema-set xmlns:xs="http://www.w3.org/2001/XMLSchema" package="org.hrxml.timecard"
  type-substitutions="xs:integer xs:int">
 <name-converter strip-suffixes="Type"/>
 <class-decorator class="org.jibx.schema.codegen.extend.CollectionMethodsDecorator"/>
</schema-set>

您可以使用 custgen1 Ant 目标尝试执行清单 12 中的自定义,也可以使用 custom1 目标运行完整的生成、编译、绑定及测试操作。清单 13 显示了应用自定义的结果。TimeCardType 类名已经改为 TimeCard,并且除了 List get 和 set 方法之外,现在还添加了 size、add、indexed get 和 clear 方法。在 GenderCode 类中,BigInteger 引用已经被替换为一个简单的 int 原语类型。

清单 13. 自定义的数据模型

/** 
 * Schema fragment(s) for this class:
 * <pre>
 * ...
 * </pre>
 */
public class TimeCard
{
  ...
  private List<ReportedTime> reportedTimeList = new ArrayList<ReportedTime>();
  ...
  /** 
   * Get the

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号