0

我目前正在努力让 Maven JAXB 插件为一组非常复杂的 Xml 模式生成模型。我从一个 Maven 模块中的所有模式开始。生成的模块能够解析该语言的任何文档。不幸的是,由于我需要在另一个模块中导入该模式和模型,我不得不将这个模块分成几个模块。在多模式模块的情况下,剧集文件似乎存在问题。

例如,现在我有一个模式定义了 xml 格式的一般结构并定义了基本类型(我们称之为 A)。现在还有其他几个模式,每个模式都实现了这些基本类型的子类型(我们称其中之一为 B)。

我创建了模块,所以 B 扩展了 A。不幸的是,现在我似乎无法再解析文档了。我可以看到,在模块 B 中,已为 A 创建了一个 ObjctFactory,其中仅包含 B 从 A 扩展的所有类型的定义。所有其他类型都不再存在。

只要此 ObjectFactory 存在,我就无法解析任何内容,因为缺少根元素的定义。如果我删除它,则 B 中定义的所有元素都会从生成的对象树中丢失。

将模块中的原始 ObjectFactory 与所有模式进行比较后,我可以看到在第一个版本中,有大量的“替代方案”告诉解析器可能会出现哪些元素。在拆分版本中,这些都丢失了,所以我想如果我删除 B 中的部分 ObjectFactory,则使用 A 中的那个,而这个不知道 B 中的元素。

那么如何让 JAXB 解析 A 和 B 中的所有元素。有什么方法可以扩展 ObjectFactories 吗?如果是,这是如何完成的?

我想接下来可能会引起麻烦的事情可能是我有几个扩展 A 的模式,所以我有包含 A、B、C、D 和 E 的文档,其中 B、C、D 和 E 都扩展了 A,但与每个模式完全无关其他。我想在这种情况下扩展不会是一种选择。

4

1 回答 1

0

在进行OGC Schemas and Tools Project时,我经常遇到这种情况。这个项目有大量相互使用的模式。

这里有一些提示给你:

  • 将单独的模式分成单独的 Maven 模块。一种模式 - 一个罐子。
  • 生成剧集文件。
  • 使用这些情节和单独的模式编译来避免为导入的模式生成类。
  • 尽管如此,XJC 还是会在这里和那里为导入的模式生成东西——即使你的剧集文件说你不需要任何东西。大多数情况下,这些东西可以被删除。我在构建期间使用 Ant 插件删除这些文件。
  • 在运行时中,您只需包含所需的所有 JAR 并为上下文路径构建 JAXB 上下文com.acme.foo:com.acme.bar

您可能想查看我提到的OGC 项目。这个项目有大量相互关联的模式,有不同的共存版本。

于 2014-03-19T20:31:59.490 回答