Author: jcompagner
Date: Tue Nov 20 03:11:32 2007
New Revision: 596619
URL: http://svn.apache.org/viewvc?rev=596619&view=rev
Log:
Default ObjectInputStream should override resolveClass so that the
IClassResolver is used when the class is not found
Modified:
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/io/IObjectStreamFactory.java
Modified:
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/io/IObjectStreamFactory.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/io/IObjectStreamFactory.java?rev=596619&r1=596618&r2=596619&view=diff
==============================================================================
---
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/io/IObjectStreamFactory.java
(original)
+++
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/io/IObjectStreamFactory.java
Tue Nov 20 03:11:32 2007
@@ -21,9 +21,16 @@
import java.io.NotSerializableException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
import java.io.OutputStream;
+import org.apache.wicket.Application;
+import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.application.IClassResolver;
+import org.apache.wicket.settings.IApplicationSettings;
import org.apache.wicket.util.lang.Objects;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
@@ -42,12 +49,57 @@
*/
public static final class DefaultObjectStreamFactory implements
IObjectStreamFactory
{
+ private static final Logger log =
LoggerFactory.getLogger(DefaultObjectStreamFactory.class);
+
/**
* @see
org.apache.wicket.util.io.IObjectStreamFactory#newObjectInputStream(java.io.InputStream)
*/
public ObjectInputStream newObjectInputStream(InputStream in)
throws IOException
{
- return new ObjectInputStream(in);
+ return new ObjectInputStream(in)
+ {
+ // This override is required to resolve classes
inside in different bundle, i.e.
+ // The classes can be resolved by OSGI
classresolver implementation
+ protected Class resolveClass(ObjectStreamClass
desc) throws IOException,
+ ClassNotFoundException
+ {
+ String className = desc.getName();
+
+ try
+ {
+ return super.resolveClass(desc);
+ }
+ catch (ClassNotFoundException ex1)
+ {
+ // ignore this exception.
+ log.debug("Class not found by
the object outputstream itself, trying the IClassResolver");
+ }
+
+
+ Class candidate = null;
+ try
+ {
+ // Can the application always
be taken??
+ Application application =
Application.get();
+ IApplicationSettings
applicationSettings = application.getApplicationSettings();
+ IClassResolver classResolver =
applicationSettings.getClassResolver();
+
+ candidate =
classResolver.resolveClass(className);
+ if (candidate == null)
+ {
+ candidate =
super.resolveClass(desc);
+ }
+ }
+ catch (WicketRuntimeException ex)
+ {
+ if (ex.getCause() instanceof
ClassNotFoundException)
+ {
+ throw
(ClassNotFoundException)ex.getCause();
+ }
+ }
+ return candidate;
+ }
+ };
}
/**