有一组 XSD 文件,其中描述了以下类型:
A 是具有各种元素的复杂类型。B 限制 A,只保留它的一些元素 C 扩展 B,添加一些元素。
因此,这意味着由使用 XML 模式中的 C 类型的工具生成的 Java 类预计仅包括由 B 保留的 A 的那些成员,以及由 C 添加的新成员
为了让事情变得更加困难,B 实际上更改了某些元素的 minOccurs 属性。
有没有可以处理这个问题的框架?我已经尝试过 EMF 并且限制甚至没有反映到代码中。
有一组 XSD 文件,其中描述了以下类型:
A 是具有各种元素的复杂类型。B 限制 A,只保留它的一些元素 C 扩展 B,添加一些元素。
因此,这意味着由使用 XML 模式中的 C 类型的工具生成的 Java 类预计仅包括由 B 保留的 A 的那些成员,以及由 C 添加的新成员
为了让事情变得更加困难,B 实际上更改了某些元素的 minOccurs 属性。
有没有可以处理这个问题的框架?我已经尝试过 EMF 并且限制甚至没有反映到代码中。
使用Castor CodeGenerator。这真好。请参阅http://www.castor.org/reference/html-single/index.html#xml.code.generator.examples.non-trivial
这是另一种选择(供您选择):Axis2 DataBinding Framework (ADB) 支持类型层次结构和自定义限制。
优点:它生成完整的模式结构并从每个元素实现 getter 和 setter。在每种类型的设置器上,y 检查模式定义的限制,当要设置的值与限制不匹配时,它会抛出异常(在自己的 set 方法中),并且它支持 StAX 进行序列化/反序列化。
缺点:生成的代码可能有点过于冗长,验证异常太少,解释性太少,它意味着“简单”(因此对于复杂的类型扩展或限制,您可能会发现一些麻烦),并且它包含与 ADB 的一些依赖项库(即生成的 bean 实现 org.apache.axis2.databinding.ADBBean 接口)。
在使用复杂的 XSD 时,我使用XMLBeans获得了最好的结果。
另一个真正有用的功能是:
解组 XML 实例时,会保留完整的 XML 信息集并可供开发人员使用。这很关键,因为 XML 的子集不容易在 java 中表示。例如,在特定应用程序中可能需要元素或注释的顺序。