Fix issue 4460.
Patch by: bobv
Review by: jat
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7457 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java b/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java
index c1b298a..faad03a 100644
--- a/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java
+++ b/user/src/com/google/gwt/user/server/rpc/impl/SerializabilityUtil.java
@@ -15,6 +15,7 @@
*/
package com.google.gwt.user.server.rpc.impl;
+import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.GwtTransient;
import com.google.gwt.user.server.rpc.SerializationPolicy;
@@ -238,7 +239,15 @@
private static Class<?> computeHasCustomFieldSerializer(Class<?> instanceType) {
assert (instanceType != null);
String qualifiedTypeName = instanceType.getName();
- ClassLoader classLoader = SerializabilityUtil.class.getClassLoader();
+ /*
+ * This class is called from client code running in hosted mode as well as
+ * server code running in the servlet container. In hosted mode, we want to
+ * load classes through the CompilingClassLoader$MultiParentClassLoader, not
+ * the system classloader.
+ */
+ ClassLoader classLoader = GWT.isClient()
+ ? SerializabilityUtil.class.getClassLoader()
+ : Thread.currentThread().getContextClassLoader();
String simpleSerializerName = qualifiedTypeName + "_CustomFieldSerializer";
Class<?> customSerializer = getCustomFieldSerializer(classLoader,
simpleSerializerName);