2013-10-09 66 views
1

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

例子:

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

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

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

回答

0

JAXB是一个相当严格的框架,不支持你想要做的事情。

有几个方法,当你需要支持相同的“对象”

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

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