JAXB:使用包含较少属性的XSD从Java生成XML

时间:2013-10-09 19:42:39

标签: java xml jaxb xsd

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

示例:

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

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

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

2 个答案:

答案 0 :(得分:0)

JAXB是一个非常严格的框架,并不支持您想要做的事情。

当您需要支持相同"对象"的不同版本时,有一些方法。

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

答案 1 :(得分:0)

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