[ 
https://issues.apache.org/jira/browse/VELOCITY-579?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12594595#action_12594595
 ] 

Eric Ballet Baz commented on VELOCITY-579:
------------------------------------------

Yes it worked in Velocity 1.4 and stopped working in 1.5.

To reproduce the problem :

1) Add to your classpath the library "tools.jar" which you can find in the lib 
directory of the Sun JDK

2) In your java test program add these two lines :

com.sun.javadoc.MethodDoc methodDoc = new 
com.sun.tools.javadoc.MethodDocImpl(null, null);
context.put("methodDoc", methodDoc);

3) In your .vm template simply define :

$methodDoc.tags()

4) Run your test program

You should see something like :

ASTMethod.execute() : exception invoking method 'tags' in class 
com.sun.tools.javadoc.MethodDocImpl
java.lang.IllegalAccessException: Class 
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl can
 not access a member of class com.sun.tools.javadoc.DocImpl with modifiers 
"public"
        at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at 
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:295)
        at 
org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:245)
        at 
org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:203)
        at 
org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:294)
        at 
org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:318)
        at org.apache.velocity.Template.merge(Template.java:254)
        at Example.<init>(Example.java:100)
        at Example.main(Example.java:129)


But the method tags() is very public ! it's defined in the following interface :
http://java.sun.com/j2se/1.5.0/docs/guide/javadoc/doclet/spec/com/sun/javadoc/Doc.html#tags()
and implemented as a public method in DocImpl.

The problem here is that the class DocImpl is not public even if she implements 
public methods, this class is package protected :

abstract class DocImpl implements Doc, Comparable

This is exactly the same problem with the Weblogic implementation of 
javax.servlet.http.HttpSession which is not a public class, even if its methods 
are public! 

> Can not access a member of class X with modifiers "public" even if method is 
> public
> -----------------------------------------------------------------------------------
>
>                 Key: VELOCITY-579
>                 URL: https://issues.apache.org/jira/browse/VELOCITY-579
>             Project: Velocity
>          Issue Type: Bug
>          Components: Engine
>    Affects Versions: 1.5
>            Reporter: Eric Ballet Baz
>            Priority: Blocker
>
> When upgrading from 1.4 to 1.5 none of my template is working anymore.
> For example :
>   [javadoc]  ERROR [console:logVelocityMessage] - ASTMethod.execute() : 
> exception invoking method 'tags' in class com.sun.tools.javadoc.MethodDocImpl
>   [javadoc]  ERROR [console:logVelocityMessage] - 
> java.lang.IllegalAccessException: Class 
> org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl can not 
> access a member of class com.sun.tools.javadoc.DocImpl with modifiers "public"
> The method 'tags()' is public in com.sun.javadoc.Doc, but the implementation 
> is package protected. So the java.lang.reflect.Method object is well returned 
> by the org.apache.velocity.util.introspection.Introspector but not accessible 
> from templates.
> The same errors occured for example for javax.servlet.http.HttpSession 
> Weblogic's implementation which is not public, but methods are !
> It's not possible to wrap all objects javax.servlet.http.HttpSession into 
> public implementations ... 
> The Introspector could call method.setAccessible(true) before returning 
> Method object : if this method has been found, it is a public method !

-- 
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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to