You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Guido Schmutz <Gu...@trivadis.com> on 2002/09/11 23:57:33 UTC

[Patch ??] [Jelly] java.lang.ClassCastException when using dynamic tags inside a loop

Hi,
 
In the meantime I was able to debug the problem below and I've tracked it down to the method run in the class StaticTagScript. In the following line, the variable tag holds a DynamicTag and not a StaticTag inside a loop (step >= 2), causing the ClassCastException
 
tag = findDynamicTag(context, (StaticTag) tag);
 
With a instanceof check, the Exception can be avoided:
 
if (! (tag instanceof DynamicTag)) {
     tag = findDynamicTag(context, (StaticTag) tag);
}
 
I know that's not the right way to send patches, but I'm new to Jakarta projects and CVS and I first have to learn how to do diffs. Additionally I'm also not sure, if I'm really fixing the problem or if my script is not ok.
 
Thanks for your help
Guido
 

	-----Ursprüngliche Nachricht----- 
	Von: Guido Schmutz 
	Gesendet: Mi 11.09.2002 17.53 h 
	An: commons-dev@jakarta.apache.org 
	Cc: 
	Betreff: [Jelly] java.lang.ClassCastException when using dynamic tags inside a loop
	
	
	Hi,
	 
	I'm getting the following exception
	 
	Caught exception: java.lang.ClassCastException: org.apache.commons.jelly.impl.DynamicTag
	java.lang.ClassCastException: org.apache.commons.jelly.impl.DynamicTag
	 at org.apache.commons.jelly.impl.StaticTagScript.run(StaticTagScript.java:113)
	 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:134)
	 at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:190)
	 at org.apache.commons.jelly.tags.core.WhitespaceTag.doTag(WhitespaceTag.java:94)
	 at org.apache.commons.jelly.impl.BeanTagScript.run(BeanTagScript.java:180)
	 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:134)
	 at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:190)
	 at org.apache.commons.jelly.tags.core.ForEachTag.doTag(ForEachTag.java:176)
	 at org.apache.commons.jelly.impl.BeanTagScript.run(BeanTagScript.java:180)
	 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:134)
	 at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:190)
	 at org.apache.commons.jelly.tags.core.JellyTag.doTag(JellyTag.java:100)
	 at org.apache.commons.jelly.impl.BeanTagScript.run(BeanTagScript.java:180)
	 at org.apache.commons.jelly.Jelly.main(Jelly.java:128)
	
	when executing the following Jelly Script:
	 
	<?xml version="1.0"?>
	<j:jelly xmlns:j="jelly:core" 
	          xmlns:b="jelly:betwixt"
	          xmlns:x="jelly:xml"
	          xmlns:log="jelly:log" 
	          xmlns:define="jelly:define"
	          xmlns:u="tvdUtil">
	 
	<define:taglib uri="tvdUtil" trim="true">  
	<define:tag name="sep" trim="true">
	 <j:choose>
	  <j:when test="${index == 1}">${first}</j:when>
	  <j:otherwise>${next}</j:otherwise>
	 </j:choose></define:tag>
	 
	</define:taglib>
	
	<j:forEach begin="1" end="3" indexVar="i">
	 <j:whitespace trim="false">
	  <u:sep first=";" next="," index="${i}"/> index ${i}
	 </j:whitespace>
	</j:forEach>
	</j:jelly>
	
	This exception only happens, when there is more than one step in the loop (end > 2).
	 
	I'm new to Jelly, is there a problem in my script or is it a bug ?
	 
	Thanks for your help
	Guido
	 
	I


Re: [Patch ??] [Jelly] java.lang.ClassCastException when using dynamic tags inside a loop

