在jaxb解组时我的异常怎么了?

时间:2013-02-28 18:28:50

标签: java jaxb

在我的JAXB对象被解组后我需要运行一些验证代码。我的unmarshaller的事件处理程序设置为DefaultValidationEventHandler

在我添加afterUnmarshal()方法之前,当我的代码抛出异常时,它就像这样:

DefaultValidationEventHandler: [ERROR]: com.example.ExceptionClass Error message
     Location: line 3

然而,现在,我正在

DefaultValidationEventHandler: [ERROR]: null
     Location: line 3

我的afterUnmarshal()

void afterUnmarshal(final Unmarshaller unmarshaller, final Object parent) {
    //validation code that may throw a runtime exception
}

我是否应该在afterUnmarshal()方法中添加一些内容以保留异常详细信息?我错过了什么?

1 个答案:

答案 0 :(得分:2)

我无法重现您在问题中描述的内容。以下是我的尝试。

JAVA模型

<强>富

import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {

    private Bar bar;

}

<强>酒吧

Bar类只包含一个引发afterUnmarshal的{​​{1}}方法。

RuntimeException

DEMO CODE

在下面的演示代码中,我们将解组将在import javax.xml.bind.Unmarshaller; public class Bar { void afterUnmarshal(final Unmarshaller unmarshaller, final Object parent) { throw new RuntimeException("Hello World"); } } 类上触发afterUnmarshal方法的文档。

Bar

<强>输出

我们扔的import java.io.StringReader; import javax.xml.bind.*; import javax.xml.bind.helpers.DefaultValidationEventHandler; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Foo.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); unmarshaller.setEventHandler(new DefaultValidationEventHandler()); StringReader xml = new StringReader("<foo><bar/></foo>"); Foo foo = (Foo) unmarshaller.unmarshal(xml); } } 出现在堆栈跟踪中。

RuntimeException