Develop with pleasure!

福岡でCloudとかBlockchainとか。

自作Interceptorで発生した例外の捕捉

Struts2のActionに適用するInterceptorを独自に作成してstruts.xmlに定義してみた。

<interceptors>
  <interceptor name="validTransitionChecker" class="ValidTransitionCheckInterceptor"/>
  <interceptor-stack name="customStack">
    <interceptor-ref name="validTransitionChecker"/>
    <interceptor-ref name="defaultStack"/>  
  </interceptor-stack>

な感じで。defaultStackは、Struts2でデフォルトで定義されているInterceptor郡のスタック。
ところが、ValidTransitionCheckInterceptorではある条件によって例外を発生させているんだけど、例外が発生してもを定義しているのにも関わらず、定義されたエラーページに遷移せず、Tomcatのエラーページが表示される…。

Interceptorで投げた例外はで捕捉できないのか?とか思ったが、単なるうっかりだった…。

の内容に従って例外のハンドリングを行う、InterceptorはdefaultStackで定義されているため、それより先にvalidTransitionCheckerをinterceptor-refとして定義してしまったから例外が捕捉されなかっただけ。なので、

<interceptors>
  <interceptor name="validTransitionChecker" class="ValidTransitionCheckInterceptor"/>
  <interceptor-stack name="customStack">
    <interceptor-ref name="defaultStack"/>  
  <interceptor-ref name="validTransitionChecker"/>
  </interceptor-stack>

で解決。基本的にインターセプターはinterceptor-stackに定義した順に実行される。

うっかり…。