[Seasar-user:17024] Re: [SAStruts]Exception の扱い

Shinzo SAITO [E-MAIL ADDRESS DELETED]
2009年 3月 3日 (火) 13:35:56 JST


齊藤新三です。

> エラーが起きたというときは、エラーの内容を載せたほうが良いですよ。

すみません。
エラーコード、ESSR0043のエラーです。

例えば、 DataAccessExceptionをRuntimeExceptionではなくExceptionを継承したものに変更し、以下のようなBowActionで実験した場合、ESSR0043のエラーが発生します。

public class BowAction {
 @Resource
 public Hoge1Service hoge1Service;
 @Resource
 public Hoge2Service hoge2Service;
 @Execute(validator=false)
 public String ssEdx() throws DataAccessException {
     〜〜〜省略〜〜〜
   try {
     throw new Exception();
     Hoge1Entity entity1 = hoge1Service.findByPK(code);
     Hoge2Entity entity2 = hoge2Service.findByUser(name);
     〜〜〜省略〜〜〜
     hoge2Service.update(entity);
   }
   catch(Exception ex) {
     throw new DataAccessException(ex);
   }
     〜〜〜省略〜〜〜
 }
}

画面に表示される例外レポートの原因には以下のトレースが表示されます。

---------------------------
org.seasar.framework.exception.InvocationTargetRuntimeException:
[ESSR0043]exp.action.BowActionが呼び出した対象が不正です。理由はexp.exception.DataAccessException:
java.lang.Exception
	org.seasar.framework.util.MethodUtil.invoke(MethodUtil.java:105)
	org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:136)
	org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:86)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
	org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:125)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	org.seasar.extension.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:127)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:75)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
	org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:219)
	org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:99)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:63)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
	org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)
---------------------------

これをみると、どうもExceptionを継承しているのが原因のように思え、RuntimeExceptionを継承してみるとうまくいきました。


2009/03/03 11:37 Yasuo Higa <[E-MAIL ADDRESS DELETED]>:
> ひがです。
>
>> 齊藤新三です。
>>
>> ひがさん、返信ありがとうございます。
>>
>> global-exceptionsに記載するような例外はたいていは専用のエラーページを表示することになります。ですので、ご指摘どおり、従来のStruts同様、global-exceptionsに記載することにします。
>> そこで、ひとつ確認なのですが、SAStrutsのglobal-exceptionsで処理してくれる例外クラスは、RuntimeExceptionを継承している必要があるように思うのですが、この認識で間違いないでしょうか?通常のExceptionではエラーになります。
>>
> エラーが起きたというときは、エラーの内容を載せたほうが良いですよ。
>
> 実行メソッドにthrowsを書いておけば、Exceptionでもスロー
> できると思います。
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>



-- 
***********************
       齊藤  新三
E-mail [E-MAIL ADDRESS DELETED]
***********************


Seasar-user メーリングリストの案内