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]
