快速业务通道

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

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

控制实例创建

还可以使用自定义控制解组期间的实例创建。默认情况下,JiBX 期望为每个类定义无实参(默认)的构造函数(Java 编译器将自动生成这些构造函数,如果您不定义任何其他构造函数的话)。在解组过程中需要类的新实例时,JiBX 将使用无实参构造函数创建实例。如果您的某些类只定义带有实参的构造函数,则可以使用 BindGen 自定义,将这些构造函数变成 JiBX 可以使用的构造函数。实现此目的一种方法是定义创建类实例时使用的工厂方法,其中在 <class> 自定义元素中使用 factory="xxx" 属性,以提供返回类实例的静态方法的完全限定名称(带有前导包和类信息)。您还可以在根 <custom> 元素中添加 add-constructors="true",它将生成一个根据需要向类中添加无实参构造函数的绑定。这第二种方法对于普通数据类是起作用的,但是您仍然需要提供所有实例或抽象类的工厂(因为它是绝不可以直接构造的)。当然,如果要生成仅执行输出的绑定,则实例创建不成问题,并且您不需要考虑构造函数。

处理输入类的其他自定义

BindGen 支持许多其他类型的自定义,用于控制 BindGen 处理 Java 输入类的方式。例如,如果对 Java 字段名使用命名约定,则可以通过使用 strip-prefixes 或 strip-suffixes 属性将 BindGen 配置为忽略特殊的前缀或后缀字符串(例如,如果要忽略前导的 m_ 和 s_ 前缀,则需使用 strip-prefixes="m_ s_")。这些对字段名的修改需要在将字段匹配到其他自定义中使用的值名称之前应用,并且在通过字段名生成 XML 名称时也将应用这些修改。

您还可以使用嵌套的 <value> 元素自定义类中各个字段或 bean 属性的处理方式。您将在后面的示例中看到如何使用这些值自定义元素。

控制 XML 表示

除了控制 BindGen 解析 Java 代码的方法之外,您还可以使用自定义控制数据的 XML 表示。无论值是可选的还是必要的,这些 XML 自定义都包括值的实际表示(作为元素或属性)、元素和属性的顺序和名称等等。

前面 清单 6 中的自定义示例演示了对于第一个 <class> 元素使用的 includes="street1 street2 city state postCode country" 属性形式的一个 XML 自定义。我讨论了此自定义如何从类中选择包含在 XML 表示中的值。它还将控制 XML 表示,因为列出值的顺序将成为它们在 XML 表示中的顺序。这对于在 XML 中总是被视为无序的属性来说不是重要的问题,但是对于元素来说十分重要。

如果没有 在 <class> 自定义中使用 includes 属性指定值的顺序,BindGen 将对类使用 Java 反射,按照值的分发顺序生成值。对于大多数 Java 编译器和 JVM,此反射顺序将与 Java 源代码中的定义顺序将匹配。但是,Java 编译器和 JVM 不是必须 要保留来自源代码的这个顺序,因此某些编译器或 JVM 可能导致 BindGen 更改子元素的顺序。如果您希望在无论使用哪个 Java 编译器和 JVM 的情况下都确保 XML 表示始终相同,使用 includes 属性可以帮助您轻松地固定顺序。

您还可以使用 includes 属性控制值的 XML 表示。BindGen 允许在列表中的各个名称上使用前导标志字符以指名表示:@ 表示属性,/ 表示属性。因此如果把 清单 6 的自定义更改为 includes="street1 street2 city state @postCode country",则邮政编码值的表示将从子元素变为属性。

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

时间:2012-01-14 IBM Dennis Sosnoski

控制必需状态

另一项轻松的自定义是使用 <class> 元素的 requireds 和 optionals 属性,可以控制是否将值设为可选值,还是设为必需值。和使用 includes 属性一样,您可以在 requireds 和 opt

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