[
https://issues.apache.org/jira/browse/VELOCITY-537?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12609402#action_12609402
]
Nathan Bubna commented on VELOCITY-537:
---------------------------------------
Found some time today to investigate this a bit further. The lexical error can
be replicated with a template as simple as:
#macro( test )#*
*#end
#test()
If you add a quiet null reference at the end, the error disappears:
#macro( test )#*
*#$!null#end
#test()
but then VELOCITY-580 manifests and the output is
*#
So, if i get no further on this, we can at least hack-patch VELOCITY-580 with
Marnix's NodeUtils' patch and propose the insertion of $!null at the end as a
workaround for this. That won't make me happy, but it's better than the
"sorry, no options to fix this" we currently have. And perhaps this smaller
test case can help more parser-savvy folks figure out the real problem. I will
start looking now, but i can't spend long on this and know little about JavaCC.
Help would be great...
> Multi-line comments causing ParseException in macros in Velocity engine 1.5
> ---------------------------------------------------------------------------
>
> Key: VELOCITY-537
> URL: https://issues.apache.org/jira/browse/VELOCITY-537
> Project: Velocity
> Issue Type: Bug
> Components: Engine
> Affects Versions: 1.5
> Reporter: Christopher Townson
> Fix For: 1.5.1
>
> Attachments: velocity-537.zip
>
>
> Moving from velocity engine 1.4 to 1.5, one of my macros is now causing a
> ParseException:
> #macro( makeLink $filepath )#*
> *##if ($request.serverName.equalsIgnoreCase("www.liveserver.com") ||
> $request.serverName.equalsIgnoreCase("liveserver.com"))#*
> *##set($mirrorDomain = "livemirror.com")#*
> *##elseif($request.serverName.equalsIgnoreCase("stagingserver.com"))#*
> *##set($mirrorDomain = "stagingmirror.com")#*
> *##elseif($request.serverName.equalsIgnoreCase("devserver.com") ||
> $request.serverName.equalsIgnoreCase("localhost"))#*
> *##set($mirrorDomain = "devmirror.com")#*
> *##else#*
> *##set($mirrorDomain = "liveserver.com")#*
> *##end#*
> *#http://${mirrorDomain}${filepath}#*
> *##end
> This macro uses the mutli-line comment hack to gobble whitespace (so that
> none appears in the link text, whilst preserving some kind of readability.
> This works fine in 1.4, but throws a ParseException in 1.5 (stacktrace below)
> -- stacktrace --
> 2007-04-03 16:05:38,712 - VelocimacroManager.parseTree() : exception makeLink
> org.apache.velocity.runtime.parser.ParseException: Lexical error:
> org.apache.velocity.runtime.parser.TokenMgrError: Lexical error at line 1,
> column 535. Encountered: <EOF> after : ""
> at org.apache.velocity.runtime.parser.Parser.parse(Parser.java:124)
> at
> org.apache.velocity.runtime.RuntimeInstance.parse(RuntimeInstance.java:1042)
> at
> org.apache.velocity.runtime.directive.VelocimacroProxy.parseTree(VelocimacroProxy.java:342)
> at
> org.apache.velocity.runtime.directive.VelocimacroProxy.setupMacro(VelocimacroProxy.java:322)
> at
> org.apache.velocity.runtime.directive.VelocimacroProxy.init(VelocimacroProxy.java:309)
> at
> org.apache.velocity.runtime.parser.node.ASTDirective.init(ASTDirective.java:134)
> at
> org.apache.velocity.runtime.parser.node.SimpleNode.init(SimpleNode.java:285)
> at org.apache.velocity.Template.initDocument(Template.java:199)
> at org.apache.velocity.Template.process(Template.java:121)
> at
> org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:415)
> at
> org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:335)
> at
> org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1102)
> at
> org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1077)
> at
> org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:528)
> at
> org.apache.velocity.tools.view.servlet.VelocityViewServlet.getTemplate(VelocityViewServlet.java:667)
> at
> org.apache.velocity.tools.view.servlet.VelocityViewServlet.handleRequest(VelocityViewServlet.java:601)
> at
> org.apache.velocity.tools.view.servlet.VelocityViewServlet.doRequest(VelocityViewServlet.java:541)
> at
> org.apache.velocity.tools.view.servlet.VelocityViewServlet.doGet(VelocityViewServlet.java:507)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
> at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
> at
> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
> at
> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
> at
> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
> at
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
> at java.lang.Thread.run(Thread.java:595)
--
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]