2012-10-23 20 views
0

當我在JSF異常處理上做了一些實驗時,出現以下錯誤。基本上我不明白這個錯誤試圖告訴什麼?希望你們可以幫我解碼信息。當添加異常處理程序工廠時在faces-config.xml中未捕獲到servlet異常

[ERROR ] Uncaught.init.exception.thrown.by.servlet 
[ERROR ] SRVE0315E: An execption occurred: com.ibm.ws.webcontainer.webapp.WebAppErrorReport: javax.servlet.ServletException: SRVE0207E: Uncaught initialization exception created by servlet 
    at com.ibm.ws.webcontainer.webapp.WebAppErrorReport.constructErrorReport(WebAppErrorReport.java:153) 
    at com.ibm.ws.webcontainer.webapp.WebAppErrorReport.constructErrorReport(WebAppErrorReport.java:194) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1078) 
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4173) 
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:302) 
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.handleRequest(DynamicVirtualHost.java:296) 
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1006) 
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$1.run(DynamicVirtualHost.java:253) 
    at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:457) 
    at com.ibm.ws.threading.internal.Worker.executeWork(Worker.java:398) 
    at com.ibm.ws.threading.internal.Worker.run(Worker.java:380) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: javax.servlet.ServletException: SRVE0207E: Uncaught initialization exception created by servlet 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:382) 
    at com.ibm.ws.webcontainer.osgi.servlet.ServletWrapper.init(ServletWrapper.java:83) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:612) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:440) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:125) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:92) 
    at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:357) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89) 
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378) 
    at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) 
    at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    at org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101) 
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91) 
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    at org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter.doFilterHttp(DefaultLoginPageGeneratingFilter.java:86) 
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:277) 
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    at org.springframework.security.ui.preauth.AbstractPreAuthenticatedProcessingFilter.doFilterHttp(AbstractPreAuthenticatedProcessingFilter.java:69) 
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89) 
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235) 
    at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
    at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89) 
    at org.huahsin.security.PfmInitFilter.doFilter(PfmInitFilter.java:66) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:939) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1036) 
    ... 9 more 
Caused by: javax.faces.FacesException: java.lang.InstantiationException: org.huahsin.exception.JsfExceptionHandlerFactory 
    at javax.faces.FactoryFinder.newFactoryInstance(FactoryFinder.java:281) 
    at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:203) 
    at org.apache.myfaces.context.FacesContextFactoryImpl.<init>(FacesContextFactoryImpl.java:107) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at java.lang.Class.newInstance0(Class.java:355) 
    at java.lang.Class.newInstance(Class.java:308) 
    at javax.faces.FactoryFinder.newFactoryInstance(FactoryFinder.java:238) 
    at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:203) 
    at javax.faces.webapp.FacesServlet.init(FacesServlet.java:112) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:320) 
    ... 52 more 
Caused by: java.lang.InstantiationException: org.huahsin.exception.JsfExceptionHandlerFactory 
    at java.lang.Class.newInstance0(Class.java:340) 
    at java.lang.Class.newInstance(Class.java:308) 
    at javax.faces.FactoryFinder.newFactoryInstance(FactoryFinder.java:268) 
    ... 64 more 

[ERROR ] Uncaught.init.exception.thrown.by.servlet 
[ERROR ] Uncaught.init.exception.thrown.by.servlet 
[ERROR ] Error Page Exception: 

這是我配置faces-config.xml

<factory> 
    <exception-handler-factory> 
    org.huahsin.exception.JsfExceptionHandlerFactory 
    </exception-handler-factory> 
</factory> 

這是JsfExceptionHandlerFactory.java

public class JsfExceptionHandlerFactory extends ExceptionHandlerFactory { 

    private ExceptionHandlerFactory factory; 

    public JsfExceptionHandlerFactory(JsfExceptionHandlerFactory factory) { 
     this.factory = factory; 
    } 

    /* (non-Javadoc) 
    * @see javax.faces.context.ExceptionHandlerFactory#getExceptionHandler() 
    */ 
    @Override 
    public ExceptionHandler getExceptionHandler() { 
     ExceptionHandler result = new JsfExceptionHandler(factory.getExceptionHandler()); 
     return result; 
    } 

} 

這是JsfExceptionHandler.java

public class JsfExceptionHandler extends ExceptionHandlerWrapper { 

    private ExceptionHandler handler; 

    public JsfExceptionHandler(ExceptionHandler handler) { 
     this.handler = handler; 
    } 

    @Override 
    public ExceptionHandler getWrapped() { 
     return this.handler; 
    } 

    @Override 
    public void handle() throws FacesException { 

     System.out.println("handle"); 
    } 
} 
+1

檢查你的構造不是它應該是公共JsfExceptionHandlerFactory(ExceptionHandlerFactory廠){ this.factory =廠; } – Ravi

+0

我已驗證JsfExceptionHandlerFactory是公共的。 – huahsin68

+3

不,我的意思是構造函數的參數,它應該是ExceptionHandlerFactory而不是JsfExceptionHandlerFactory – Ravi

回答

0

感謝@Ravi,通過用ExceptionHandlerFactory替換構造函數參數,我解決了JsfExceptionHandlerFactory類中的問題。以下是更新的代碼。

public class JsfExceptionHandlerFactory extends ExceptionHandlerFactory { 

    private ExceptionHandlerFactory factory; 

    public JsfExceptionHandlerFactory(ExceptionHandlerFactory factory) { 
     this.factory = factory; 
    } 

    /* (non-Javadoc) 
    * @see javax.faces.context.ExceptionHandlerFactory#getExceptionHandler() 
    */ 
    @Override 
    public ExceptionHandler getExceptionHandler() { 
     ExceptionHandler result = new JsfExceptionHandler(factory.getExceptionHandler()); 
     return result; 
    } 

} 
+2

你不應該發佈這個答案,而是要求@Ravi這樣做,並接受他的答案... – Daniel