Re: Inconsistent and strange NPE when initializing Velocity

Will Glass-Husain <[email protected]>
Newsgroups gmane.comp.jakarta.velocity.user
Message-ID <CADDz7Zst-jykcoqvHoZZ7Of4=+=BVWhDHeYPLk7ZkxpWipuwAQ@mail.gmail.com>
Hi Bradley,

Are you initializing Velocity multiple times?

Though I haven't heard of this issue before, it sounds like a race
condition, perhaps if the initialization is called twice at the same time.

WILL

On Wed, Jun 6, 2012 at 8:37 AM, Bradley Wagner <
[email protected]> wrote:

> Hi,
>
> I sent this message before I had subscribed to the list so I wasn't sure if
> the original made it. My apologies if this is a duplicate.
>
> One of our clients running our software is *occasionally* running into the
> stack trace at the bottom when Velocity is initialized. A restart tends to
> fix this problem. But it pops back up after running the system for a while.
>
> They're running:
>
>   - Velocity 1.7
>   - Tomcat 6.0.35
>   - Using the 3.2 of the Apache Commons Collections library
>   - Running Java 1.6.0_31 in Mac OS X 10.6.8
>
> Unfortunately we don't have the ability to debug this problem remotely, so
> we can't see exactly what's going on, but having looked a bit at the
> Extended Properties class, it doesn't seem like it should be possible to
> get an NPE at that line, because of the containsKey() check a few lines
> before.
>
> java.lang.NullPointerException
> at
> org.apache.commons.collections.ExtendedProperties.clearProperty(ExtendedProperties.java:797)
> at
> org.apache.commons.collections.ExtendedProperties.setProperty(ExtendedProperties.java:722)
> at
> org.apache.commons.collections.ExtendedProperties.combine(ExtendedProperties.java:783)
> at
> org.apache.velocity.runtime.RuntimeInstance.setProperties(RuntimeInstance.java:657)
> at
> org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:645)
> at
> org.apache.velocity.runtime.RuntimeSingleton.init(RuntimeSingleton.java:226)
> at org.apache.velocity.app.Velocity.init(Velocity.java:97)
> at
> com.hannonhill.cascade.velocity.VelocityEngineUtil.generateMessage(VelocityEngineUtil.java:66)
>
> Also, here's the code that's calling the Velocity.init:
>
>        Properties velocityProps = VelocityProperties.getProperties();
>
>        Velocity.init(velocityProps);
>
> Velocity Properties are just loading the following file contents into a
> properties object:
>
>
> #----------------------------------------------------------------------------
> # This controls if Runtime.error(), info() and warn() messages include the
> # whole stack trace. The last property controls whether invalid references
> # are logged.
>
> #----------------------------------------------------------------------------
> runtime.log.error.stacktrace = false
> runtime.log.warn.stacktrace = false
> runtime.log.info.stacktrace = false
> runtime.log.invalid.reference = true
>
> #----------------------------------------------------------------------------
> # Configuration for the Log4JLogSystem.
> # You must define the runtime.log.logsystem.class property to be:
> #   org.apache.velocity.runtime.log.Log4JLogSystem
> #
> # You must also include Log4J's .jar files into your classpath. They are
> # included with the Velocity distribution in the build/lib directory.
> #
> # There are several different options that you can configure.
> # Uncomment the ones that you want and also define their settings.
>
> #----------------------------------------------------------------------------
>
> #----------------------------------------------------------------------------
> # T E M P L A T E  E N C O D I N G
>
> #----------------------------------------------------------------------------
> input.encoding=UTF-8
> output.encoding=UTF-8
>
> #----------------------------------------------------------------------------
> # F O R E A C H  P R O P E R T I E S
>
> #----------------------------------------------------------------------------
> # These properties control how the counter is accessed in the #foreach
> # directive. By default the reference $velocityCount will be available
> # in the body of the #foreach directive. The default starting value
> # for this reference is 1.
>
> #----------------------------------------------------------------------------
> directive.foreach.counter.name = velocityCount
> directive.foreach.counter.initial.value = 1
>
> #----------------------------------------------------------------------------
> # T E M P L A T E  L O A D E R S
>
> #----------------------------------------------------------------------------
> resource.loader = class
> class.resource.loader.description = Velocity Classpath Resource Loader
> class.resource.loader.class =
> org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.