[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 メーリングリストの案内