Uploaded image for project: 'Tapestry'
  1. Tapestry
  2. TAPESTRY-2633

CLONE -ClassCastException in CoercingPropertyConduitWrapper

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Invalid
    • 5.0.14
    • None
    • Core Components
    • None
    • Jboss 4.2.3 + JDK 1.5.0_16-b02 + Tapestry 5.0.14

    Description

      As per the previous issue with ClassCastExceptions in CoercingPropertyConduitWrapper, I am seeing a ClassCastException when trying to use parent / child classes in a Grid.

      I have class 1 (Campaign) and Class 2 (CCOCampaign) where Class2 extends Class1. I return a list of Campaigns thru my business layer via a List<Campaign> to the page.

      Different to the first issue is tht i am expecting to only see the properties of the parent class (Class1 / Campaign), but instead I get a ClassCastException whenever a CCOCampaign is present in the List.

      This looks to be the same issue as previously reported, with only the expected outcome differing?

      Cheers,

      Ben

      A full stack trace is as follows:

      18:44:29,641 ERROR [ClientLandingPage] Render queue error in BeginRender[ClientLandingPage:grid.rows.gridcell]: au.com.voicelogic.teleblast.business.model.Campaign
      org.apache.tapestry5.ioc.internal.util.TapestryException: au.com.voicelogic.teleblast.business.model.Campaign [at classpath:org/apache/tapestry5/corelib/components/GridRows.tml, line 4, column 81]
      at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:909)
      at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.access$200(ComponentPageElementImpl.java:50)
      at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$11.render(ComponentPageElementImpl.java:338)
      at org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:68)
      at org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:108)
      at $PageRenderQueue_11c1d152070.render($PageRenderQueue_11c1d152070.java)
      at $PageRenderQueue_11c1d152069.render($PageRenderQueue_11c1d152069.java)
      at org.apache.tapestry5.services.TapestryModule$15.renderMarkup(TapestryModule.java:1128)
      at org.apache.tapestry5.services.TapestryModule$24.renderMarkup(TapestryModule.java:1472)
      at $MarkupRenderer_11c1d152071.renderMarkup($MarkupRenderer_11c1d152071.java)
      at org.apache.tapestry5.services.TapestryModule$23.renderMarkup(TapestryModule.java:1453)
      at $MarkupRenderer_11c1d152071.renderMarkup($MarkupRenderer_11c1d152071.java)
      at org.apache.tapestry5.services.TapestryModule$22.renderMarkup(TapestryModule.java:1435)
      at $MarkupRenderer_11c1d152071.renderMarkup($MarkupRenderer_11c1d152071.java)
      at org.apache.tapestry5.services.TapestryModule$21.renderMarkup(TapestryModule.java:1415)
      at $MarkupRenderer_11c1d152071.renderMarkup($MarkupRenderer_11c1d152071.java)
      at $MarkupRenderer_11c1d15206e.renderMarkup($MarkupRenderer_11c1d15206e.java)
      at org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:64)
      at $PageMarkupRenderer_11c1d15206c.renderPageMarkup($PageMarkupRenderer_11c1d15206c.java)
      at org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:57)
      at $PageResponseRenderer_11c1d152027.renderPageResponse($PageResponseRenderer_11c1d152027.java)
      at org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:59)
      at org.apache.tapestry5.services.TapestryModule$29.handle(TapestryModule.java:1653)
      at $PageRenderRequestHandler_11c1d152028.handle($PageRenderRequestHandler_11c1d152028.java)
      at $PageRenderRequestHandler_11c1d15201d.handle($PageRenderRequestHandler_11c1d15201d.java)
      at org.apache.tapestry5.internal.services.PageRenderDispatcher.process(PageRenderDispatcher.java:97)
      at org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:73)
      at $Dispatcher_11c1d152023.dispatch($Dispatcher_11c1d152023.java)
      at $Dispatcher_11c1d152016.dispatch($Dispatcher_11c1d152016.java)
      at org.apache.tapestry5.services.TapestryModule$13.service(TapestryModule.java:953)
      at org.apache.tapestry5.internal.services.LocalizationFilter.service(LocalizationFilter.java:42)
      at $RequestHandler_11c1d152017.service($RequestHandler_11c1d152017.java)
      at org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:586)
      at $RequestHandler_11c1d152017.service($RequestHandler_11c1d152017.java)
      at org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
      at $RequestHandler_11c1d152017.service($RequestHandler_11c1d152017.java)
      at org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:79)
      at $RequestHandler_11c1d152017.service($RequestHandler_11c1d152017.java)
      at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:93)
      at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:84)
      at org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:83)
      at org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:106)
      at $RequestHandler_11c1d152017.service($RequestHandler_11c1d152017.java)
      at $RequestHandler_11c1d15200f.service($RequestHandler_11c1d15200f.java)
      at org.apache.tapestry5.services.TapestryModule$12.service(TapestryModule.java:933)
      at org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
      at $HttpServletRequestFilter_11c1d15200e.service($HttpServletRequestFilter_11c1d15200e.java)
      at $HttpServletRequestHandler_11c1d152010.service($HttpServletRequestHandler_11c1d152010.java)
      at $HttpServletRequestHandler_11c1d15200d.service($HttpServletRequestHandler_11c1d15200d.java)
      at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:177)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
      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:230)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
      at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
      at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
      at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
      at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:437)
      at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:366)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
      at java.lang.Thread.run(Thread.java:595)
      Caused by: java.lang.ClassCastException: au.com.voicelogic.teleblast.business.model.Campaign
      at $PropertyConduit_11c1d1520ca.navigate($PropertyConduit_11c1d1520ca.java)
      at $PropertyConduit_11c1d1520ca.get($PropertyConduit_11c1d1520ca.java)
      at org.apache.tapestry5.internal.services.CoercingPropertyConduitWrapper.get(CoercingPropertyConduitWrapper.java:36)
      at org.apache.tapestry5.corelib.base.AbstractPropertyOutput.readPropertyForObject(AbstractPropertyOutput.java:138)
      at org.apache.tapestry5.corelib.base.AbstractPropertyOutput.renderPropertyValue(AbstractPropertyOutput.java:117)
      at org.apache.tapestry5.corelib.components.GridCell.beginRender(GridCell.java:28)
      at org.apache.tapestry5.corelib.components.GridCell.beginRender(GridCell.java)
      at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$11$1.run(ComponentPageElementImpl.java:334)
      at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:899)
      ... 67 more
      18:44:29,651 ERROR [RequestExceptionHandler] Processing of request failed with uncaught exception: Render queue error in BeginRender[ClientLandingPage:grid.rows.gridcell]: au.com.voicelogic.teleblast.business.model.Campaign
      org.apache.tapestry5.internal.services.RenderQueueException: Render queue error in BeginRender[ClientLandingPage:grid.rows.gridcell]: au.com.voicelogic.teleblast.business.model.Campaign [at classpath:org/apache/tapestry5/corelib/components/GridRows.tml, line 4, column 81]
      at org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:80)
      at org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:108)
      at $PageRenderQueue_11c1d152070.render($PageRenderQueue_11c1d152070.java)
      at $PageRenderQueue_11c1d152069.render($PageRenderQueue_11c1d152069.java)
      at org.apache.tapestry5.services.TapestryModule$15.renderMarkup(TapestryModule.java:1128)
      at org.apache.tapestry5.services.TapestryModule$24.renderMarkup(TapestryModule.java:1472)
      at $MarkupRenderer_11c1d152071.renderMarkup($MarkupRenderer_11c1d152071.java)
      at org.apache.tapestry5.services.TapestryModule$23.renderMarkup(TapestryModule.java:1453)
      at $MarkupRenderer_11c1d152071.renderMarkup($MarkupRenderer_11c1d152071.java)
      at org.apache.tapestry5.services.TapestryModule$22.renderMarkup(TapestryModule.java:1435)
      at $MarkupRenderer_11c1d152071.renderMarkup($MarkupRenderer_11c1d152071.java)
      at org.apache.tapestry5.services.TapestryModule$21.renderMarkup(TapestryModule.java:1415)
      at $MarkupRenderer_11c1d152071.renderMarkup($MarkupRenderer_11c1d152071.java)
      at $MarkupRenderer_11c1d15206e.renderMarkup($MarkupRenderer_11c1d15206e.java)
      at org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:64)
      at $PageMarkupRenderer_11c1d15206c.renderPageMarkup($PageMarkupRenderer_11c1d15206c.java)
      at org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:57)
      at $PageResponseRenderer_11c1d152027.renderPageResponse($PageResponseRenderer_11c1d152027.java)
      at org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:59)
      at org.apache.tapestry5.services.TapestryModule$29.handle(TapestryModule.java:1653)
      at $PageRenderRequestHandler_11c1d152028.handle($PageRenderRequestHandler_11c1d152028.java)
      at $PageRenderRequestHandler_11c1d15201d.handle($PageRenderRequestHandler_11c1d15201d.java)
      at org.apache.tapestry5.internal.services.PageRenderDispatcher.process(PageRenderDispatcher.java:97)
      at org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:73)
      at $Dispatcher_11c1d152023.dispatch($Dispatcher_11c1d152023.java)
      at $Dispatcher_11c1d152016.dispatch($Dispatcher_11c1d152016.java)
      at org.apache.tapestry5.services.TapestryModule$13.service(TapestryModule.java:953)
      at org.apache.tapestry5.internal.services.LocalizationFilter.service(LocalizationFilter.java:42)
      at $RequestHandler_11c1d152017.service($RequestHandler_11c1d152017.java)
      at org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:586)
      at $RequestHandler_11c1d152017.service($RequestHandler_11c1d152017.java)
      at org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
      at $RequestHandler_11c1d152017.service($RequestHandler_11c1d152017.java)
      at org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:79)
      at $RequestHandler_11c1d152017.service($RequestHandler_11c1d152017.java)
      at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:93)
      at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:84)
      at org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:83)
      at org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:106)
      at $RequestHandler_11c1d152017.service($RequestHandler_11c1d152017.java)
      at $RequestHandler_11c1d15200f.service($RequestHandler_11c1d15200f.java)
      at org.apache.tapestry5.services.TapestryModule$12.service(TapestryModule.java:933)
      at org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
      at $HttpServletRequestFilter_11c1d15200e.service($HttpServletRequestFilter_11c1d15200e.java)
      at $HttpServletRequestHandler_11c1d152010.service($HttpServletRequestHandler_11c1d152010.java)
      at $HttpServletRequestHandler_11c1d15200d.service($HttpServletRequestHandler_11c1d15200d.java)
      at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:177)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
      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:230)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
      at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
      at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
      at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
      at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:437)
      at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:366)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
      at java.lang.Thread.run(Thread.java:595)
      Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException: au.com.voicelogic.teleblast.business.model.Campaign [at classpath:org/apache/tapestry5/corelib/components/GridRows.tml, line 4, column 81]
      at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:909)
      at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.access$200(ComponentPageElementImpl.java:50)
      at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$11.render(ComponentPageElementImpl.java:338)
      at org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:68)
      ... 64 more
      Caused by: java.lang.ClassCastException: au.com.voicelogic.teleblast.business.model.Campaign
      at $PropertyConduit_11c1d1520ca.navigate($PropertyConduit_11c1d1520ca.java)
      at $PropertyConduit_11c1d1520ca.get($PropertyConduit_11c1d1520ca.java)
      at org.apache.tapestry5.internal.services.CoercingPropertyConduitWrapper.get(CoercingPropertyConduitWrapper.java:36)
      at org.apache.tapestry5.corelib.base.AbstractPropertyOutput.readPropertyForObject(AbstractPropertyOutput.java:138)
      at org.apache.tapestry5.corelib.base.AbstractPropertyOutput.renderPropertyValue(AbstractPropertyOutput.java:117)
      at org.apache.tapestry5.corelib.components.GridCell.beginRender(GridCell.java:28)
      at org.apache.tapestry5.corelib.components.GridCell.beginRender(GridCell.java)
      at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$11$1.run(ComponentPageElementImpl.java:334)
      at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:899)
      ... 67 more
      18:44:29,939 ERROR [PagePool] Page Page[ClientLandingPage en] is dirty, and will be discarded (rather than returned to the page pool).

      Previous Case:

      When a bean editor receives beans from differenct classes (superclass & subclass) sometimes the wrong fields are displayed and other times a ClassCastException is throws in the CoercingPropertyConduitWrapper.
      This happens only, when bean editing is finished by the onSubmit method.

      TestCase:

      TT1 is the superclasss of TT2

      TT1.java
      -------------------

      public class TT1 {
      private String name;

      public String getName()

      { return name; }

      public void setName(String name)

      { this.name = name; }

      }

      TT2.java
      ----------------------------

      public class TT2 extends TT1 {

      private String v2;

      public String getV2()

      { return v2; }

      public void setV2(String v2)

      { this.v2 = v2; }

      }

      CoercTest.java
      -----------------------

      public class CoercTest {

      @Persist
      private TT1 testObject;

      @OnEvent(component="typeTO1")
      public void onTypeTO1()

      { setTestObject(new TT1()); }

      @OnEvent(component="typeTO2")
      public void onTypeTO2()

      { setTestObject(new TT2()); }

      public TT1 getTestObject()

      { return testObject; }

      public void setTestObject(TT1 testObject)

      { this.testObject = testObject; }

      public void onSubmit()

      { testObject = null; }

      public boolean isTestObjectNotNull()

      { return testObject != null; }

      }

      CoercTest.tml

      <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
      <body>
      <t:ActionLink t:id="typeTO1">TT1</t:ActionLink><br/>
      <t:ActionLink t:id="typeTO2">TT2</t:ActionLink><br/>
      <t:If test="testObjectNotNull">
      <t:BeanEditForm object="testObject"/>
      </t:If>
      </body>
      </html>

      Attachments

        Issue Links

          Activity

            People

              hlship Howard Lewis Ship
              bdinnerv Ben Dinnerville
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: