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);