【问题标题】:How to marshal / unmarshal different xml from the same object model如何编组/解组来自同一对象模型的不同 xml
【发布时间】:2014-10-20 20:59:07
【问题描述】:

我是 JAXB 的新手,希望能得到一些帮助。

首先让我给你一些背景知识。

  1. 我有一个相对简单的对象模型,它基于 2 个主要类:Provider 和 Product。现在 Provider 引用了他可以提供的 Product 列表,而 Product 引用了可以提供它的 Provider 列表。也就是说,我有循环引用!

  2. 产品是作为复合模式构建的,因为:a) 我不想被“类别”、“类型”……限制,而是想创建一个尽可能灵活的产品树。 b) 我想通过同一个界面管理产品和树元素(所谓的“类别”)。

  3. 就像我们现在一样,同一个抽象产品可以有许多不同的“物理实现”(例如:汽车是抽象产品,而丰田雅力士是物理产品)。因此,为了分离 Products 的抽象实现和物理实现,我实现了一个桥接模式。抽象产品现在是 ProductTemplate(上面提到的复合),物理产品是 ProductImplementation。

我设法使用 Hibernate(和 Spring)对此进行建模。

现在我想生成 XML 字符串来让后端和前端对话。

目前,我正在对 JAXB 进行一些研究,看看它是否能满足我的需求:

  1. 我想编组一个 Provider 及其所有 ProductTemplate 的列表
  2. 我想编组一个 ProductTemplate 及其所有提供者的列表

然而,这只是我需要的一方面。我还希望能够从同一个类中生成不同版本的 XML 字符串。例如,从一个 Provider 对象,我希望能够编组一个包含

的 XML
  • 只有它的基本信息(姓名、地址……)

  • 扩展信息(最后交付产品、最后交付日期)

  • 完整的 monty,即我在 BD 中拥有的关于他的所有信息。

    目前,我能够使用 JAXB 注释来编组 ProductTemplate,因为我已在 Provider 类中将它们注释为 XmlTransient。这还不够好!

我现在不是要详细的代码说明。我要问的是:

【问题讨论】:

  • 大家好,自从我写了这个问题后,我就查看了 Blaise Doughan 的博客。那里说您可以在没有注释的情况下使用 JAXB 以获得更大的灵活性。这可能很好地满足我的需要。深入研究 JAXB...
  • 而且 MOXy / JAXB 似乎满足了我的需要!我使用了 xml-transient 标签,使字段消失。

标签: java hibernate jaxb2


【解决方案1】:

我已经有一段时间没有发布这个问题了,我在 Blaise Doughan 的博客和 MOXy 网站上找到了答案。

我没有太多时间详细说明,但诀窍是使用绑定文件。您可以拥有与单个类相关的任意数量的绑定文件。您只需要将它链接到您的 JAXBContext。

我发现它不好用,但在使用循环引用编组类时它很方便。

希望对您有所帮助,并希望有一天我有时间更详细地解释:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2012-11-04
    相关资源
    最近更新 更多