2013-03-18 78 views
0

我试图捕获一个Web服务错误,但不能够,我怎么能捕获这个错误? 请注意,我用的Java-WS(不是Spring)和JBossJava Ws Catch拦截器错误

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

回答

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."); 
} 
+0

我创建了一个类,并扩展它,你说,并补充了断点,但遗憾的是它不会触发 – rtp 2013-03-18 10:59:52

+0

您如何暴露您的端点?你用Spring了吗?为了被调用,你必须在服务器端的jax-ws属性中注册处理程序。 – 2013-03-18 11:14:53

+0

上午使用Java webservice和webmethod注释,他们正在做的暴露端点和什么不是...的所有工作...没有不使用弹簧,我只是意识到我的HeaderHandler被调用,我认为它不是。 defaulyValidationEventHandler仍然无法正常工作。我使用了 rtp 2013-03-18 11:43:25