【发布时间】:2014-10-20 20:59:07
【问题描述】:
我是 JAXB 的新手,希望能得到一些帮助。
首先让我给你一些背景知识。
-
我有一个相对简单的对象模型,它基于 2 个主要类:Provider 和 Product。现在 Provider 引用了他可以提供的 Product 列表,而 Product 引用了可以提供它的 Provider 列表。也就是说,我有循环引用!
-
产品是作为复合模式构建的,因为:a) 我不想被“类别”、“类型”……限制,而是想创建一个尽可能灵活的产品树。 b) 我想通过同一个界面管理产品和树元素(所谓的“类别”)。
-
就像我们现在一样,同一个抽象产品可以有许多不同的“物理实现”(例如:汽车是抽象产品,而丰田雅力士是物理产品)。因此,为了分离 Products 的抽象实现和物理实现,我实现了一个桥接模式。抽象产品现在是 ProductTemplate(上面提到的复合),物理产品是 ProductImplementation。
我设法使用 Hibernate(和 Spring)对此进行建模。
现在我想生成 XML 字符串来让后端和前端对话。
目前,我正在对 JAXB 进行一些研究,看看它是否能满足我的需求:
- 我想编组一个 Provider 及其所有 ProductTemplate 的列表
- 我想编组一个 ProductTemplate 及其所有提供者的列表
然而,这只是我需要的一方面。我还希望能够从同一个类中生成不同版本的 XML 字符串。例如,从一个 Provider 对象,我希望能够编组一个包含
的 XML-
只有它的基本信息(姓名、地址……)
-
扩展信息(最后交付产品、最后交付日期)
-
完整的 monty,即我在 BD 中拥有的关于他的所有信息。
目前,我能够使用 JAXB 注释来编组 ProductTemplate,因为我已在 Provider 类中将它们注释为 XmlTransient。这还不够好!
我现在不是要详细的代码说明。我要问的是:
- JAXB 可以满足我的需要吗?
- 如果是,请提出一种方法(我已经看到这篇文章回答了我的部分问题XSD for having 2 root elements (1 at a time)),尤其是来自单个类的多个 XML!
【问题讨论】:
-
大家好,自从我写了这个问题后,我就查看了 Blaise Doughan 的博客。那里说您可以在没有注释的情况下使用 JAXB 以获得更大的灵活性。这可能很好地满足我的需要。深入研究 JAXB...
-
而且 MOXy / JAXB 似乎满足了我的需要!我使用了 xml-transient 标签,使字段消失。