有两个主要工具提供了将 XSD 模式编译为 Java 的方法:xmlbeans 和 JAXB。
问题是 XSD 模式确实很大:30MB 的 XML 文件,大部分模式在我的项目中没有使用,所以我可以注释掉大部分代码,但这不是一个好的解决方案。
目前我的项目使用 xmlbeans 编译模式并进行重大更改。它生成约 60MB 的类,编译需要约 30 分钟。
另一种解决方案是使用 JAXB,它会生成约 14MB 的代码,而无需编辑代码。但它会产生巨大的 ObjectFactory 类,该类无法编译并出现“太多常量”错误。我可以扔掉该类并在没有它的情况下编译模式,但据我了解,它是非常有用的类。
有什么想法如何处理这个巨大的模式吗?
您能否创建一个脚本来提取所需的模式部分,并将其集成到您的构建过程中,然后再使用 XmlBeans 或 JAXB 进行映射?
您可以使用 Python、Perl、Awk 等相当简单、轻松地编写此提取脚本;或者甚至是 XSL,如果您有这方面的专业知识(我从来没有花足够的连续时间编码 XSL 来达到精通,所以我可能会坚持使用脚本语言,但那只是我)。
e.g.:
python extract.py big-schema.xsd >small-schema.xsd
xsd2java <args> small-schema.xsd
...
您可能会发现第 3 方供应商的后续更新会使您的提取脚本无效,但除非他们对整体架构进行很大的更改,否则您应该能够相当快地更新脚本,而且听起来像是这些更新应该是相当罕见的。
顺便说一句,我有点偏爱 XmlBeans;当我们对 XML-Java 映射工具进行自己的评估时,它似乎比我们尝试过的任何其他工具都能更好地处理 xs:choice、xs:all 和类型替换等结构。但这是几年前的事了,现在肯定已经改变了。在这一点上,我们继续使用它更多是出于制度惯性而不是其他任何原因,所以对这个建议持保留态度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)