package org.zeroturnaround.javarebel.integration.confluence; import org.zeroturnaround.javarebel.support.FileClassResource; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; import org.zeroturnaround.javarebel.ClassResource; import org.zeroturnaround.javarebel.ClassResourceSource; import org.zeroturnaround.javarebel.LoggerFactory; import org.zeroturnaround.javarebel.support.FallbackClassResource; import org.zeroturnaround.javarebel.support.JarClassResource; public class ConfluenceClassResourceSource implements ClassResourceSource { private ClassLoader classloader; private static Method findResourceMethod; static { try { findResourceMethod = ClassLoader.class.getDeclaredMethod("findResource", new Class[] {String.class}); findResourceMethod.setAccessible(true); } catch (NoSuchMethodException e) { LoggerFactory.getInstance().errorEcho(e); } } public ConfluenceClassResourceSource(ClassLoader classloader) { this.classloader = classloader; } public ClassResource getClassResource(String className) { URL url; try { url = (URL) findResourceMethod.invoke(classloader, new Object[] {className.replace('.', '/') + ".class"}); } catch (IllegalArgumentException e) { throw new RuntimeException(e); } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e.getTargetException()); } if (url == null) return null; LoggerFactory.getInstance().log("Found URL '" + url + "' for class '" + className + "'."); return new FallbackClassResource(url); } }