You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Howard M. Lewis Ship (JIRA)" <de...@tapestry.apache.org> on 2008/09/04 17:37:45 UTC

[jira] Closed: (TAPESTRY-2633) CLONE -ClassCastException in CoercingPropertyConduitWrapper

     [ https://issues.apache.org/jira/browse/TAPESTRY-2633?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Howard M. Lewis Ship closed TAPESTRY-2633.
------------------------------------------

    Resolution: Invalid

The Grid component builds a model based on the class of the first element in the list.

If that happens to be a subclass, and the list contains elements of the base class, you will get a ClassCastException.

Bind the model parameter of the Grid to your own model instance, obtained from the BeanModelSource service.

> CLONE -ClassCastException in CoercingPropertyConduitWrapper
> -----------------------------------------------------------
>
>                 Key: TAPESTRY-2633
>                 URL: https://issues.apache.org/jira/browse/TAPESTRY-2633
>             Project: Tapestry
>          Issue Type: Bug
>          Components: Core Components
>    Affects Versions: 5.0.14
>         Environment: Jboss 4.2.3 + JDK 1.5.0_16-b02 + Tapestry 5.0.14
>            Reporter: Ben Dinnerville
>            Assignee: Howard M. Lewis Ship
>
> 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>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org