SAStruts(Super Agile Struts)あれこれ

ATOMRSS

開発時に気をつけること集

私がつまづいたことをメモしていきます。

目次

  1. アクションにおいて、@Executeでアノテートしたメソッドの名前がgetXXXXXの場合
  2. org.seasar.framework.exception.SIllegalArgumentException: [ESSR0094]IllegalArgumentExceptionが発生。なぜ?



詳細


アクションにおいて、@Executeでアノテートしたメソッドの名前がgetXXXXXの場合

アクションクラスで@Executeでアノテートしたメソッドの名前をgetXXXXXというように頭に"get"をつけたものにすると、別のメソッドを呼び出していても、getXXXXXが自動的に呼ばれてしまう
例えば、チュートリアルのAjaxActionの"hello"メソッドを"getHello"メソッドに以下のように改名してから、
public class AjaxAction {
 
    @Execute(validator = false)
    public String index() {
        return "index.jsp";
    }
 
    @Execute(validator = false)
    public String getHello() {
        ResponseUtil.write("こんにちは");
        return null;
    }
http://localhost:8080/sa-struts-tutorial/ajax/index にアクセスすると、ブラウザに”こんにちは”と表示されて、Tomcatの コンソール上には↓のような例外が発生します(indexを呼んでいるのに、 getHelloが実行されている)。

致命的: サーブレット default のServlet.service()が例外を投げました java.lang.IllegalStateException: レスポンスをコミットした後でフォワードできません at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:302) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292) 以下略
対処としては、プロパティのアクセッサー以外のメソッド名は、"getXXXXXX"にしないことになります。




org.seasar.framework.exception.SIllegalArgumentException: [ESSR0094]IllegalArgumentExceptionが発生。なぜ?

2008-09-11 10:58:04,282 [http-8080-1] ERROR org.apache.struts.action.RequestProcessor - パス /employee に対するアクションのインスタンスがありません
org.seasar.framework.exception.SIllegalArgumentException: [ESSR0094]IllegalArgumentExceptionがクラス(tutorial.action.EmployeeAction)の型(class tutorial.form.EmployeeForm)のフィールド(employeeForm)に型(tutorial.form.EmployeeForm)の値(tutorial.form.EmployeeForm@5cd4b6)を設定するときに発生しました。対象のクラスは(tutorial.action.EmployeeAction$$EnhancedByS2AOP$$17ae9dc)です。
	at org.seasar.framework.util.FieldUtil.set(FieldUtil.java:167)
	at org.seasar.framework.container.assembler.AbstractBindingTypeDef.setValue(AbstractBindingTypeDef.java:346)
	at org.seasar.framework.container.assembler.AbstractBindingTypeDef.bindAuto(AbstractBindingTypeDef.java:151)
	at org.seasar.framework.container.assembler.BindingTypeMustDef.doBind(BindingTypeMustDef.java:45)
	at org.seasar.framework.container.assembler.AbstractBindingTypeDef.bind(AbstractBindingTypeDef.java:91)
	at org.seasar.framework.container.assembler.AccessTypeFieldDef.bind(AccessTypeFieldDef.java:50)
	at org.seasar.framework.container.assembler.AccessTypeFieldDef.bind(AccessTypeFieldDef.java:42)
	at org.seasar.framework.container.assembler.AutoPropertyAssembler.assemble(AutoPropertyAssembler.java:56)
	at org.seasar.framework.container.deployer.RequestComponentDeployer.deploy(RequestComponentDeployer.java:67)
	at org.seasar.framework.container.impl.ComponentDefImpl.getComponent(ComponentDefImpl.java:111)
	at org.seasar.struts.config.S2ActionMapping.getAction(S2ActionMapping.java:320)
	at org.seasar.struts.action.ActionWrapper.<init>(ActionWrapper.java:74)
	at org.seasar.struts.action.S2RequestProcessor.processActionCreate(S2RequestProcessor.java:237)
	at org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:121)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.extension.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:127)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:75)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
	at org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:204)
	at org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:75)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:63)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Can not set tutorial.form.EmployeeForm field tutorial.action.EmployeeAction.employeeForm to tutorial.form.EmployeeForm
	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
	at sun.reflect.UnsafeObjectFieldAccessorImpl.set(Unknown Source)
	at java.lang.reflect.Field.set(Unknown Source)
	at org.seasar.framework.util.FieldUtil.set(FieldUtil.java:162)
	... 56 more


というような実行時エラー起きました。どうやらセッションスコープに格納するようにアノテートしたアクションフォームのプロパティに、Serializableをimplementsしていないクラス(Entityクラス)のListをうっかり追加したのが原因のようです。分かってしまえば当たり前なのですが、SIllegalArgumentExceptionとなっていたので、すぐに分かりませんでした。

対策としては、SerializableをimplementsしたDTOを別途作成して、Entityの代わりにアクションフォームに追加するようにしました。



アップロードしたファイル

プレゼン公開・共有サイト handsOut.jp チーム・マイナス6% - みんなで止めよう温暖化

基本情報

ソースコードID:
597
登録者:
台北猫々
登録日時:
2008/07/30 13:42
最終更新日時:
2009/05/08 22:46
登録ページ数:
106
アクセス数:
79051
タグ:
java mysql json ajax hello sastruts ページング サンプル フレームワーク データベース トークンチェック テンプレート flex validwhen s2jdbc dolteng jaxb リセット s2jdbc-gen 自動生成 一括登録 super agile struts ria tiles 一括更新 jsonic エンティティ
編集権限:
ログインユーザ全員
ブックマーク:
  • codeなにがしブックマークに追加する 0 users
  • このページをはてなブックマークに追加
  • このページを del.icio.us に追加

GoodJob

  • GoodJob
  • 1668

GJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJGJ

GJGJGJGJGJGJGJGJ

編集者一覧

  • 台北猫々

GoodJobしたユーザ

  • ikdk
  • NAT
  • mikeda
  • うさうさ
  • こてつ
  • greennoah
  • とむよん
  • icofit
  • teshimasa4
  • tamr
  • T[]HAL

ブックマークコメント