5

有一组 XSD 文件,其中描述了以下类型:

A 是具有各种元素的复杂类型。B 限制 A,只保留它的一些元素 C 扩展 B,添加一些元素。

因此,这意味着由使用 XML 模式中的 C 类型的工具生成的 Java 类预计仅包括由 B 保留的 A 的那些成员,以及由 C 添加的新成员

为了让事情变得更加困难,B 实际上更改了某些元素的 minOccurs 属性。

有没有可以处理这个问题的框架?我已经尝试过 EMF 并且限制甚至没有反映到代码中。

4

3 回答 3

4

使用Castor CodeGenerator。这真好。请参阅http://www.castor.org/reference/html-single/index.html#xml.code.generator.examples.non-trivial

于 2010-11-21T19:28:09.460 回答
2

这是另一种选择(供您选择):Axis2 DataBinding Framework (ADB) 支持类型层次结构和自定义限制。

优点:它生成完整的模式结构并从每个元素实现 getter 和 setter。在每种类型的设置器上,y 检查模式定义的限制,当要设置的值与限制不匹配时,它会抛出异常(在自己的 set 方法中),并且它支持 StAX 进行序列化/反序列化。

缺点:生成的代码可能有点过于冗长,验证异常太少,解释性太少,它意味着“简单”(因此对于复杂的类型扩展或限制,您可能会发现一些麻烦),并且它包含与 ADB 的一些依赖项库(即生成的 bean 实现 org.apache.axis2.databinding.ADBBean 接口)。

于 2010-11-22T12:34:40.607 回答
2

在使用复杂的 XSD 时,我使用XMLBeans获得了最好的结果。

  • 它具有完整的 XML 模式支持。
  • 它是唯一可以为我必须使用的复杂 xml 模式生成正确代码的框架。

另一个真正有用的功能是:

解组 XML 实例时,会保留完整的 XML 信息集并可供开发人员使用。这很关键,因为 XML 的子集不容易在 java 中表示。例如,在特定应用程序中可能需要元素或注释的顺序。

于 2010-11-26T12:01:48.573 回答