org.zeroturnaround.javarebel.integration.catalina.WebappLoaderCBP Maven / Gradle / Ivy
package org.zeroturnaround.javarebel.integration.catalina;
import org.zeroturnaround.bundled.javassist.CannotCompileException;
import org.zeroturnaround.bundled.javassist.ClassPool;
import org.zeroturnaround.bundled.javassist.CtClass;
import org.zeroturnaround.bundled.javassist.CtMethod;
import org.zeroturnaround.bundled.javassist.NotFoundException;
import org.zeroturnaround.bundled.javassist.expr.ExprEditor;
import org.zeroturnaround.bundled.javassist.expr.MethodCall;
import org.zeroturnaround.javarebel.integration.support.JavassistClassBytecodeProcessor;
/**
* Transforms org.apache.catalina.loader.WebappLoader
.
*
* ServletContext.getRealPath()
invocation is made transparent
* so it receives a path not altered by JavaRebel.
*
*
* Used for Tomcat, Glassfish and JBoss.
*
* @author Rein Raudjärv
*/
public class WebappLoaderCBP extends JavassistClassBytecodeProcessor {
public void process(ClassPool cp, ClassLoader cl, CtClass ctClass) throws Exception {
CtMethod m = null;
try {
m = ctClass.getMethod("setRepositories", "()V");
m.instrument(new ExprEditor() {
public void edit(MethodCall m) throws CannotCompileException {
if (m.getClassName().equals("javax.servlet.ServletContext")
&& m.getMethodName().equals("getRealPath"))
m.replace("{" +
" org.zeroturnaround.javarebel.ServletIntegration integration = org.zeroturnaround.javarebel.ServletIntegrationFactory.getInstance();" +
" $_ = integration.getTransparentRealPath((org.zeroturnaround.javarebel.RebelServletContext) $0, $1);" +
"}");
}
});
}
catch (NotFoundException e) {
}
}
}