[Seasar-user:17312] Re: [S2Click]S2Clickでセッションからオブジェクトを取得するとキャストエラーとなります。
Naoki Takezoe
[E-MAIL ADDRESS DELETED]
2009年 4月 24日 (金) 15:55:44 JST
たけぞうです。
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 メーリングリストの案内