package hudson.util.jna; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * {@link InvocationHandler} that reports the same exception over and over again when methods are invoked * on the interface. * * This is convenient to remember why the initialization of the real JNA proxy failed. * * @author Kohsuke Kawaguchi * @since 1.487 */ public class InitializationErrorInvocationHandler implements InvocationHandler { private final Throwable cause; private InitializationErrorInvocationHandler(Throwable cause) { this.cause = cause; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (method.getDeclaringClass()==Object.class) return method.invoke(this,args); throw new UnsupportedOperationException("Failed to link the library: "+method.getDeclaringClass(), cause); } public static <T> T create(Class<T> type, Throwable cause) { return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, new InitializationErrorInvocationHandler(cause))); } }