java使用JAXB将XML解组到现有对象
我有一个从一组现有java类生成的xsd,目前它按照预期成功地将XML消息解组到对象中,但是我希望能够做到的是,我有一个对象的现有实例,让解组器简单地更新传递给它的消息中包含的字段
例如(请原谅这里的任何语法错误,这只是我的想法)
如果我有一本带注释的类书,里面有许多字段、标题、作者、出版等,以及相应生成的xsd,那么如果我收到以下xml,我希望能够将许多字段设置为非必需字段
<Book>
<title>Dummys guide to JAXB</title>
</Book>
与其简单地创建一个只有标题集的新书实例,不如将其作为更新应用于现有实例,只需在该实例上设置title变量即可
# 1 楼答案
您可以使用JAXB完成这项工作,但大部分工作必须由您自己完成
在您的示例中,您需要一个查找功能,比如图书对象标题的单例注册表
由于标识符title是一个子元素,因此不能保证JAXB会在访问任何其他元素之前访问title元素。最简单的方法是将解组器创建的Book实例中的属性复制到singleton Book实例中。
afterUnmarsal
回调是执行此操作的地方:如果您想动态地从XML文档中注册对象,那么它会稍微复杂一些。在你的情况下,你可能想要这样的东西:
只要你没有嵌套的书就行
# 2 楼答案
您可以使用JAXB2 Commons-Copyable+plugin中的可复制插件来实现这一点
# 3 楼答案
JAXB不能为您这样做。但是,您可以使用JAXB将XML文档解压到一个新对象上,然后将新对象的属性反射复制到现有对象上
Commons BeanUtils为此提供了一种机制,例如
BeanUtils.copyProperties
方法。不过,我不确定这是否有深度复制