【问题标题】:JAXB: Generate XML from Java using XSD that contains less attributesJAXB:使用包含较少属性的 XSD 从 Java 生成 XML
【发布时间】:2013-10-17 08:22:00
【问题描述】:

我正在寻找一种从 Java 类中使用通用 XML 生成器的方法,并且如果可能的话,使用 XSD 能够使用给定的 Java 类的先前版本生成 XML。

例子:

今天我将创建带有属性Property1Property2Object1,我将使用JAXB 生成它的XSD 并将其命名为today.xsd。 明天我想将Property3 添加到Object1,然后创建一个新的XSD 文件并将其命名为明天.xsd。在此之后,我希望能够使用具有 2 个属性或 3 个属性的 Object1 的两个版本来生成 XML 数据,如果可能的话,使用生成的 XSD。

我的真实案例使用了很多具有很多属性的类,并且版本控制的数量可能很大。 我想为每个版本存储 XSD,并通过动态指定包含版本号的 XSD 名称从 Java 类生成 XML。

是否可以实现我的上述要求,或者您有类似的解决方案来满足我的需求?

【问题讨论】:

    标签: java xml jaxb xsd


    【解决方案1】:

    JAXB 是一个相当僵化的框架,不支持您想做的事情。

    当您需要支持同一“对象”的不同版本时,有几种方法

    • 您可以手动解析 xml(手动我的意思是使用 XPath),这将为您提供很大的灵活性
    • 另一种方法,它在验证中更严格,但需要更多的努力是拥有几个需要手动生成的 XSD,然后使用 XSLT 可以转换不同的 XML 消息,这些消息通过 XSD 进行验证, 到“标准” XML,而这个 XML 是您使用 JAXB 映射的那个。这种模式有一些变体,您可以将不同的版本汇集到您的应用程序期望的版本中。

    【讨论】:

      【解决方案2】:

      我不喜欢上面@Augusto 的回答,但我认为问题在于使用 JAXB 生成 XSD,因为这将是不灵活的。 它不会在所有情况下都有效,但对于您所描述的相对简单的演变,您应该能够(手动)编写一个 XSD,以保持与前几天 XSD 的向后兼容性,其中基本上新属性始终是可选的。通过从最新的 XSD 重新生成 JAXB 类,您应该能够从任何时间点将 xml 读取到最新的 JAXB 类中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-27
        • 2016-01-27
        • 1970-01-01
        相关资源
        最近更新 更多