Author: rmannibucau
Date: Sun May 11 20:06:26 2014
New Revision: 1593847

URL: http://svn.apache.org/r1593847
Log:
deserializer should get a classloader, allowing null for now (=use tccl) to 
avoid to rewrite too much

Modified:
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDisk.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDisk.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/behavior/IElementSerializer.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/CompressingSerializer.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/SerializationConversionUtil.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/StandardSerializer.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCacheUnitTest.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/engine/control/MockElementSerializer.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/serialization/CompressingSerializerUnitTest.java
    
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/serialization/StandardSerializerUnitTest.java
    
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCache.java
    
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/serialization/Serializations.java

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDisk.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDisk.java?rev=1593847&r1=1593846&r2=1593847&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDisk.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDisk.java
 Sun May 11 20:06:26 2014
@@ -301,7 +301,7 @@ public class BlockDisk
             log.debug( "read, total post combination data.length = " + 
data.length );
         }
 
-        return elementSerializer.deSerialize( data );
+        return elementSerializer.deSerialize( data, null );
     }
 
     /**

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDisk.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDisk.java?rev=1593847&r1=1593846&r2=1593847&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDisk.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDisk.java
 Sun May 11 20:06:26 2014
@@ -115,7 +115,7 @@ class IndexedDisk
         fc.read(data, ded.pos + HEADER_SIZE_BYTES);
         data.flip();
 
-        return elementSerializer.deSerialize( data.array() );
+        return elementSerializer.deSerialize( data.array(), null );
     }
 
     /**

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java?rev=1593847&r1=1593846&r2=1593847&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
 Sun May 11 20:06:26 2014
@@ -550,7 +550,7 @@ public class JDBCDiskCache<K, V>
                             try
                             {
                                 // USE THE SERIALIZER
-                                obj = getElementSerializer().deSerialize( data 
);
+                                obj = getElementSerializer().deSerialize( 
data, null );
                             }
                             catch ( IOException ioe )
                             {
@@ -654,7 +654,7 @@ public class JDBCDiskCache<K, V>
                                 try
                                 {
                                     // USE THE SERIALIZER
-                                    ICacheElement<K, V> value = 
getElementSerializer().deSerialize( data );
+                                    ICacheElement<K, V> value = 
getElementSerializer().deSerialize( data, null );
                                     results.put( (K) key, value );
                                 }
                                 catch ( IOException ioe )

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java?rev=1593847&r1=1593846&r2=1593847&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java
 Sun May 11 20:06:26 2014
@@ -89,7 +89,7 @@ public class RemoteHttpCacheDispatcher
             RemoteCacheResponse<T> remoteCacheResponse = null;
             try
             {
-                remoteCacheResponse = serializer.deSerialize( 
responseAsByteArray );
+                remoteCacheResponse = serializer.deSerialize( 
responseAsByteArray, null );
             }
             catch ( ClassNotFoundException e )
             {

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/behavior/IElementSerializer.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/behavior/IElementSerializer.java?rev=1593847&r1=1593846&r2=1593847&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/behavior/IElementSerializer.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/behavior/IElementSerializer.java
 Sun May 11 20:06:26 2014
@@ -45,6 +45,6 @@ public interface IElementSerializer
      * @throws IOException
      * @throws ClassNotFoundException thrown if we don't know the object.
      */
-    <T> T deSerialize( byte[] bytes )
+    <T> T deSerialize( byte[] bytes, ClassLoader loader )
         throws IOException, ClassNotFoundException;
 }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/CompressingSerializer.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/CompressingSerializer.java?rev=1593847&r1=1593846&r2=1593847&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/CompressingSerializer.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/CompressingSerializer.java
 Sun May 11 20:06:26 2014
@@ -86,7 +86,7 @@ public class CompressingSerializer
      * @throws ClassNotFoundException if class is not found during 
deserialization
      */
     @Override
