169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalpackage test.javassist.proxy; 269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalimport junit.framework.TestCase; 469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalimport java.io.FileInputStream; 669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalimport java.io.FileOutputStream; 769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalimport java.io.ObjectInputStream; 869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalimport java.io.ObjectOutputStream; 969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalimport java.io.Serializable; 1069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalimport java.lang.reflect.Method; 1169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 1269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalimport javassist.util.proxy.ProxyFactory; 1369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 1469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalpublic class ProxySimpleTest extends TestCase { 1569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public void testReadWrite() throws Exception { 1669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal final String fileName = "read-write.bin"; 1769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal ProxyFactory.ClassLoaderProvider cp = ProxyFactory.classLoaderProvider; 1869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal ProxyFactory.classLoaderProvider = new ProxyFactory.ClassLoaderProvider() { 1969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public ClassLoader get(ProxyFactory pf) { 2069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal return new javassist.Loader(); 2169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 2269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal }; 2369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal ProxyFactory pf = new ProxyFactory(); 2469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal pf.setSuperclass(ReadWriteData.class); 2569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal Object data = pf.createClass().newInstance(); 2669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal // Object data = new ReadWriteData(); 2769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName)); 2869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal oos.writeObject(data); 2969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal oos.close(); 3069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal ProxyFactory.classLoaderProvider = cp; 3169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 3269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName)); 3369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal Object data2 = ois.readObject(); 3469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal ois.close(); 3569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal int i = ((ReadWriteData)data2).foo(); 3669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal assertEquals(4, i); 3769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 3869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 3969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public static class ReadWriteData implements Serializable { 4069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public int foo() { return 4; } 4169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 4269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 4369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public void testWriteReplace() throws Exception { 4469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal ProxyFactory pf = new ProxyFactory(); 4569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal pf.setSuperclass(WriteReplace.class); 4669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal Object data = pf.createClass().newInstance(); 4769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal assertEquals(data, ((WriteReplace)data).writeReplace()); 4869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 4969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal ProxyFactory pf2 = new ProxyFactory(); 5069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal pf2.setSuperclass(WriteReplace2.class); 5169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal Object data2 = pf2.createClass().newInstance(); 5269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal Method meth = data2.getClass().getDeclaredMethod("writeReplace", new Class[0]); 5369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal assertEquals("javassist.util.proxy.SerializedProxy", 5469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal meth.invoke(data2, new Object[0]).getClass().getName()); 5569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 5669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 5769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public static class WriteReplace implements Serializable { 5869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public Object writeReplace() { return this; } 5969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 6069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 6169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public static class WriteReplace2 implements Serializable { 6269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public Object writeReplace(int i) { return new Integer(i); } 6369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 6469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal} 65