Discussion:
Lexical error when using Velocity to generate Java comments
Matthew Hall
2010-11-03 15:25:03 UTC
Permalink
I'm using Velocity to do some Java code generation, and I recently added
Javadoc comments to the macro so that the generated Java code will be
documented. I'm having a problem getting Velocity to give me the output I
want in my generated code, though.

Here's an example of a Javadoc comment I added to my Velocity macro:

/**

* @see
com.intervolve.prometheus.core.dataobj.DataObject#copyFrom(com.intervolve.prometheus.core.dataobj.DataObject)

*/

When I run the macro containing this comment, I get the following error:

org.apache.velocity.exception.ParseErrorException: Lexical error:
org.apache.velocity.runtime.parser.TokenMgrError: Lexical error at line 170,
column 80. Encountered: "i" (105), after : "."
at org.apache.velocity.Template.process(Template.java:141)
at
org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:446)
at
org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:354)
at
org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1400)
at
org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1380)
at
org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:401)
at org.apache.velocity.texen.Generator.getTemplate(Generator.java:310)
at org.apache.velocity.texen.Generator.parse(Generator.java:383)
at org.apache.velocity.texen.Generator.parse(Generator.java:353)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
at
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
at
org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
at
org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:262)
at
org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:342)
at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
at org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:366)
at
org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:175)
at
org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
at org.apache.velocity.Template.merge(Template.java:328)
at org.apache.velocity.Template.merge(Template.java:235)
at org.apache.velocity.texen.Generator.parse(Generator.java:445)
at org.apache.velocity.texen.ant.TexenTask.execute(TexenTask.java:584)
at
com.intervolve.prometheus.build.ant.OMGenerationTask.execute(OMGenerationTask.java:35)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at
org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at
org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:423)
at
org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:137)

I believe that this error is happening because Velocity thinks that
"#copyFrom(com." is a directive, so I add the escape character in front of
the #, like this:

/**

* @see
com.intervolve.prometheus.core.dataobj.DataObject\#copyFrom(com.intervolve.prometheus.core.dataobj.DataObject)

*/

This resolves the error, and my Velocity macro is now able to run, however,
the escape character is present in the generated code file as well. This
causes Javadoc to not be able to interpret the @see tag and correctly link
to the specified method. What can I do to resolve this, so that the escape
character that is preventing the error does not appear in my generated code
file? Thanks in advance!

--Matt
Claude Brisson
2010-11-03 15:52:40 UTC
Permalink
The upcoming release (2.0) of Velocity will introduce a way to have
inlined unparsed content:

#[[ ...unparsed content.. ]]#

Meanwhile, there are several tricks that do work, like:

#set($h = '#")

...DataObject${h}copyFrom(...



Claude
Post by Matthew Hall
I'm using Velocity to do some Java code generation, and I recently added
Javadoc comments to the macro so that the generated Java code will be
documented. I'm having a problem getting Velocity to give me the output I
want in my generated code, though.
/**
com.intervolve.prometheus.core.dataobj.DataObject#copyFrom(com.intervolve.prometheus.core.dataobj.DataObject)
*/
org.apache.velocity.runtime.parser.TokenMgrError: Lexical error at line 170,
column 80. Encountered: "i" (105), after : "."
at org.apache.velocity.Template.process(Template.java:141)
at
org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:446)
at
org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:354)
at
org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1400)
at
org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1380)
at
org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:401)
at org.apache.velocity.texen.Generator.getTemplate(Generator.java:310)
at org.apache.velocity.texen.Generator.parse(Generator.java:383)
at org.apache.velocity.texen.Generator.parse(Generator.java:353)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
at
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
at
org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
at
org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:262)
at
org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:342)
at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
at org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:366)
at
org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:175)
at
org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
at org.apache.velocity.Template.merge(Template.java:328)
at org.apache.velocity.Template.merge(Template.java:235)
at org.apache.velocity.texen.Generator.parse(Generator.java:445)
at org.apache.velocity.texen.ant.TexenTask.execute(TexenTask.java:584)
at
com.intervolve.prometheus.build.ant.OMGenerationTask.execute(OMGenerationTask.java:35)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at
org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at
org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:423)
at
org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:137)
I believe that this error is happening because Velocity thinks that
"#copyFrom(com." is a directive, so I add the escape character in front of
/**
com.intervolve.prometheus.core.dataobj.DataObject\#copyFrom(com.intervolve.prometheus.core.dataobj.DataObject)
*/
This resolves the error, and my Velocity macro is now able to run, however,
the escape character is present in the generated code file as well. This
to the specified method. What can I do to resolve this, so that the escape
character that is preventing the error does not appear in my generated code
file? Thanks in advance!
--Matt
Nathan Bubna
2010-11-03 17:06:49 UTC
Permalink
The #[[ unparsed, but included in output ]]# feature is also in 1.7-beta1.
The upcoming release (2.0) of Velocity will introduce a way to have inlined
 #[[ ...unparsed content.. ]]#
