Unable to convert instances of two separate enums on a Velocity Template
------------------------------------------------------------------------
Key: VELOCITY-805
URL: https://issues.apache.org/jira/browse/VELOCITY-805
Project: Velocity
Issue Type: Bug
Components: Engine
Affects Versions: 1.7
Environment: Tomcat 6, Spring 3.0.4
Reporter: Scott
Priority: Minor
I am unable to utilize the valueOf method on two separate instances of an enum
- which share the same name. The issue is that when the second valueOf method
is called, it is invoked on the first enum which is accessed in the template.
This can be tested by creating two enums with the same name in two separate
classes. Place these onto the context, and then try to utilize the valueOf
method and you'll receive a stack trace stating that no value exists. For
example create two separate classes with an inner enum which both have the same
name. Add each enum onto the context, and then in a template attempt to access
them in the following way: $enum1.valueOf("VAL1")
$enum2.valueOf("SOME_OTHER_VAL"). This will not work. Luckily you are able to
do the following as a workaround: $enum1.valueOf($enum1, "VAL1")
$enum2.valueOf($enum2, "SOME_OTHER_VAL")
Stack trace below:
java.lang.IllegalArgumentException: No enum const class
org.velocity.testing.domain.User$Actions.MODIFY_NAME
java.lang.Enum.valueOf(Enum.java:196)
org.velocity.testing.domain.User$Actions.valueOf(User.java:1)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:395)
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:384)
org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:173)
org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:280)
org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:369)
org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:342)
org.apache.velocity.Template.merge(Template.java:356)
org.apache.velocity.Template.merge(Template.java:260)
org.springframework.web.servlet.view.velocity.VelocityLayoutView.renderScreenContent(VelocityLayoutView.java:180)
org.springframework.web.servlet.view.velocity.VelocityLayoutView.doRender(VelocityLayoutView.java:150)
org.springframework.web.servlet.view.velocity.VelocityView.renderMergedTemplateModel(VelocityView.java:291)
org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]