Author: richard.opalka(a)jboss.com
Date: 2011-09-21 09:44:46 -0400 (Wed, 21 Sep 2011)
New Revision: 15016
Modified:
common/trunk/src/main/java/org/jboss/ws/common/serviceref/ServiceRefSerializer.java
Log:
[JBWS-3360] fixing WS ref deserialization process - always consider TCCL
Modified:
common/trunk/src/main/java/org/jboss/ws/common/serviceref/ServiceRefSerializer.java
===================================================================
---
common/trunk/src/main/java/org/jboss/ws/common/serviceref/ServiceRefSerializer.java 2011-09-21
13:16:04 UTC (rev 15015)
+++
common/trunk/src/main/java/org/jboss/ws/common/serviceref/ServiceRefSerializer.java 2011-09-21
13:44:46 UTC (rev 15016)
@@ -24,8 +24,10 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
import java.util.ResourceBundle;
import javax.naming.NamingException;
@@ -73,7 +75,7 @@
try
{
final ByteArrayInputStream bais = new ByteArrayInputStream(data);
- final ObjectInputStream ois = new ObjectInputStream(bais);
+ final ObjectInputStream ois = new TCCLAwareObjectInputStream(bais);
sref = (UnifiedServiceRefMetaData) ois.readObject();
ois.close();
}
@@ -88,4 +90,32 @@
return sref;
}
+
+ private static final class TCCLAwareObjectInputStream extends ObjectInputStream
+ {
+ private TCCLAwareObjectInputStream(final InputStream in) throws IOException
+ {
+ super(in);
+ }
+
+ @Override
+ public Class<?> resolveClass(final ObjectStreamClass desc) throws
IOException, ClassNotFoundException
+ {
+ try
+ {
+ final ClassLoader currentThreadLoader =
Thread.currentThread().getContextClassLoader();
+ if (currentThreadLoader != null)
+ {
+ return currentThreadLoader.loadClass(desc.getName());
+ }
+ }
+ catch (Exception e)
+ {
+ // ignore
+ }
+
+ return super.resolveClass(desc);
+ }
+ }
+
}
Show replies by date