java - 使用 JAXB 在不同架构版本之间迁移对象

标签 java jaxb xml-serialization migration xsd

我们使用 JAXB 将序列化对象存储在 JCR 中。 XML 文件使用版本化架构。显然,对象的类最终会发生变化,因此我们将拥有更新的模式版本。

我们如何自动将旧的存储对象迁移到新版本? JAXB 是否提供任何支持,或者是 wrong soultion ?目前我们正在使用 XSLT 脚本来转换 XML 文件,但如果我们能够自动从旧的序列化对象创建新的对象版本,那当然会更好。

对对象的预期更改可以是一切:添加或删除成员、重命名成员以及成员类型更改。

最佳答案

诀窍是使新的架构版本与以前的架构向后兼容。 (请注意,这意味着您的架构将始终变得更大。)

要消除在旧模式中有效的新模式中的元素或属性,可以在新模式中将其使用设置为可选(元素为 minOccurs="0",属性为 use="Optional"。)这将允许在旧模式下编码的数据在新模式下取消编码为有效;然后,您可以在删除有问题的元素后,将数据整理回新架构下。

要将旧模式中不存在的元素添加到新模式中,请遵循相同的逻辑:在新模式中将其设置为可选(这允许将旧数据解码为有效);然后,您可以在将其编码(marshal)回之前添加新元素或属性。

关于java - 使用 JAXB 在不同架构版本之间迁移对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20495430/

相关文章:

java - Spring 3.2 中 View Body 不显示

java - jaxb编码 self 关系

c# - XmlSerializer 无法反序列化使用同一序列化程序序列化的 XML

c# - XML 序列化和 C# 的问题

asp.net - XmlSerializer 可以反序列化为 Nullable<int> 吗?

java - 安排多个重复警报

java - 从外部 jar 或外部类路径动态加载映射实体

java - 无法运行 tomcat (Ljavax/persistence/EntityManagerFactory)

maven - Axis2 数据绑定(bind) jaxbri + Maven : JAX-B RI JARs not on classpath

java - 在 JaxB 中创建不同的运算符?