Author: pedro
Date: Wed Nov 24 18:27:33 2010
New Revision: 1038752

URL: http://svn.apache.org/viewvc?rev=1038752&view=rev
Log:
Porting the fix for WicketObjectOutputStream from the trunk to be released on 
the Wicket 1.4.14
Issue: WICKET-3136

Modified:
    
wicket/branches/wicket-1.4.14/wicket/src/main/java/org/apache/wicket/util/io/WicketObjectOutputStream.java
    
wicket/branches/wicket-1.4.14/wicket/src/test/java/org/apache/wicket/resource/DummyPage.java
    
wicket/branches/wicket-1.4.14/wicket/src/test/java/org/apache/wicket/util/io/WicketOutputStreamTest.java

Modified: 
wicket/branches/wicket-1.4.14/wicket/src/main/java/org/apache/wicket/util/io/WicketObjectOutputStream.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.14/wicket/src/main/java/org/apache/wicket/util/io/WicketObjectOutputStream.java?rev=1038752&r1=1038751&r2=1038752&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.4.14/wicket/src/main/java/org/apache/wicket/util/io/WicketObjectOutputStream.java
 (original)
+++ 
wicket/branches/wicket-1.4.14/wicket/src/main/java/org/apache/wicket/util/io/WicketObjectOutputStream.java
 Wed Nov 24 18:27:33 2010
@@ -28,11 +28,18 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Stack;
 
+import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.util.lang.Generics;
 
 
 /**
+ * The Wicket ObjectOutputStream to enable back-button support for the 
reloading mechanism, be sure
+ * to put <tt>Objects.setObjectStreamFactory(new 
WicketObjectStreamFactory());</tt> in your
+ * application's {...@link WebApplication#init()} method.
+ * 
+ * @see org.apache.wicket.protocol.http.ReloadingWicketFilter
  * @author jcompagner
  */
 public final class WicketObjectOutputStream extends ObjectOutputStream
@@ -445,7 +452,7 @@ public final class WicketObjectOutputStr
        private final HandleArrayListStack<Object> defaultWrite = new 
HandleArrayListStack<Object>();
        private final DataOutputStream out;
 
-       private ClassStreamHandler classHandler;
+       private final Stack<ClassStreamHandler> classHandlerStack = new 
Stack<ClassStreamHandler>();
 
        private PutField curPut;
 
@@ -470,7 +477,7 @@ public final class WicketObjectOutputStr
        @Override
        public void close() throws IOException
        {
-               classHandler = null;
+               classHandlerStack.clear();
                curObject = null;
                curPut = null;
                handledObjects.clear();
@@ -487,7 +494,7 @@ public final class WicketObjectOutputStr
                if (!defaultWrite.contains(curObject))
                {
                        defaultWrite.add(curObject);
-                       classHandler.writeFields(this, curObject);
+                       classHandlerStack.peek().writeFields(this, curObject);
                }
        }
 
@@ -790,7 +797,7 @@ public final class WicketObjectOutputStr
                                else
                                {
                                        Class<?> realClz = cls;
-                                       classHandler = 
ClassStreamHandler.lookup(realClz);
+                                       ClassStreamHandler classHandler = 
ClassStreamHandler.lookup(realClz);
 
                                        Object object = 
classHandler.writeReplace(obj);
                                        if (object != null)
@@ -815,6 +822,7 @@ public final class WicketObjectOutputStr
                                                curObject = obj;
                                                try
                                                {
+                                                       
classHandlerStack.push(classHandler);
                                                        if 
(!classHandler.invokeWriteMethod(this, obj))
                                                        {
                                                                
classHandler.writeFields(this, obj);
@@ -849,6 +857,7 @@ public final class WicketObjectOutputStr
                                                }
                                                finally
                                                {
+                                                       classHandlerStack.pop();
                                                        curObject = oldObject;
                                                        curPut = old;
                                                }

Modified: 
wicket/branches/wicket-1.4.14/wicket/src/test/java/org/apache/wicket/resource/DummyPage.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.14/wicket/src/test/java/org/apache/wicket/resource/DummyPage.java?rev=1038752&r1=1038751&r2=1038752&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.4.14/wicket/src/test/java/org/apache/wicket/resource/DummyPage.java
 (original)
+++ 
wicket/branches/wicket-1.4.14/wicket/src/test/java/org/apache/wicket/resource/DummyPage.java
 Wed Nov 24 18:27:33 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.resource;
 
+import org.apache.wicket.IPageMap;
 import org.apache.wicket.markup.html.WebPage;
 
 /**
@@ -36,4 +37,10 @@ public class DummyPage extends WebPage
                super();
        }
 
+
+       public DummyPage(IPageMap pageMap)
+       {
+               super(pageMap);
+       }
+
 }

Modified: 
wicket/branches/wicket-1.4.14/wicket/src/test/java/org/apache/wicket/util/io/WicketOutputStreamTest.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.14/wicket/src/test/java/org/apache/wicket/util/io/WicketOutputStreamTest.java?rev=1038752&r1=1038751&r2=1038752&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.4.14/wicket/src/test/java/org/apache/wicket/util/io/WicketOutputStreamTest.java
 (original)
+++ 
wicket/branches/wicket-1.4.14/wicket/src/test/java/org/apache/wicket/util/io/WicketOutputStreamTest.java
 Wed Nov 24 18:27:33 2010
@@ -17,6 +17,7 @@
 package org.apache.wicket.util.io;
 
 import java.io.ByteArrayInputStream;
+import java.io.IOException;
 import java.math.BigInteger;
 import java.util.GregorianCalendar;
 import java.util.Locale;
@@ -24,10 +25,12 @@ import java.util.Locale;
 import junit.framework.Assert;
 
 import org.apache.wicket.Page;
+import org.apache.wicket.PageMap;
 import org.apache.wicket.RequestCycle;
 import org.apache.wicket.WicketTestCase;
 import org.apache.wicket.protocol.http.HttpSessionStore;
 import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.resource.DummyPage;
 import org.apache.wicket.session.ISessionStore;
 
 /**
@@ -139,6 +142,17 @@ public class WicketOutputStreamTest exte
                RequestCycle.get().detach();
        }
 
+       public void testPageWithPageMapSerialization() throws IOException, 
ClassNotFoundException
+       {
+               DummyPage dummyPage = new DummyPage(PageMap.forName("test"));
+               woos.writeObject(dummyPage);
+               ByteArrayInputStream bais = new 
ByteArrayInputStream(baos.toByteArray());
+
+               WicketObjectInputStream wois = new 
WicketObjectInputStream(bais);
+               DummyPage dummyPage2 = (DummyPage)wois.readObject();
+
+               Assert.assertEquals(dummyPage.getClass(), 
dummyPage2.getClass());
+       }
 
        // public void testStringsEqualsAfterSerialization() throws Exception
        // {


Reply via email to