在我的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()
方法中添加一些内容以保留异常详细信息?我错过了什么?
答案 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