package co.codewizards.cloudstore.ls.core.provider;
import static co.codewizards.cloudstore.core.util.Util.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
class ExtObjectInputStream extends ObjectInputStream
{
private ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
private ClassLoader staticClassLoader = JavaNativeMessageBodyReader.getClassLoader();
public ExtObjectInputStream(InputStream in) throws IOException {
super(in);
}
@Override
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException
{
try {
return super.resolveClass(desc);
} catch (final ClassNotFoundException x) {
doNothing(); // try again with ContextClassLoader
} catch (final NoClassDefFoundError x) {
doNothing(); // try again with ContextClassLoader
}
try {
return Class.forName(desc.getName(), false, contextClassLoader);
} catch (final ClassNotFoundException x) {
if (staticClassLoader == null)
throw x;
} catch (final NoClassDefFoundError x) {
if (staticClassLoader == null)
throw x;
}
return Class.forName(desc.getName(), false, staticClassLoader);
}
}