You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by Serge Knystautas <sk...@gmail.com> on 2008/07/03 19:28:25 UTC

Velocity arg init issue

This is a pretty far out question, but maybe someone could point me in
the right direction.

As I mentioned a few weeks back, I realized the ResourceLoader concept
doesn't fit my CMS, so I began to access the core API.  I basically
completely rewrote my own RuntimeInstance (my class implements
RuntimeServices) and just about everything I need works... VTL is
found, parsed, rendered, context variables work, foreach directive,
etc...

One issue I have is with Macro arguments.  The macro directive is
enabled, initialized, my vmfactory works, and I can create and use 0
argument macros just fine.  It also works that if I define a 1
argument macro and use the macro with 2 arguments, it gives the
appropriate error that I passed the wrong number of arguments (I have
velocimacro.arguments.strict true).

However, when I create a macro with more than 0 arguments and use it
correctly, I get this stack trace I can't understand.  I must be not
initializing something somehow, but it's so many levels removed, I'm
not quite sure what's going on.

java.lang.NullPointerException
	 at org.apache.velocity.runtime.parser.node.SimpleNode.jjtGetChild(SimpleNode.java:172)
	 at org.apache.velocity.runtime.directive.VMProxyArg.setup(VMProxyArg.java:409)
	 at org.apache.velocity.runtime.directive.VMProxyArg.<init>(VMProxyArg.java:136)
	 at org.apache.velocity.runtime.directive.VelocimacroProxy.setupProxyArgs(VelocimacroProxy.java:401)
	 at org.apache.velocity.runtime.directive.VelocimacroProxy.setupMacro(VelocimacroProxy.java:321)
	 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)

The VTL in question is:

=======================================================
#macro (stuff $arg1)
Hello stuff $arg1
#end

#macro (foo)
Foooooo
#end

#foo()  ## This works!

#stuff("foo")  ## This gives the above stack trace
=======================================================

If anyone has any pointers on what this might be looking for, I would
greatly appreciate it.

-- 
Serge Knystautas
Lokitech >> software . strategy . design >> http://www.lokitech.com
p. 301.656.5501
e. sergek@lokitech.com

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@velocity.apache.org
For additional commands, e-mail: dev-help@velocity.apache.org


Re: Velocity arg init issue

Posted by Will Glass-Husain <wg...@gmail.com>.
Thanks, Serge.  I'd pulled up the code and was really quite puzzled.
Sounds like kind of a neat approach you are taking.

WILL

On Thu, Jul 3, 2008 at 1:18 PM, Serge Knystautas <sk...@gmail.com> wrote:
> Wow, figured this one out. :(  I doubt anyone else will hit this, but
> wanted to post it so nobody else wastes their time on this.
>
> The issue is that when the Macro directive initializes itself, when it
> comes across a macro with args, it creates a VMProxyArg.  For reasons
> I don't (need to) grasp, it creates some temporary velocity code that
> uses the Include directive and does a quick parse/evaluate on it.
> Once I re-enabled the include directive, things worked again.
>
> --
> Serge Knystautas
> Lokitech >> software . strategy . design >> http://www.lokitech.com
> p. 301.656.5501
> e. sergek@lokitech.com
>
> On Thu, Jul 3, 2008 at 1:28 PM, Serge Knystautas <sk...@gmail.com> wrote:
>> This is a pretty far out question, but maybe someone could point me in
>> the right direction.
>>
>> As I mentioned a few weeks back, I realized the ResourceLoader concept
>> doesn't fit my CMS, so I began to access the core API.  I basically
>> completely rewrote my own RuntimeInstance (my class implements
>> RuntimeServices) and just about everything I need works... VTL is
>> found, parsed, rendered, context variables work, foreach directive,
>> etc...
>>
>> One issue I have is with Macro arguments.  The macro directive is
>> enabled, initialized, my vmfactory works, and I can create and use 0
>> argument macros just fine.  It also works that if I define a 1
>> argument macro and use the macro with 2 arguments, it gives the
>> appropriate error that I passed the wrong number of arguments (I have
>> velocimacro.arguments.strict true).
>>
>> However, when I create a macro with more than 0 arguments and use it
>> correctly, I get this stack trace I can't understand.  I must be not
>> initializing something somehow, but it's so many levels removed, I'm
>> not quite sure what's going on.
>>
>> java.lang.NullPointerException
>>         at org.apache.velocity.runtime.parser.node.SimpleNode.jjtGetChild(SimpleNode.java:172)
>>         at org.apache.velocity.runtime.directive.VMProxyArg.setup(VMProxyArg.java:409)
>>         at org.apache.velocity.runtime.directive.VMProxyArg.<init>(VMProxyArg.java:136)
>>         at org.apache.velocity.runtime.directive.VelocimacroProxy.setupProxyArgs(VelocimacroProxy.java:401)
>>         at org.apache.velocity.runtime.directive.VelocimacroProxy.setupMacro(VelocimacroProxy.java:321)
>>         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)
>>
>> The VTL in question is:
>>
>> =======================================================
>> #macro (stuff $arg1)
>> Hello stuff $arg1
>> #end
>>
>> #macro (foo)
>> Foooooo
>> #end
>>
>> #foo()  ## This works!
>>
>> #stuff("foo")  ## This gives the above stack trace
>> =======================================================
>>
>> If anyone has any pointers on what this might be looking for, I would
>> greatly appreciate it.
>>
>> --
>> Serge Knystautas
>> Lokitech >> software . strategy . design >> http://www.lokitech.com
>> p. 301.656.5501
>> e. sergek@lokitech.com
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@velocity.apache.org
> For additional commands, e-mail: dev-help@velocity.apache.org
>
>



