[
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]