-    public <T> T deSerialize( byte[] data )
+    public <T> T deSerialize( byte[] data, ClassLoader loader )
         throws IOException, ClassNotFoundException
     {
         if ( data == null )

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/SerializationConversionUtil.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/SerializationConversionUtil.java?rev=1593847&r1=1593846&r2=1593847&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/SerializationConversionUtil.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/SerializationConversionUtil.java
 Sun May 11 20:06:26 2014
@@ -120,7 +120,7 @@ public class SerializationConversionUtil
             {
                 try
                 {
-                    deSerializedValue = elementSerializer.deSerialize( 
serialized.getSerializedValue() );
+                    deSerializedValue = elementSerializer.deSerialize( 
serialized.getSerializedValue(), null );
                 }
                 catch ( ClassNotFoundException e )
                 {

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/StandardSerializer.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/StandardSerializer.java?rev=1593847&r1=1593846&r2=1593847&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/StandardSerializer.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/serialization/StandardSerializer.java
 Sun May 11 20:06:26 2014
@@ -71,12 +71,12 @@ public class StandardSerializer
      * @throws ClassNotFoundException
      */
     @Override
-    public <T> T deSerialize( byte[] data )
+    public <T> T deSerialize( byte[] data, ClassLoader loader )
         throws IOException, ClassNotFoundException
     {
         ByteArrayInputStream bais = new ByteArrayInputStream( data );
         BufferedInputStream bis = new BufferedInputStream( bais );
-        ObjectInputStream ois = new ObjectInputStreamClassLoaderAware( bis, 
null );
+        ObjectInputStream ois = new ObjectInputStreamClassLoaderAware( bis, 
loader );
         try
         {
             @SuppressWarnings("unchecked") // Need to cast from Object

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCacheUnitTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCacheUnitTest.java?rev=1593847&r1=1593846&r2=1593847&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCacheUnitTest.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCacheUnitTest.java
 Sun May 11 20:06:26 2014
@@ -141,7 +141,7 @@ public class BlockDiskCacheUnitTest
             resultData = newTotal;
         }
 
-        Serializable result = elementSerializer.deSerialize( resultData );
+        Serializable result = elementSerializer.deSerialize( resultData, null 
);
         // System.out.println( result );
         assertEquals( "wrong string after retrieval", string, result );
     }

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/engine/control/MockElementSerializer.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/engine/control/MockElementSerializer.java?rev=1593847&r1=1593846&r2=1593847&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/engine/control/MockElementSerializer.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/engine/control/MockElementSerializer.java
 Sun May 11 20:06:26 2014
@@ -48,11 +48,11 @@ public class MockElementSerializer
      *
      */
     @Override
-    public <T> T deSerialize( byte[] bytes )
+    public <T> T deSerialize( byte[] bytes, ClassLoader loader )
         throws IOException, ClassNotFoundException
     {
         deSerializeCount++;
-        return serializer.deSerialize( bytes );
+        return serializer.deSerialize( bytes, loader );
     }
 
     /**

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/serialization/CompressingSerializerUnitTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/serialization/CompressingSerializerUnitTest.java?rev=1593847&r1=1593846&r2=1593847&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/serialization/CompressingSerializerUnitTest.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/serialization/CompressingSerializerUnitTest.java
 Sun May 11 20:06:26 2014
@@ -42,7 +42,7 @@ public class CompressingSerializerUnitTe
         CompressingSerializer serializer = new CompressingSerializer();
 
         // DO WORK
-        Object result = serializer.deSerialize( null );
+        Object result = serializer.deSerialize( null, null );
 
         // VERIFY
         assertNull( "Should have nothing.", result );
@@ -63,7 +63,7 @@ public class CompressingSerializerUnitTe
 
         // DO WORK
         String before = 
"adsfdsafdsafdsafdsafdsafdsafdsagfdsafdsafdsfdsafdsafsa333 31231";
-        String after = (String) serializer.deSerialize( serializer.serialize( 
before ) );
+        String after = (String) serializer.deSerialize( serializer.serialize( 
before ), null );
 
         // VERIFY
         assertEquals( "Before and after should be the same.", before, after );
@@ -84,7 +84,7 @@ public class CompressingSerializerUnitTe
 
         // DO WORK
         byte[] serialized = serializer.serialize( before );
-        String after = (String) serializer.deSerialize( serialized );
+        String after = (String) serializer.deSerialize( serialized, null );
 
         // VERIFY
         assertNull( "Should have nothing. after =" + after, after );

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/serialization/StandardSerializerUnitTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/serialization/StandardSerializerUnitTest.java?rev=1593847&r1=1593846&r2=1593847&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/serialization/StandardSerializerUnitTest.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/test/java/org/apache/commons/jcs/utils/serialization/StandardSerializerUnitTest.java
 Sun May 11 20:06:26 2014
@@ -43,7 +43,7 @@ public class StandardSerializerUnitTest
         String before = 
"adsfdsafdsafdsafdsafdsafdsafdsagfdsafdsafdsfdsafdsafsa333 31231";
 
         // DO WORK
-        String after = (String) serializer.deSerialize( serializer.serialize( 
before ) );
+        String after = (String) serializer.deSerialize( serializer.serialize( 
before ), null );
 
         // VERIFY
         assertEquals( "Before and after should be the same.", before, after );
@@ -66,7 +66,7 @@ public class StandardSerializerUnitTest
         byte[] serialized = serializer.serialize( before );
         //System.out.println( "testNullInput " + serialized );
 
-        String after = (String) serializer.deSerialize( serialized );
+        String after = (String) serializer.deSerialize( serialized, null );
         //System.out.println( "testNullInput " + after );
 
         // VERIFY
@@ -94,7 +94,7 @@ public class StandardSerializerUnitTest
         String before = sb.toString();
 
         // DO WORK
-        String after = (String) serializer.deSerialize( serializer.serialize( 
before ) );
+        String after = (String) serializer.deSerialize( serializer.serialize( 
before ), null );
 
         // VERIFY
         assertEquals( "Before and after should be the same.", before, after );

Modified: 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCache.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCache.java?rev=1593847&r1=1593846&r2=1593847&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCache.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCache.java
 Sun May 11 20:06:26 2014
@@ -19,6 +19,7 @@
 package org.apache.commons.jcs.jcache;
 
 import org.apache.commons.jcs.access.CacheAccess;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
 import org.apache.commons.jcs.engine.control.CompositeCache;
 import org.apache.commons.jcs.jcache.jmx.JCSCacheMXBean;
 import org.apache.commons.jcs.jcache.jmx.JCSCacheStatisticsMXBean;
@@ -26,6 +27,7 @@ import org.apache.commons.jcs.jcache.jmx
 import org.apache.commons.jcs.jcache.lang.Subsitutor;
 import org.apache.commons.jcs.jcache.proxy.ExceptionWrapperHandler;
 import org.apache.commons.jcs.jcache.thread.DaemonThreadFactory;
+import org.apache.commons.jcs.utils.serialization.StandardSerializer;
 
 import javax.cache.Cache;
 import javax.cache.CacheManager;
@@ -47,7 +49,6 @@ import javax.cache.processor.EntryProces
 import javax.cache.processor.EntryProcessorResult;
 import javax.management.ObjectName;
 import java.io.Closeable;
-import java.io.Serializable;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -81,6 +82,7 @@ public class JCSCache<K, V> implements C
     private final Map<CacheEntryListenerConfiguration<K, V>, JCSListener<K, 
V>> listeners = new ConcurrentHashMap<CacheEntryListenerConfiguration<K, V>, 
JCSListener<K, V>>();
     private final Statistics statistics = new Statistics();
     private final ExecutorService pool;
+    private final IElementSerializer serializer; // using json/xml should work 
as well -> don't force Serializable
 
 
     public JCSCache(final ClassLoader classLoader, final JCSCachingManager mgr,
@@ -96,9 +98,18 @@ public class JCSCache<K, V> implements C
         config = configuration;
 
         final int poolSize = Integer.parseInt(property(properties, cacheName, 
"pool.size", "3"));
-        final DaemonThreadFactory threadFactory = new 
DaemonThreadFactory("JCS-JCache-");
+        final DaemonThreadFactory threadFactory = new 
DaemonThreadFactory("JCS-JCache-" + cacheName + "-");
         pool = poolSize > 0 ? Executors.newFixedThreadPool(poolSize, 
threadFactory) : Executors.newCachedThreadPool(threadFactory);
 
+        try
+        {
+            serializer = 
IElementSerializer.class.cast(classLoader.loadClass(property(properties, 
"serializer", cacheName, StandardSerializer.class.getName())).newInstance());
+        }
+        catch (final Exception e)
+        {
+            throw new IllegalArgumentException(e);
+        }
+
         final Factory<CacheLoader<K, V>> cacheLoaderFactory = 
configuration.getCacheLoaderFactory();
         if (cacheLoaderFactory == null)
         {
@@ -217,8 +228,8 @@ public class JCSCache<K, V> implements C
     {
         if (config.isStoreByValue())
         {
-            final Serializable copy = copy(manager.getClassLoader(), 
Serializable.class.cast(key.getKey()));
-            delegate.put(new JCSKey<K>((K) copy), elt);
+            final K copy = copy(serializer, manager.getClassLoader(), 
key.getKey());
+            delegate.put(new JCSKey<K>(copy), elt);
         }
     }
 
@@ -286,7 +297,7 @@ public class JCSCache<K, V> implements C
         final V old = oldElt != null ? oldElt.getElement() : null;
 
         final boolean storeByValue = config.isStoreByValue();
-        final V value = storeByValue ? (V) copy(manager.getClassLoader(), 
Serializable.class.cast(rawValue)) : rawValue;
+        final V value = storeByValue ? copy(serializer, 
manager.getClassLoader(), rawValue) : rawValue;
 
         final boolean created = old == null;
         final JCSElement<V> element = new JCSElement<V>(value, created ? 
expiryPolicy.getExpiryForCreation()
@@ -301,7 +312,7 @@ public class JCSCache<K, V> implements C
         else
         {
             writer.write(new JCSEntry<K, V>(key, value));
-            final JCSKey<K> jcsKey = storeByValue ? new JCSKey<K>((K) 
copy(manager.getClassLoader(), Serializable.class.cast(key))) : cacheKey;
+            final JCSKey<K> jcsKey = storeByValue ? new 
JCSKey<K>(copy(serializer, manager.getClassLoader(), key)) : cacheKey;
             jcsKey.access(start);
             delegate.put(jcsKey, element);
             for (final JCSListener<K, V> listener : listeners.values())

Modified: 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/serialization/Serializations.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/serialization/Serializations.java?rev=1593847&r1=1593846&r2=1593847&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/serialization/Serializations.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/serialization/Serializations.java
 Sun May 11 20:06:26 2014
@@ -18,95 +18,19 @@
  */
 package org.apache.commons.jcs.jcache.serialization;
 
-import java.io.BufferedInputStream;
-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.io.Serializable;
-import java.lang.reflect.Proxy;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
 
 public class Serializations
 {
-    public static <K extends Serializable> K copy(final ClassLoader loader, 
final K key)
+    public static <K> K copy(final IElementSerializer serializer, final 
ClassLoader loader, final K key)
     {
         try
         {
-            return deSerialize(serialize(key), loader);
+            return serializer.deSerialize(serializer.serialize(key), loader);
         }
         catch ( final Exception e)
         {
             throw new IllegalStateException(e);
         }
     }
-
-    private static  <T extends Serializable> byte[] serialize( T obj ) throws 
IOException
-    {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        ObjectOutputStream oos = new ObjectOutputStream( baos );
-        try
-        {
-            oos.writeObject( obj );
-        }
-        finally
-        {
-            oos.close();
-        }
-        return baos.toByteArray();
-    }
-
-    private static  <T extends Serializable> T deSerialize( final byte[] data, 
final ClassLoader loader ) throws IOException, ClassNotFoundException
-    {
-        ByteArrayInputStream bais = new ByteArrayInputStream( data );
-        BufferedInputStream bis = new BufferedInputStream( bais );
-        ObjectInputStream ois = new ObjectInputStreamClassLoaderAware( bis, 
loader );
-        try
-        {
-            return (T) ois.readObject();
-        }
-        finally
-        {
-            ois.close();
-        }
-    }
-
-    private static class ObjectInputStreamClassLoaderAware extends 
ObjectInputStream
-    {
-        private final ClassLoader classLoader;
-
-        public ObjectInputStreamClassLoaderAware(final InputStream in, final 
ClassLoader classLoader) throws IOException
-        {
-            super(in);
-            this.classLoader = classLoader != null ? classLoader : 
Thread.currentThread().getContextClassLoader();
-        }
-
-        @Override
-        protected Class<?> resolveClass(final ObjectStreamClass desc) throws 
ClassNotFoundException
-        {
-            return Class.forName(desc.getName(), false, classLoader);
-        }
-
-        @Override
-        protected Class resolveProxyClass(final String[] interfaces) throws 
IOException, ClassNotFoundException
-        {
-            final Class[] cinterfaces = new Class[interfaces.length];
-            for (int i = 0; i < interfaces.length; i++)
-            {
-                cinterfaces[i] = Class.forName(interfaces[i], false, 
classLoader);
-            }
-
-            try
-            {
-                return Proxy.getProxyClass(classLoader, cinterfaces);
-            }
-            catch (IllegalArgumentException e)
-            {
-                throw new ClassNotFoundException(null, e);
-            }
-        }
-
-    }
 }


Reply via email to