Java JAXB与类实例化

Java JAXB与类实例化,java,xml,jaxb,Java,Xml,Jaxb,使用JAXB之类的绑定技术而不是传统的基于dom/sax的xml技术的一个障碍是,在读取xml时,它似乎非常面向实例化它所管理的类 很多时候,我希望从xml中读取值,并将它们设置为已创建实例的属性 有没有一种简单的方法告诉JAXB它必须将值应用到我拥有的类,而不是创建一个新的类?将JAXB对象用作DTO。然后您可以使用PropertyUtils.copyProperties(..)/BeanUtils.copyProperties(..)(来自commons BeanUtils)将属性传输到已经

使用JAXB之类的绑定技术而不是传统的基于dom/sax的xml技术的一个障碍是,在读取xml时,它似乎非常面向实例化它所管理的类

很多时候,我希望从xml中读取值,并将它们设置为已创建实例的属性

有没有一种简单的方法告诉JAXB它必须将值应用到我拥有的类,而不是创建一个新的类?

将JAXB对象用作DTO。然后您可以使用
PropertyUtils.copyProperties(..)
/
BeanUtils.copyProperties(..)
(来自commons BeanUtils)将属性传输到已经部分填充的对象。

在您的用例中,XML和现有实例(即ID属性)之间的链接是什么?问题是,如果基于jaxb的库想要创建实例,它们将不适合由另一个框架实例化类的情况。想想spring,容器在哪里实例化bean。或者是swing,我通常希望保存gui组件的一些属性,但我也希望自己创建它们(或者我的ide希望如此)。我的想法是一种“每类”方法,在这种方法中,我将类(或返回我的类的“工厂”)传递给jaxb,一个xml节点,它将属性加载到类属性中。是您有想要映射到XML的现有类,还是您有想要JAXB填充到的现有类实例?我有想要JAXB填充到的现有实例。@Bozho(或类似的东西)给出的方法是您现在需要做的。这是JAXB的一个有趣的可能扩展。我是EclipseLink JAXB(MOXy)的负责人,如果你想为此输入一个增强请求,那么你可以在下面的链接中这样做:好的,但是DTO树,从架构的角度来看,就像构建一个类型化的dom,不是吗?我不理解注释Ok,我再解释一下。使用基于某种dom(dom、jdom、dom4j、xom)的xml库时,需要构建一个表示xml文件的内存树。然后从树中获得所需的值。使用DTO,您可以构建一个内存中的树,它不是由“节点”对象(或“元素”和“属性”对象或任何取决于使用的特定库的对象)组成,而是由我的类a、类B组成,它们是我的DTO类。这有点扭曲。但至少有两个优点:1)如果需要,专用DTO类可能包含自定义验证逻辑2)非技术原因:jaxb是标准的,而jdom、dom4j、xom不是,并且“标准”dom实现被认为是不可用的。由于DOM“混乱”是一个真正的痛苦,让jaxb覆盖该区域可以让我休息得更轻松一些。