#set($h = '#")
...DataObject${h}copyFrom(...
 Claude
Post by Matthew Hall
I'm using Velocity to do some Java code generation, and I recently added
Javadoc comments to the macro so that the generated Java code will be
documented.  I'm having a problem getting Velocity to give me the output I
want in my generated code, though.
   /**
com.intervolve.prometheus.core.dataobj.DataObject#copyFrom(com.intervolve.prometheus.core.dataobj.DataObject)
 */
org.apache.velocity.runtime.parser.TokenMgrError: Lexical error at line 170,
column 80.  Encountered: "i" (105), after : "."
at org.apache.velocity.Template.process(Template.java:141)
at
org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:446)
at
org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:354)
at
org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1400)
at
org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1380)
at
org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:401)
at org.apache.velocity.texen.Generator.getTemplate(Generator.java:310)
at org.apache.velocity.texen.Generator.parse(Generator.java:383)
at org.apache.velocity.texen.Generator.parse(Generator.java:353)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
at
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
at
org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
at
org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:262)
at
org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:342)
at
org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
at org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:366)
at
org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:175)
at
org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
at org.apache.velocity.Template.merge(Template.java:328)
at org.apache.velocity.Template.merge(Template.java:235)
at org.apache.velocity.texen.Generator.parse(Generator.java:445)
at org.apache.velocity.texen.ant.TexenTask.execute(TexenTask.java:584)
at
com.intervolve.prometheus.build.ant.OMGenerationTask.execute(OMGenerationTask.java:35)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at
org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at
org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:423)
at
org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:137)
I believe that this error is happening because Velocity thinks that
"#copyFrom(com." is a directive, so I add the escape character in front of
   /**
com.intervolve.prometheus.core.dataobj.DataObject\#copyFrom(com.intervolve.prometheus.core.dataobj.DataObject)
 */
This resolves the error, and my Velocity macro is now able to run, however,
the escape character is present in the generated code file as well.  This
to the specified method.  What can I do to resolve this, so that the
escape
character that is preventing the error does not appear in my generated code
file?  Thanks in advance!
--Matt
---------------------------------------------------------------------
Matthew Hall
2010-11-04 13:44:12 UTC
Permalink
Right now we're using Velocity 1.6.4, but the:

#set($h = '#")

...DataObject${h}copyFrom(...

method worked great. Thanks for the help!

--Matt
Post by Nathan Bubna
The #[[ unparsed, but included in output ]]# feature is also in 1.7-beta1.
Post by Claude Brisson
The upcoming release (2.0) of Velocity will introduce a way to have
inlined
Post by Claude Brisson
#[[ ...unparsed content.. ]]#
#set($h = '#")
...DataObject${h}copyFrom(...
Claude
Post by Matthew Hall
I'm using Velocity to do some Java code generation, and I recently added
Javadoc comments to the macro so that the generated Java code will be
documented. I'm having a problem getting Velocity to give me the output
I
Post by Claude Brisson
Post by Matthew Hall
want in my generated code, though.
/**
com.intervolve.prometheus.core.dataobj.DataObject#copyFrom(com.intervolve.prometheus.core.dataobj.DataObject)
Post by Claude Brisson
Post by Matthew Hall
*/
org.apache.velocity.runtime.parser.TokenMgrError: Lexical error at line 170,
column 80. Encountered: "i" (105), after : "."
at org.apache.velocity.Template.process(Template.java:141)
at
org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:446)
Post by Claude Brisson
Post by Matthew Hall
at
org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:354)
Post by Claude Brisson
Post by Matthew Hall
at
org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1400)
Post by Claude Brisson
Post by Matthew Hall
at
org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1380)
Post by Claude Brisson
Post by Matthew Hall
at
org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:401)
Post by Claude Brisson
Post by Matthew Hall
at org.apache.velocity.texen.Generator.getTemplate(Generator.java:310)
at org.apache.velocity.texen.Generator.parse(Generator.java:383)
at org.apache.velocity.texen.Generator.parse(Generator.java:353)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
Post by Claude Brisson
Post by Matthew Hall
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
Post by Claude Brisson
Post by Matthew Hall
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
Post by Claude Brisson
Post by Matthew Hall
at
org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
Post by Claude Brisson
Post by Matthew Hall
at
org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
Post by Claude Brisson
Post by Matthew Hall
at
org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:262)
Post by Claude Brisson
Post by Matthew Hall
at
org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:342)
Post by Claude Brisson
Post by Matthew Hall
at
org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
Post by Claude Brisson
Post by Matthew Hall
at
org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:366)
Post by Claude Brisson
Post by Matthew Hall
at
org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:175)
Post by Claude Brisson
Post by Matthew Hall
at
org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
Post by Claude Brisson
Post by Matthew Hall
at org.apache.velocity.Template.merge(Template.java:328)
at org.apache.velocity.Template.merge(Template.java:235)
at org.apache.velocity.texen.Generator.parse(Generator.java:445)
at org.apache.velocity.texen.ant.TexenTask.execute(TexenTask.java:584)
at
com.intervolve.prometheus.build.ant.OMGenerationTask.execute(OMGenerationTask.java:35)
Post by Claude Brisson
Post by Matthew Hall
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
Post by Claude Brisson
Post by Matthew Hall
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
Post by Claude Brisson
Post by Matthew Hall
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
Post by Claude Brisson
Post by Matthew Hall
at
org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
Post by Claude Brisson
Post by Matthew Hall
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at
org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:423)
Post by Claude Brisson
Post by Matthew Hall
at
org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:137)
Post by Claude Brisson
Post by Matthew Hall
I believe that this error is happening because Velocity thinks that
"#copyFrom(com." is a directive, so I add the escape character in front
of
Post by Claude Brisson
Post by Matthew Hall
/**
com.intervolve.prometheus.core.dataobj.DataObject\#copyFrom(com.intervolve.prometheus.core.dataobj.DataObject)
Post by Claude Brisson
Post by Matthew Hall
*/
This resolves the error, and my Velocity macro is now able to run, however,
the escape character is present in the generated code file as well.
This
link
Post by Claude Brisson
Post by Matthew Hall
to the specified method. What can I do to resolve this, so that the escape
character that is preventing the error does not appear in my generated code
file? Thanks in advance!
--Matt
---------------------------------------------------------------------
---------------------------------------------------------------------
Loading...