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

イマム [E-MAIL ADDRESS DELETED]
2009年 4月 24日 (金) 16:21:21 JST


今村です。

たけぞう様

情報ありがとうございます。
リンクのブログを読ませて頂き、現象について理解できました。
直接Sessionにアクセスする方法では回避策はないのですね。

次バージョンのリリースを楽しみにしています。

以上、いろいろ情報ありがとうございました。







2009/04/24 15:55 Naoki Takezoe <[E-MAIL ADDRESS DELETED]>:
> たけぞうです。
>
> mini40thさん素早いサポートありがとうございます。
>
> 現在Apache Click 2.0.1に対応したS2Click 1.0.0の開発を
> 進めているのですが、S2Click 1.0.0ではSeasar 2.4.35以降に
> バージョンアップしようと思います。
> https://www.seasar.org/issues/browse/CLICK-43
>
> Seasar 2.4.34の場合はsessionScopeというMapを使えば
> ClassCastExceptionは起きないようです。
> 以下のブログエントリが参考になるかと思います。
> http://d.hatena.ne.jp/learn/20090414/p1
>
> 2009/04/24 15:42 tada yukio <[E-MAIL ADDRESS DELETED]>:
>>
>> 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 mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
>
>
>
> --
> Naoki Takezoe
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


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