能够在使用JAXB解组对象时挂钩上下文感知对象工厂

时间:2014-05-08 10:46:40

标签: java xml hibernate jaxb

我正在尝试使用JAXB解组(XMl - > POJO)一个对象。

XML:

<my_object>
   <uniqueName>foo</uniqueName>
   <propertyX>blah</propertyX>
</my_object>

Java类:

@XmlRootElement(name="my_object")
class MyObject {
   private String uniqueName;
   private String propertyX;

   // getters, setters omitted
}

解组工作,但在某些情况下,我想让unmarshaller根据uniqueName使用由我创建的对象。像这样的东西(伪代码):

// parse the uniqueName field first
MyObject template = myObjectDAO.loadByName(uniqueName); // result can be null
if (template == null) {
   template = new MyObject();
   template.setUniqueName(uniqueName);
}
// carry on with other fields

目前我通过以下方式解决了这个问题:

  1. 始终使用默认的unmarshaller行为(让JAXB使用public no args构造函数创建模板)并解析所有字段。
  2. 尝试按uniqueName加载对象并且对象存在 - 使用BeanUtils.copyProperties(unmarshalled, loaded)复制所有字段。
  3. 以上工作但不是最佳。

    问题:

    • 有没有办法使用标准的JAXB技术来解决这个问题?
    • 如果没有,如果提前知道uniqueName(解组前),是否可以解决这个问题?

    P.S。 uniqueName 是一个标识符(至少在Hibernate方面),因此使用JAXB-Hibernate集成很可能无法正常工作。

0 个答案:

没有答案