我在控制器方法中抛出了一个NPE:
@ManagedBean
@RequestScoped
public class Controller {
...
@PostConstruct
@Override
protected void init() {
throw new NullPointerException();
}
...
}
和jboss日志包含以下条目:
19:34:53,045 SEVERE [javax.enterprise.resource.webcontainer.jsf.context](http- / 127.0.0.1:8080-1)java.lang.IllegalStateException:JBAS011048:构建组件实例失败
问题是没有堆栈跟踪。我已经做了很多谷歌搜索并遇到了几个关于同一问题的帖子,但是那些人对解决异常的根本原因很感兴趣,他们设法或多或少地做到了,但我对堆栈跟踪感兴趣本身。我已经尝试过自定义异常处理程序(http://wmarkito.wordpress.com/2012/04/05/adding-global-exception-handling-using-jsf-2-x-exceptionhandler/)和primefaces异常处理程序(http://www.primefaces.org/showcase-ext/views/ajaxErrorHandler.jsf;jsessionid=1gvidy1bnjzr8jggq89l59gcs)但没有成功。
如果控制器方法出现异常以及如何处理,我会很感激为什么没有堆栈跟踪的想法。
答案 0 :(得分:0)
由于以下原因,未正确记录控制器的@PostConstruct方法中引发的异常: 在org.jboss.as.ee.component.BasicComponent类中,每个异常都被捕获并用IllegalStateException包装:
try {
componentInstancePostConstructInterceptor.processInvocation(interceptorContext);
} catch (Exception e) {
throw MESSAGES.componentConstructionFailure(e);
}
并且在jboss内部深处,有一个类com.sun.faces.context.PartialViewContextImpl,它在组件构造期间采用controll,具有以下代码:
try {
// do the default behavior...
comp.encodeAll(ctx);
}
catch (Exception ce) {
if (LOGGER.isLoggable(Level.SEVERE)) {
LOGGER.severe(ce.toString());
}
并非所有组件都受到影响