You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by "Nathan Bubna (JIRA)" <de...@velocity.apache.org> on 2007/04/03 21:37:32 UTC

[jira] Commented: (VELOCITY-537) Multi-line comments causing ParseException in macros in Velocity engine 1.5

    [ https://issues.apache.org/jira/browse/VELOCITY-537?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12486474 ] 

Nathan Bubna commented on VELOCITY-537:
---------------------------------------

The exception does not occur until you try to use the macro, and it can be reproduced with a macro as simple as:

#macro( test537a )test#*
*##end

Change the macro to any of these:

#macro( test537b )test
#**##end

#macro( test537c )
test#**##end

#macro( test537d )#**#test#end

#macro( test537e )
#**#test#end

#macro( test537f )#*
*#test#end

And the error no longer occurs.  However, #test537f() does not produce the expected output:

#test537f()

produces:

*#test

Which is baffling, to say the least!  

Something's very rotten here.  The worst part is that i could not find any simple change to Christopher's macro that would make it work as expected.  Instead i got increasingly bizarre results.  Did anyone who uses the common whitespace removal/management hacks test their code against 1.5?  It's not looking that way to me...

> 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
>
>
> 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: dev-unsubscribe@velocity.apache.org
For additional commands, e-mail: dev-help@velocity.apache.org