0

我正在尝试捕获 Web 服务错误但也无法捕获,我该如何捕获此错误?请注意,我正在使用 Java-Ws(不是 Spring)和 JBoss

11:19:54,457 WARNING [org.apache.cxf.phase.PhaseInterceptorChain] 
(http--0.0.0.0-8080-1) Interceptor for {http://services.com/}OppService#{http:
//services.com/}getopp has thrown exception, unwinding now:
org.apache.cxf.interceptor.Fault: Unmarshalling Error: Not a number: asdas 

如果我向它发送了一个数字,一切正常,但我希望代码中断以便我可以捕获错误,问题是我似乎无法捕获它,因为它没有到达 java 代码或处理程序。错误甚至在处理程序之前。

请注意,我正在使用 Java 注释来构建 wsdl

4

1 回答 1

0

看看DefaultValidationEventHandler。根据文档:

接收验证警告或错误通知。ValidationEvent 将嵌入一个 ValidationEventLocator,指示错误或警告发生的位置。如果从此方法引发未经检查的运行时异常,则 JAXB 提供程序会将其视为该方法返回 false 并中断当前的解组、验证或编组操作。

所以基本上你需要做的是扩展那个类,覆盖handleEvent(ValidationEvent event)方法并检查例如:

if (event.getSeverity() == ValidationEvent.WARNING) {
    return super.handleEvent(event);
} else {
    throw new RuntimeException("build your own message.");
}
于 2013-03-18T10:27:07.350 回答