-- 
Forio Business Simulations

Will Glass-Husain
wglass@forio.com
www.forio.com

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@velocity.apache.org
For additional commands, e-mail: dev-help@velocity.apache.org


Re: Velocity arg init issue

Posted by Serge Knystautas <sk...@gmail.com>.
Wow, figured this one out. :(  I doubt anyone else will hit this, but
wanted to post it so nobody else wastes their time on this.

The issue is that when the Macro directive initializes itself, when it
comes across a macro with args, it creates a VMProxyArg.  For reasons
I don't (need to) grasp, it creates some temporary velocity code that
uses the Include directive and does a quick parse/evaluate on it.
Once I re-enabled the include directive, things worked again.

-- 
Serge Knystautas
Lokitech >> software . strategy . design >> http://www.lokitech.com
p. 301.656.5501
e. sergek@lokitech.com

On Thu, Jul 3, 2008 at 1:28 PM, Serge Knystautas <sk...@gmail.com> wrote:
> This is a pretty far out question, but maybe someone could point me in
> the right direction.
>
> As I mentioned a few weeks back, I realized the ResourceLoader concept
> doesn't fit my CMS, so I began to access the core API.  I basically
> completely rewrote my own RuntimeInstance (my class implements
> RuntimeServices) and just about everything I need works... VTL is
> found, parsed, rendered, context variables work, foreach directive,
> etc...
>
> One issue I have is with Macro arguments.  The macro directive is
> enabled, initialized, my vmfactory works, and I can create and use 0
> argument macros just fine.  It also works that if I define a 1
> argument macro and use the macro with 2 arguments, it gives the
> appropriate error that I passed the wrong number of arguments (I have
> velocimacro.arguments.strict true).
>
> However, when I create a macro with more than 0 arguments and use it
> correctly, I get this stack trace I can't understand.  I must be not
> initializing something somehow, but it's so many levels removed, I'm
> not quite sure what's going on.
>
> java.lang.NullPointerException
>         at org.apache.velocity.runtime.parser.node.SimpleNode.jjtGetChild(SimpleNode.java:172)
>         at org.apache.velocity.runtime.directive.VMProxyArg.setup(VMProxyArg.java:409)
>         at org.apache.velocity.runtime.directive.VMProxyArg.<init>(VMProxyArg.java:136)
>         at org.apache.velocity.runtime.directive.VelocimacroProxy.setupProxyArgs(VelocimacroProxy.java:401)
>         at org.apache.velocity.runtime.directive.VelocimacroProxy.setupMacro(VelocimacroProxy.java:321)
>         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)
>
> The VTL in question is:
>
> =======================================================
> #macro (stuff $arg1)
> Hello stuff $arg1
> #end
>
> #macro (foo)
> Foooooo
> #end
>
> #foo()  ## This works!
>
> #stuff("foo")  ## This gives the above stack trace
> =======================================================
>
> If anyone has any pointers on what this might be looking for, I would
> greatly appreciate it.
>
> --
> Serge Knystautas
> Lokitech >> software . strategy . design >> http://www.lokitech.com
> p. 301.656.5501
> e. sergek@lokitech.com
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@velocity.apache.org
For additional commands, e-mail: dev-help@velocity.apache.org