1

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

例子:

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

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

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

4

2 回答 2

0

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

于 2014-08-29T03:02:05.137 回答
0

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

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

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