You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jc...@apache.org on 2007/11/20 12:11:34 UTC
svn commit: r596619 -
/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/io/IObjectStreamFactory.java
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;
+ }
+ };
}
/**