在将 XML 文件解组为对象后,如何让 JAXB 调用方法?

Posted

技术标签:

【中文标题】在将 XML 文件解组为对象后,如何让 JAXB 调用方法?【英文标题】:How can I have JAXB call a method after it has completed unmarshalling an XML file into an object? 【发布时间】:2010-11-01 20:38:56 【问题描述】:

我正在使用 JAXB 将 XML 文件解组为 Java 对象——标准的东西。一旦 JAXB 完成此操作,我希望在新创建的对象上调用一个方法。

有没有一种机制可以做到这一点?我更喜欢对象,而不是外部实体,这样做是为了将构造保持在一个地方。

谢谢。

【问题讨论】:

我不明白,你想在解组过程之后自动调用一个方法吗? 是的;确切地。类似于 JUnit 的 @BeforeClass,在构造和调用变量之后调用方法。 【参考方案1】:

您可以简单地将以下方法添加到您的对象定义中:

void afterUnmarshal(Unmarshaller u, Object parent) 
  ...

一旦当前对象被完全反序列化,它就会被调用。 另请参阅有关unmarshalling callbacks的文档

【讨论】:

【参考方案2】:

除了 Unmarshaller.Listener 之外,您还可以将以下方法添加到您的域模型类本身。

public void beforeUnmarshal(Unmarshaller unmarshaller, Object parent) public void afterUnmarshal(Unmarshaller unmarshaller, Object parent)

来自: http://java.sun.com/javase/6/docs/api/javax/xml/bind/Unmarshaller.Listener.html

【讨论】:

【参考方案3】:

为了能够在解组后执行代码,您需要 Unmarshaller-Listener

但是,我不确定是否在 属性设置或之前。

注意:监听器自 JAXB-2.0 (JDK-6) 起可用

【讨论】:

以上是关于在将 XML 文件解组为对象后,如何让 JAXB 调用方法?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jaxb API 将 XML 解组为 Java 对象时获取 NullPointerException

在 Android 中将 XML 文件解组为 Java 对象?

如何将 SOAP XML 解组为 Java 对象 [重复]

Java/JAXB:根据属性将 Xml 解组为特定子类

Jaxb:如何在解组时替换给定对象树中的类/绑定

如何跳过字段并仅使用JAXB解组该字段的特定成员?