1 8 9 package test.javax.management.compliance.serialization.support; 10 11 import java.lang.reflect.InvocationTargetException ; 12 import java.lang.reflect.Method ; 13 14 17 public class SerializationVerifier 18 { 19 private String instantiator; 20 private String comparator; 21 22 public SerializationVerifier(String instantiator, String comparator) 23 { 24 this.instantiator = instantiator; 25 this.comparator = comparator; 26 } 27 28 public void verifySerialization(String name, ClassLoader jmxriLoader, ClassLoader mx4jLoader) throws Exception 29 { 30 name = name.substring(name.lastIndexOf('.') + 1); 31 32 Thread.currentThread().setContextClassLoader(mx4jLoader); 34 Object mx4j = create(name); 35 Thread.currentThread().setContextClassLoader(jmxriLoader); 36 Object jmxri = create(name); 37 38 if (mx4j.getClass().isInstance(jmxri)) throw new Exception ("Classes must be different"); 40 if (jmxri.getClass().isInstance(mx4j)) throw new Exception ("Classes must be different"); 41 42 Thread.currentThread().setContextClassLoader(mx4jLoader); 44 byte[] mx4jBytes = serialize(mx4j); 45 46 Thread.currentThread().setContextClassLoader(jmxriLoader); 48 Object jmxriObject = deserialize(mx4jBytes); 49 50 if (mx4j.getClass().isInstance(jmxriObject)) throw new Exception ("Classes must be different"); 52 if (jmxriObject.getClass().isInstance(mx4j)) throw new Exception ("Classes must be different"); 53 if (jmxri.getClass() != jmxriObject.getClass()) throw new Exception ("Classes must be equal"); 55 56 compare(name, jmxri, jmxriObject); 58 59 61 Thread.currentThread().setContextClassLoader(jmxriLoader); 63 byte[] jmxriBytes = serialize(jmxri); 64 65 Thread.currentThread().setContextClassLoader(mx4jLoader); 67 Object mx4jObject = deserialize(jmxriBytes); 68 69 if (jmxri.getClass().isInstance(mx4jObject)) throw new Exception ("Classes must be different"); 71 if (mx4jObject.getClass().isInstance(jmxri)) throw new Exception ("Classes must be different"); 72 if (mx4j.getClass() != mx4jObject.getClass()) throw new Exception ("Classes must be equal"); 74 75 compare(name, mx4j, mx4jObject); 77 78 } 79 80 private Object create(String name) throws Exception 81 { 82 ClassLoader loader = Thread.currentThread().getContextClassLoader(); 84 Object creator = loader.loadClass(instantiator).newInstance(); 85 86 Method method = creator.getClass().getMethod("create" + name, new Class [0]); 88 Object object = method.invoke(creator, new Object [0]); 89 return object; 90 } 91 92 private byte[] serialize(Object object) throws Exception 93 { 94 ClassLoader loader = Thread.currentThread().getContextClassLoader(); 98 Object serializer = loader.loadClass("test.javax.management.compliance.serialization.support.Serializer").newInstance(); 99 Method method = serializer.getClass().getMethod("serialize", new Class []{Object .class}); 100 return (byte[])method.invoke(serializer, new Object []{object}); 101 } 102 103 private Object deserialize(byte[] bytes) throws Exception 104 { 105 ClassLoader loader = Thread.currentThread().getContextClassLoader(); 109 Object serializer = loader.loadClass("test.javax.management.compliance.serialization.support.Serializer").newInstance(); 110 Method method = serializer.getClass().getMethod("deserialize", new Class []{byte[].class}); 111 return method.invoke(serializer, new Object []{bytes}); 112 } 113 114 private void compare(String name, Object obj1, Object obj2) throws Exception 115 { 116 try 118 { 119 obj1.getClass().getDeclaredMethod("equals", new Class []{Object .class}); 120 if (!obj1.equals(obj2)) throw new RuntimeException (); 122 123 } 124 catch (NoSuchMethodException x) 125 { 126 ClassLoader loader = Thread.currentThread().getContextClassLoader(); 128 Object creator = loader.loadClass(comparator).newInstance(); 129 130 Method method = creator.getClass().getMethod("compare" + name, new Class []{Object .class, Object .class}); 132 try 133 { 134 method.invoke(creator, new Object []{obj1, obj2}); 135 } 136 catch (InvocationTargetException xx) 137 { 138 Throwable t = xx.getTargetException(); 139 if (t instanceof Exception ) 140 throw (Exception )t; 141 else 142 throw (Error )t; 143 } 144 } 145 } 146 } 147 | Popular Tags |