package com.hortonworks.registries.common.util;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class ClassLoaderAwareInvocationHandler implements InvocationHandler {
private final ClassLoader classLoader;
private final Object actualObject;
public ClassLoaderAwareInvocationHandler(ClassLoader classLoader, Object actualObject) {
this.classLoader = classLoader;
this.actualObject = actualObject;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(classLoader);
return method.invoke(actualObject, args);
} finally {
Thread.currentThread().setContextClassLoader(oldCl);
}
}
}