Posted by Jason van Zyl <ja...@zenplex.com>.
On Wed, 2002-09-11 at 17:57, Guido Schmutz wrote:
> Hi,
>  
> In the meantime I was able to debug the problem below and I've tracked it down to the method run in the class StaticTagScript. In the following line, the variable tag holds a DynamicTag and not a StaticTag inside a loop (step >= 2), causing the ClassCastException
>  
> tag = findDynamicTag(context, (StaticTag) tag);
>  
> With a instanceof check, the Exception can be avoided:
>  
> if (! (tag instanceof DynamicTag)) {
>      tag = findDynamicTag(context, (StaticTag) tag);
> }
>  
> I know that's not the right way to send patches, but I'm new to Jakarta projects and CVS and I first have to learn how to do diffs. Additionally I'm also not sure, if I'm really fixing the problem or if my script is not ok.

Patch applied with a slight modification. Thanks.
  
> Thanks for your help
> Guido
>  
> 
> 	-----Ursprüngliche Nachricht----- 
> 	Von: Guido Schmutz 
> 	Gesendet: Mi 11.09.2002 17.53 h 
> 	An: commons-dev@jakarta.apache.org 
> 	Cc: 
> 	Betreff: [Jelly] java.lang.ClassCastException when using dynamic tags inside a loop
> 	
> 	
> 	Hi,
> 	 
> 	I'm getting the following exception
> 	 
> 	Caught exception: java.lang.ClassCastException: org.apache.commons.jelly.impl.DynamicTag
> 	java.lang.ClassCastException: org.apache.commons.jelly.impl.DynamicTag
> 	 at org.apache.commons.jelly.impl.StaticTagScript.run(StaticTagScript.java:113)
> 	 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:134)
> 	 at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:190)
> 	 at org.apache.commons.jelly.tags.core.WhitespaceTag.doTag(WhitespaceTag.java:94)
> 	 at org.apache.commons.jelly.impl.BeanTagScript.run(BeanTagScript.java:180)
> 	 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:134)
> 	 at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:190)
> 	 at org.apache.commons.jelly.tags.core.ForEachTag.doTag(ForEachTag.java:176)
> 	 at org.apache.commons.jelly.impl.BeanTagScript.run(BeanTagScript.java:180)
> 	 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:134)
> 	 at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:190)
> 	 at org.apache.commons.jelly.tags.core.JellyTag.doTag(JellyTag.java:100)
> 	 at org.apache.commons.jelly.impl.BeanTagScript.run(BeanTagScript.java:180)
> 	 at org.apache.commons.jelly.Jelly.main(Jelly.java:128)
> 	
> 	when executing the following Jelly Script:
> 	 
> 	<?xml version="1.0"?>
> 	<j:jelly xmlns:j="jelly:core" 
> 	          xmlns:b="jelly:betwixt"
> 	          xmlns:x="jelly:xml"
> 	          xmlns:log="jelly:log" 
> 	          xmlns:define="jelly:define"
> 	          xmlns:u="tvdUtil">
> 	 
> 	<define:taglib uri="tvdUtil" trim="true">  
> 	<define:tag name="sep" trim="true">
> 	 <j:choose>
> 	  <j:when test="${index == 1}">${first}</j:when>
> 	  <j:otherwise>${next}</j:otherwise>
> 	 </j:choose></define:tag>
> 	 
> 	</define:taglib>
> 	
> 	<j:forEach begin="1" end="3" indexVar="i">
> 	 <j:whitespace trim="false">
> 	  <u:sep first=";" next="," index="${i}"/> index ${i}
> 	 </j:whitespace>
> 	</j:forEach>
> 	</j:jelly>
> 	
> 	This exception only happens, when there is more than one step in the loop (end > 2).
> 	 
> 	I'm new to Jelly, is there a problem in my script or is it a bug ?
> 	 
> 	Thanks for your help
> 	Guido
> 	 
> 	I
-- 
jvz.

Jason van Zyl
jason@zenplex.com
http://tambora.zenplex.org

In short, man creates for himself a new religion of a rational
and technical order to justify his work and to be justified in it.
  
  -- Jacques Ellul, The Technological Society


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>