diff --git a/src/main/java/org/nustaq/serialization/FSTClazzNameRegistry.java b/src/main/java/org/nustaq/serialization/FSTClazzNameRegistry.java index 952d2f69..17dfc698 100644 --- a/src/main/java/org/nustaq/serialization/FSTClazzNameRegistry.java +++ b/src/main/java/org/nustaq/serialization/FSTClazzNameRegistry.java @@ -20,6 +20,7 @@ import org.nustaq.serialization.util.FSTUtil; import java.io.IOException; +import java.lang.reflect.Proxy; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; @@ -182,6 +183,8 @@ public FSTClazzInfo decodeClass(FSTDecoder in, FSTConfiguration conf) throws IOE } } + + private static final String JDKPROXYCLASSPREFIX = "com.sun.proxy.$Proxy"; // Might only work with Oracle JDK HashMap classCache = new HashMap(200); AtomicBoolean classCacheLock = new AtomicBoolean(false); public Class classForName(String clName, FSTConfiguration conf) throws ClassNotFoundException { @@ -214,7 +217,10 @@ public Class classForName(String clName, FSTConfiguration conf) throws ClassNotF } } return actorClz; - } else { + } else if (clName.startsWith(JDKPROXYCLASSPREFIX)) { + res = Proxy.class; + } + else { if ( conf.getLastResortResolver() != null ) { Class aClass = conf.getLastResortResolver().getClass(clName); if ( aClass != null ) diff --git a/src/main/java/org/nustaq/serialization/FSTConfiguration.java b/src/main/java/org/nustaq/serialization/FSTConfiguration.java index 0115a457..20e52a93 100644 --- a/src/main/java/org/nustaq/serialization/FSTConfiguration.java +++ b/src/main/java/org/nustaq/serialization/FSTConfiguration.java @@ -34,6 +34,7 @@ import java.io.*; import java.lang.ref.SoftReference; +import java.lang.reflect.Proxy; import java.math.BigDecimal; import java.math.BigInteger; import java.net.URL; @@ -500,6 +501,7 @@ protected static FSTConfiguration initDefaultFstConfigurationInternal(FSTConfigu reg.putSerializer(Hashtable.class, new FSTMapSerializer(), true); reg.putSerializer(ConcurrentHashMap.class, new FSTMapSerializer(), true); reg.putSerializer(Throwable.class, new FSTThrowableSerializer(),true); + reg.putSerializer(Proxy.class, new FSTProxySerializer(),true); reg.putSerializer(BitSet.class, new FSTBitSetSerializer(),true); reg.putSerializer(Timestamp.class, new FSTTimestampSerializer(),true); @@ -836,6 +838,8 @@ void addDefaultClazzes() { classRegistry.registerClass(Timestamp.class, this); classRegistry.registerClass(Locale.class,this); + classRegistry.registerClass(Proxy.class,this); + classRegistry.registerClass(StringBuffer.class,this); classRegistry.registerClass(StringBuilder.class,this);