package io.remotecontrol.util; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectStreamClass; /** * Allows us to hydrate objects with a custom classloader. */ public class ClassLoaderConfigurableObjectInputStream extends ObjectInputStream { private final ClassLoader classLoader; public ClassLoaderConfigurableObjectInputStream(ClassLoader classLoader, InputStream input) throws IOException { super(input); this.classLoader = classLoader; } public Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { try { return classLoader.loadClass(desc.getName()); } catch (ClassNotFoundException e) { return super.resolveClass(desc); } } public final ClassLoader getClassLoader() { return classLoader; } }