velocity-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Leon sdh5724 <sdh5...@gmail.com>
Subject Re: A bug in class ClassMap
Date Thu, 05 Feb 2009 15:52:40 GMT
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 <nbubna@gmail.com>

> 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 <sdh5724@gmail.com> 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: dev-unsubscribe@velocity.apache.org
> For additional commands, e-mail: dev-help@velocity.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message