The session toolbox is always created by default, to let users access standard session tools.

There is a create-session parameter you can use for this purpose, see:
  http://velocity.apache.org/tools/releases/2.0/config.xml.html

Yes, the problem is org.apache.velocity.runtime.log.Log, which is not serializable. It's rather logic, since a logger is basically an output stream. But some session standard tools keep a reference on a logger. There is a design issue we should adress, here.


  Claude



On 06/03/2014 19:04, Christopher Schultz wrote:
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



---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org
For additional commands, e-mail: user-h...@velocity.apache.org

Reply via email to