Re: [tools] Toolbox preventing session serialization

Christopher Schultz <[email protected]> Thu, 06 Mar 2014 13:04:35 -0500
Newsgroups gmane.comp.jakarta.velocity.user
Message-ID <[email protected]>
Claude,

On 3/6/14, 3:32 AM, Claude Brisson wrote:
> The Toolbox itself is seralizable. But it's enough to have only one
> non-serializable object inside the toolbox. There should be more
> informations in the stack trace.

Here's the stack trace I get from Tomcat:

java.io.NotSerializableException: org.apache.velocity.runtime.log.Log
        at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1354)
        at
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
        at
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
        at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
        at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
        at java.util.HashMap.readObject(HashMap.java:1184)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
        at
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)
        at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
        at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
        at
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
        at
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
        at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
        at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
        at
org.apache.catalina.session.StandardSession.doReadObject(StandardSession.java:1602)

Looks like the logger is the problem?

I can confirm that removing the Toolbox object from the session prior to
restarting will allow my session to resume, so its definitely the
Toolbox (or obviously some object references through it).

Here's my toolbox configuration, if that helps:

<tools>
  <toolbox scope="application">
    <tool class="org.apache.velocity.tools.generic.AlternatorTool" />
    <tool key="floatMath"
class="org.apache.velocity.tools.generic.MathTool" />
    <tool key="escape"
class="org.apache.velocity.tools.generic.EscapeTool" />
    <tool key="possiblyEscape" class="com.mysoftware.util.HTMLEscapeTool" />

    ^^^ This guy extends EscapeTool and adds a method, no data

    <tool key="dateFormat"
class="org.apache.velocity.tools.generic.DateTool" />
    <tool key="list" class="org.apache.velocity.tools.generic.ListTool" />
    <tool key="locallyNamedUtil" class="com.mysoftware.LocallyNamed$Util" />

    ^^ This guy is a class without any data, but does not
       implement Serializable. I'll modify it, but I don't suspect
       it will change the Log problem shown above.

    <tool class="org.apache.velocity.tools.generic.SortTool" />
    <tool key="resource"
class="org.apache.velocity.tools.generic.ResourceTool" />
  </toolbox>

  <toolbox scope="request" xhtml="true">
    <tool class="org.apache.velocity.tools.struts.StrutsLinkTool" />
    <tool class="org.apache.velocity.tools.struts.ValidatorTool" />
    <tool key="msg" class="org.apache.velocity.tools.struts.MessageTool" />
    <tool class="org.apache.velocity.tools.struts.ErrorsTool" />
    <tool class="org.apache.velocity.tools.struts.FormTool" />
    <tool key="parameterParser"
class="org.apache.velocity.tools.view.tools.ParameterParser" />
    <tool key="cookies" class="org.apache.velocity.tools.view.CookieTool" />
  </toolbox>
</tools>

My real question is why there is a Toolbox in my session at all... I
shouldn't need one, right?

-chris
signature.asc (application/pgp-signature, 924 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIcBAEBCAAGBQJTGLizAAoJEBzwKT+lPKRYBY8P/RQBzXxiXrRpgnfTP10OIU/2
rjxDhT6W/R0CeH+BcxItN+XwIpfW8I+0+EM/CMQ9w20olDgDdEzHcEaIrKD/nuSi
F9yf8sSEg1RSZRTM/YzJqJEAsFidijbbQiQVZnN7IEcz8bracRL18vfvvXq/1uWo
lsvrVkIBeokhjbR3fhGcrJDmjoCnajaoQCvtXARnUZBcutRHNOX41zXtXlgKLLjl
1S4K+CVgSOV1pOe5VZ1CavSal1dpWExHwwPzsdmNaPixJ8ZAAA2CS6N0DhthXpGN
3kFaIoGDEVFMJK+xDVTSehfwVsF3oWjJo3c8ROz/etl5JtxOehhTTk3mFRiAjAfQ
n3EQzBvj0ZNGc5k1flVmtmjHSS3S+tbEXZN4gHX3uQCy4tvVFwEa50iqFipsHdwm
aY7vwq+jJk1lUUEli34BVooqWLMeTOtUvsoBO17wYD3Md3zicfqS2WO/DMKa6P47
kfGN0YV2G3X8TJxa88ajUkfa2wVe9L9hT0aBYrPBKOswq7idiA6XNoeyam+ridb9
yKsvmpTxj58kJF8Zn6GgGsD9natJXT+kYSfngHQN6i7DsnspNV9DvDN39sWjK5A1
2V4+tYuLuuzNWwaHdcspBPDh2nt17BOz1KT3fFDJahGcionIQNt4fcWejPoSnVKV
MRmK3foBuXBRIFNE6lf3
=VLws
-----END PGP SIGNATURE-----