JAXB:使用包含较少属性的XSD从Java生成XML
我正在寻找一种从Java类中使用通用XML生成器的方法,并能够使用给定的Java类的早期版本生成XML,如果可能的话,使用XSD 例如: 今天,我将使用属性JAXB:使用包含较少属性的XSD从Java生成XML,java,xml,jaxb,xsd,Java,Xml,Jaxb,Xsd,我正在寻找一种从Java类中使用通用XML生成器的方法,并能够使用给定的Java类的早期版本生成XML,如果可能的话,使用XSD 例如: 今天,我将使用属性Property1和Property2创建Object1,我将使用JAXB生成它的XSD,并将其命名为Today.XSD。 明天我想将Property3添加到Object1中,我将创建一个新的XSD文件,并将其命名为明天.XSD。在此之后,我希望能够使用Object1的两个版本生成包含数据的XML,使用2个属性或3个属性,如果可能的话,使用生
Property1
和Property2
创建Object1
,我将使用JAXB生成它的XSD,并将其命名为Today.XSD。
明天我想将Property3
添加到Object1
中,我将创建一个新的XSD文件,并将其命名为明天.XSD。在此之后,我希望能够使用Object1的两个版本生成包含数据的XML,使用2个属性或3个属性,如果可能的话,使用生成的XSD
我的真实案例使用了大量具有大量属性的类,版本控制的数量可能很大。
我希望为每个版本存储XSD,并通过动态指定包含版本号的XSD名称从Java类生成XML
是否可以实现上述需求,或者您是否有类似的解决方案来满足我的需求?JAXB是一个非常严格的框架,不支持您想要做的事情 当您需要支持同一“对象”的不同版本时,有几种方法
- 您可以手动解析xml(我指的是使用XPath),这将给您很大的灵活性
- 另一种方法,在验证中更严格,但需要更多的努力,就是有几个需要手动生成的XSD,然后使用XSLT,您可以将不同的XML消息(通过XSD验证)转换为“标准”XML,而这个XML就是使用JAXB映射的XML。这种模式有一些变体,您可以将不同的版本导入到应用程序期望的版本中
- 我并不讨厌@Augusto上面的答案,但我认为问题在于用JAXB生成XSD,因为这将是不灵活的。
它不会在所有情况下都起作用,但对于您描述的相对简单的演变,您应该能够(手动)编写一个XSD,以保持与以前XSD的向后兼容性,在以前XSD中,基本上新属性总是可选的。通过从最新的XSD重新生成JAXB类,您应该能够将xml从任何时间点读入最新的JAXB类