In Stripes framework, how do I handle my thrown custom exception in my Custom Exception Handler -
i'm using java stripes framework.
i've written custom exception handler. i've written custom exception classes. catch exceptions happen, , throw custom exception. custom exception handler handle custom exception. however, custom exception handler i've written extends stripes defaultexceptionhandler not seem recognize thrown custom exception , handles generic exception class.
here custom exception class:
public class myreportingexception extends servletexception { private static final long serialversionuid = 8442894821294031092l; public myreportingexception(string string, throwable throwable) { super(string, throwable); } public myreportingexception(string string) { super(string); } public myreportingexception(throwable throwable) { super(throwable); } }
here custom exception handler:
public class myexceptionhandler extends defaultexceptionhandler { private static logger logger = logger.getlogger("myexceptionhandler"); private static final string error = "/web-inf/jsp/common/error.jsp"; private static final string main = "/web-inf/jsp/main.jsp"; public resolution handle(myreportingexception e, httpservletrequest request, httpservletresponse response){ logger.error("report exception"); //the reportingactionbean throws myreportingexception , should handled here, it's not. return this.handleexception(e, request); } public resolution handle(exception e, httpservletrequest request, httpservletresponse response) { // general exception handling logger.error("general exception"); // reportingactionbean throwing myreportingexception , getting handled here. want above handler handle return this.handleexception(e, request); } private resolution handleexception(throwable e, httpservletrequest request){ request.setattribute("exception", e); logger.error("cause: " + e.getcause()); logger.error("message: " + e.getmessage()); actionbean bean = (actionbean)request.getattribute(stripesconstants.req_attr_action_bean); try { if (bean != null) { bean.getcontext().getmessages().add(new simplemessage("system error")); if(bean.getcontext().getsourcepage() != null) return bean.getcontext().getsourcepageresolution(); else return new forwardresolution(main); } else { return new forwardresolution(error); } } catch (exception e1) { logger.error("myexceptionhandler threw exception, forwarding global error page"); logger.error("cause: " + e.getcause()); logger.error("message: " + e.getmessage()); return new forwardresolution(error); } } }
here servlet throws exception:
//this no longer being used, i'm using reportingactionbean, //is shown below. public class reportingservlet extends httpservlet { private static final long serialversionuid = -4056191841381305067l; private static logger logger = logger.getlogger("reportingservlet"); public void dopost(httpservletrequest request, httpservletresponse response) throws ioexception, servletexception { doget(request, response); } public void doget(httpservletrequest request, httpservletresponse response) throws myreportingexception { try { //do stuff causes jrexception } catch (jrexception e) { logger.error(e.getmessage() + e.getstacktrace()); throw new myreportingexception("reporting error", e); } }
here snippit defines custom exception handler in web.xml:
<init-param> <param-name>exceptionhandler.class</param-name> <param-value>myexceptionhandler</param-value> </init-param>
i have other exception handler methods in myexceptionhandler class work expected. left them out of pasted code, keep short. instance, have method handle exceptions of type mybatissystemexception works beautifully. written such:
public resolution handle(mybatissystemexception e, httpservletrequest request, httpservletresponse response) { logger.error("mybatis system exception"); return this.handleexception(e, request); }
the difference getting thrown mybatis code, not mine. suspect there wrong way throwing custom exceptions.
when throw myreportingexception within servlet, class myexceptionhandler treats jrexception caught, , generic exception handler method invoked, not handler method myreportingexception.
how can myexceptionhandler handle these exceptions myreportingexception?
hopefully have provided enough information me. , suggestions appreciated!
here entire web.xml code:
<?xml version="1.0" encoding="utf-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>name</display-name> <description>description</description> <context-param> <param-name>javax.servlet.jsp.jstl.fmt.localizationcontext</param-name> <param-value>stripesresources</param-value> </context-param> <context-param> <param-name>contextconfiglocation</param-name> <param-value>/web-inf/applicationcontext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.contextloaderlistener</listener-class> </listener> <filter> <display-name>stripes filter</display-name> <filter-name>stripesfilter</filter-name> <filter-class>net.sourceforge.stripes.controller.stripesfilter</filter-class> <init-param> <param-name>populationstrategy.class</param-name> <param-value> net.sourceforge.stripes.tag.beanfirstpopulationstrategy </param-value> </init-param> <init-param> <param-name>actionresolver.packages</param-name> <param-value>com.mycompany.myapp.web</param-value> </init-param> <init-param> <param-name>interceptor.classes</param-name> <param-value> net.sourceforge.stripes.integration.spring.springinterceptor </param-value> </init-param> <init-param> <param-name>actionbeancontext.class</param-name> <param-value>com.mycompany.myapp.web.actions.myactionbeancontext</param-value> </init-param> <init-param> <param-name>exceptionhandler.class</param-name> <param-value>com.mycompany.myapp.exception.myexceptionhandler</param-value> </init-param> </filter> <filter-mapping> <filter-name>stripesfilter</filter-name> <servlet-name>stripesdispatcher</servlet-name> <dispatcher>request</dispatcher> </filter-mapping> <servlet> <servlet-name>stripesdispatcher</servlet-name> <servlet-class>net.sourceforge.stripes.controller.dispatcherservlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>stripesdispatcher</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> <servlet> <servlet-name>reportingservlet</servlet-name> <servlet-class>com.mycompany.myapp.reporting.reportingservlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>reportingservlet</servlet-name> <url-pattern>/reporting/reportingservlet</url-pattern> </servlet-mapping> <resource-env-ref> <description>db connection </description> <resource-env-ref-name>jdbc/mydb</resource-env-ref-name> <resource-env-ref-type>javax.sql.datasource</resource-env-ref-type> </resource-env-ref> <resource-env-ref> <description>jta transaction manager</description> <resource-env-ref-name>jta/usertransaction</resource-env-ref-name> <resource-env-ref-type>javax.transaction.usertransaction</resource-env-ref-type> </resource-env-ref> <resource-env-ref> <description>jta transaction synchronization registry</description> <resource-env-ref-name>transactionsynchronizationregistry</resource-env-ref-name> <resource-env-ref-type>javax.transaction.transactionsynchronizationregistry</resource-env-ref-type> </resource-env-ref> </web-app>
here reportingactionbean:
@sessionscope public class reportingactionbean extends abstractactionbean { private static final long serialversionuid = -3639427224287629886l; private static logger logger = logger.getlogger("com.mycompany.myapp.web.actions.reporting.reportingactionbean"); @defaulthandler public resolution viewreport() throws myreportingexception{ try{ //do stuff cause jrexception }catch (jrexception e){ logger.error(e.getmessage() + e.getstacktrace()); throw new myreportingexception("reporting error", e); }catch (exception e){ logger.error(e.getmessage() + e.getstacktrace()); //the jrexception caught here throw new myreportingexception("reporting error", e); //now throw custom exception , let myexceptionhanlder's myreportingexception handler method handle it. } return null; }
Comments
Post a Comment