Hi Will,

Thanks for your information update. It's interesting to read the thead about this issue. I will test your fix.
Yes, the parser is really complicated!

Marnix

Will Glass-Husain (JIRA) schreef:
[ https://issues.apache.org/jira/browse/VELOCITY-537?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12611437#action_12611437 ]
Will Glass-Husain commented on VELOCITY-537:
--------------------------------------------

FYI - I've got a fix to the parser for this issue.  Almost.  Just trying to 
make the unit tests pass.

I spent about 6 hours working through this (surprisingly complex!).   If we 
want to keep track of comments with the parser, then Marnix's patch is probably 
the best solution.  But I think we should take the comments out in the 
tokenizer and only track the actual legit VTL.  I think I have that, just need 
to make sure all edge cases are covered.



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
           Assignee: Will Glass-Husain
            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)


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to