[Seasar-user:17310] Re: [S2Click]S2Clickでセッションからオブジェクトを取得するとキャストエラーとなります。

tada yukio [E-MAIL ADDRESS DELETED]
2009年 4月 24日 (金) 15:42:00 JST


mini40thです。

S2Click 0.5.0とSeasar 2.4.35で検証してみました。
HOT Deploy時でもClassCastExceptionが発生しなくなっています。

S2Click 0.5.0が正式にSeasar 2.4.35対応しているわけではありま
せんが、ざっとテストしてみたところ、他の機能への影響はないよ
うです。

ご参考まで。


> こんにちは、今村と言います。
> 
> 現在、S2Clickにていろいろ調査を行っているのですが、
> セッションからオブジェクトを取得するときに設定したオブジェクトのクラスを指定しているにも関わらず、
> ClassCastExceptionが発生してしまい、原因がわからずに困っています。
> 
> 実装内容は、以下のようになります。
> 1.IndexPageにてセッションにオブジェクトを設定し、
>     その後、Index2Pageにリダイレクトします。
> 2.遷移先のIndex2Pageにて1.で設定したオブジェクトをセッションから取得します。
>> ここでClassCastExceptionが発生します。
> 
> 私の環境に依存している問題なのかもしれませんが、
> 何かお気づきの方がいらっしゃいましたら、
> ご教授お願いいたします。
> 
> ※以下のソースはS2Click 0.5.0に付属するblankプロジェクトのソースをもとに作成しています。
> 
> ●環境
> ---------------------------------------------------------------
> Java  1.5.0_16
> S2Click 0.5.0
> Tomcat 5.5.26
> ---------------------------------------------------------------
> 
> ●IndexPage
> ---------------------------------------------------------------
> public class IndexPage extends Page {
>     public IndexForm form = new IndexForm("form");
>     public IndexPage(){
>         form.submit.setListener(this, "doAdd");
>     }
>     public boolean doAdd(){
>         if(form.isValid()){
>             form.result.setValue(String.valueOf(
>                     form.num1.getInteger() + form.num2.getInteger()));
>         }
>         TestData testData = new TestData();
>         testData.result = form.result.getValue();
>         getContext().setSessionAttribute("INFO_KEY", testData);
>         setRedirect(Index2Page.class);
>         return true;
>     }
> }
> ---------------------------------------------------------------
> 
> ●Index2Page
> ---------------------------------------------------------------
> public class Index2Page extends Page {
>     public Index2Form form = new Index2Form("form");
>     public Index2Page(){
>         form.submit.setListener(this, "doAdd");
>         TestData testData =
> (TestData)getContext().getSessionAttribute("INFO_KEY"); // ここでエラー
>         form.result.setValue(testData.result);
>     }
>     public boolean doAdd(){
>         if(form.isValid()){
>             form.result.setValue(String.valueOf(
>                     form.num1.getInteger() + form.num2.getInteger()));
>         }
>         return true;
>     }
> }
> ---------------------------------------------------------------
> 
> ●TestData
> ---------------------------------------------------------------
> public class TestData {
>     public String result;
> }
> ---------------------------------------------------------------
> 
> ●エラー時のスタックトレース
> ---------------------------------------------------------------
> [Click] [error] handleException: java.lang.RuntimeException:
> org.seasar.framework.exception.InvocationTargetRuntimeException:
> [ESSR0043]org.seasar.s2click.example.page.Index2Page$$EnhancedByS2AOP$$10e6cbdが呼び出した対象が不正です。理由はjava.lang.ClassCastException:
> org.seasar.s2click.example.TestData
> 	at net.sf.click.ClickServlet.initPage(ClickServlet.java:1053)
> 	at net.sf.click.ClickServlet.createPage(ClickServlet.java:868)
> 	at net.sf.click.ClickServlet.handleRequest(ClickServlet.java:345)
> 	at net.sf.click.ClickServlet.doGet(ClickServlet.java:284)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> 	at net.sf.click.S2ClickServlet.service(S2ClickServlet.java:78)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
> 	at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:63)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
> 	at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
> 	at org.seasar.s2click.filter.S2ClickEncodingFilter.doFilter(S2ClickEncodingFilter.java:51)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
> 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
> 	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
> 	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
> 	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
> 	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
> 	at java.lang.Thread.run(Thread.java:595)
> Caused by: org.seasar.framework.exception.InvocationTargetRuntimeException:
> [ESSR0043]org.seasar.s2click.example.page.Index2Page$$EnhancedByS2AOP$$10e6cbdが呼び出した対象が不正です。理由はjava.lang.ClassCastException:
> org.seasar.s2click.example.TestData
> 	at org.seasar.framework.util.ConstructorUtil.newInstance(ConstructorUtil.java:65)
> 	at org.seasar.framework.container.assembler.AbstractConstructorAssembler.assembleDefault(AbstractConstructorAssembler.java:115)
> 	at org.seasar.framework.container.assembler.AutoConstructorAssembler.doAssemble(AutoConstructorAssembler.java:44)
> 	at org.seasar.framework.container.assembler.AbstractConstructorAssembler.assemble(AbstractConstructorAssembler.java:55)
> 	at org.seasar.framework.container.deployer.RequestComponentDeployer.deploy(RequestComponentDeployer.java:65)
> 	at org.seasar.framework.container.impl.ComponentDefImpl.getComponent(ComponentDefImpl.java:111)
> 	at org.seasar.framework.container.impl.S2ContainerImpl.getComponent(S2ContainerImpl.java:129)
> 	at net.sf.click.S2ClickServlet.newPageInstance(S2ClickServlet.java:92)
> 	at net.sf.click.ClickServlet.initPage(ClickServlet.java:1005)
> 	... 29 more
> Caused by: java.lang.ClassCastException: org.seasar.s2click.example.TestData
> 	at org.seasar.s2click.example.page.Index2Page.<init>(Index2Page.java:18)
> 	at org.seasar.s2click.example.page.Index2Page$$EnhancedByS2AOP$$10e6cbd.<init>(Index2Page$$EnhancedByS2AOP$$10e6cbd.java)
> 	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> 	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
> 	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
> 	at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
> 	at org.seasar.framework.util.ConstructorUtil.newInstance(ConstructorUtil.java:57)
> 	... 37 more
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user

-- 
tada yukio <[E-MAIL ADDRESS DELETED]>



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