1 /*************************************************************************************** 2 * Copyright (c) Jonas Bonér, Alexandre Vasseur. All rights reserved. * 3 * http://aspectwerkz.codehaus.org * 4 * ---------------------------------------------------------------------------------- * 5 * The software in this package is published under the terms of the LGPL license * 6 * a copy of which has been included with this distribution in the license.txt file. * 7 **************************************************************************************/ 8 package org.codehaus.aspectwerkz; 9 10 import java.io.IOException; 11 import java.io.InputStream; 12 import java.io.ObjectInputStream; 13 import java.io.ObjectStreamClass; 14 15 /*** 16 * Fixes the ObjectInputStream class, which does not always resolve the class correctly in complex 17 * class loader hierarchies. 18 * 19 * @author <a href="mailto:jboner@codehaus.org">Jonas Bonér</a> 20 */ 21 public class UnbrokenObjectInputStream extends ObjectInputStream { 22 23 /*** 24 * Creates a a new instance. 25 * 26 * @throws IOException 27 * @throws SecurityException 28 */ 29 public UnbrokenObjectInputStream() throws IOException, SecurityException { 30 super(); 31 } 32 33 /*** 34 * Creates a new instance. 35 * 36 * @param in the input stream to deserialize the object from. 37 * @throws IOException 38 */ 39 public UnbrokenObjectInputStream(final InputStream in) throws IOException { 40 super(in); 41 } 42 43 /*** 44 * Overrides the parents resolveClass method and resolves the class using the context class loader 45 * instead of Class.forName(). 46 */ 47 protected Class resolveClass(final ObjectStreamClass desc) throws IOException, ClassNotFoundException { 48 try { 49 return Thread.currentThread().getContextClassLoader().loadClass(desc.getName()); 50 } catch (ClassNotFoundException ex) { 51 return super.resolveClass(desc); 52 } 53 } 54 }