You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2010/11/24 19:27:34 UTC
svn commit: r1038752 - in /wicket/branches/wicket-1.4.14/wicket/src:
main/java/org/apache/wicket/util/io/WicketObjectOutputStream.java
test/java/org/apache/wicket/resource/DummyPage.java
test/java/org/apache/wicket/util/io/WicketOutputStreamTest.java
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
// {