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

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -