That's alright. I opened one for you: https://issues.apache.org/jira/browse/VELOCITY-689
A quick patch would be great. We already have a version 1.6.2 almost released, but help up over a different issue. Because of that, we may be able to get a fix for this into 1.6.2 as well. The sooner we have a patch for it, the more likely that will be, i think. On Thu, Feb 5, 2009 at 7:52 AM, Leon sdh5724 <[email protected]> wrote: > Hi Bubna, > Sorry my poor english expresion, So jira is diffcult for me to express my > idea. Tomorrow I will post a patch code to the maillist. Because It is a > very critical bug for me.Would Dev Team patch the bug to version 1.6.1 > soon? > > Leon > > > > 2009/2/5 Nathan Bubna <[email protected]> > >> Thanks for the detailed analysis. Would you open an issue for this in >> our JIRA issue tracker? >> >> https://issues.apache.org/jira/browse/VELOCITY >> >> On Thu, Feb 5, 2009 at 7:32 AM, Leon sdh5724 <[email protected]> wrote: >> > Hi devs, >> > when we upgrade to velocity1.6.1. But the process failed. we found a >> > critical bug in velocity1.6.1 . I have mock the bug in details: >> > >> > First step: >> > >> > public interface ITestBean2{ >> > >> > String getName(); >> > } >> > >> > public interface ITestBean extends ITestBean2 { >> > >> > } >> > >> > private static class TestBean implements ITestBean { >> > private String name = "test bean method name"; >> > public String getName() { >> > return name; >> > } >> > } >> > >> > then set up velocity excute template code: >> > >> > context.put("testBean", new TestBean()); >> > System.out.println(evaluate("$testBean.getName()")); >> > >> > We found $testBean.getName() can not be rendered.The template can be >> > rendered in version1.4. Then I debug several hours(I never read velocity >> > code before), we found a bug in class >> > org.apache.velocity.util.introspection.ClassMap::createMethodCache() . >> Code >> > "classToReflect.getInterfaces() " is not correct used, >> Class.getInterfaces() >> > Can *ONLY* get parent interfaces, it can not get a super super >> interface. >> > So Code "createMethodCache()" missed a interface check. >> > >> > Leon Liu >> > ================================================ >> > private MethodCache createMethodCache() >> > { >> > MethodCache methodCache = new MethodCache(log); >> > for (Class classToReflect = getCachedClass(); classToReflect != >> null >> > ; classToReflect = classToReflect.getSuperclass()) >> > { >> > if (Modifier.isPublic(classToReflect.getModifiers())) >> > { >> > populateMethodCacheWith(methodCache, classToReflect); >> > } >> > *Class [] interfaces = classToReflect.getInterfaces();* >> > for (int i = 0; i < interfaces.length; i++) >> > { >> > if (Modifier.isPublic(interfaces[i].getModifiers())) >> > { >> > populateMethodCacheWith(methodCache, interfaces[i]); >> > } >> > } >> > } >> > return methodCache; >> > } >> > >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
