Fix jersey servlet instrumentation which overrides method

Jersey doesn’t seem to delegate to the original method on HttpServlet, which causes those methods to not be traced properly.

This is impacting dropwizard applications which uses Jersey with embedded Jetty.
This commit is contained in:
Tyler Benson 2017-12-19 16:50:29 -08:00
parent 922b3012e6
commit d6056a3c27
2 changed files with 7 additions and 2 deletions

View File

@ -1,6 +1,8 @@
package dd.inst.servlet2;
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
import static net.bytebuddy.matcher.ElementMatchers.isProtected;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.not;
@ -30,7 +32,7 @@ public final class HttpServlet2Instrumentation implements Instrumenter {
public AgentBuilder instrument(final AgentBuilder agentBuilder) {
return agentBuilder
.type(
named("javax.servlet.http.HttpServlet"),
not(isInterface()).and(hasSuperType(named("javax.servlet.http.HttpServlet"))),
not(classLoaderHasClasses("javax.servlet.AsyncEvent", "javax.servlet.AsyncListener"))
.and(
classLoaderHasClasses(

View File

@ -1,8 +1,11 @@
package dd.inst.servlet3;
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
import static net.bytebuddy.matcher.ElementMatchers.isProtected;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.not;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import com.google.auto.service.AutoService;
@ -33,7 +36,7 @@ public final class HttpServlet3Instrumentation implements Instrumenter {
public AgentBuilder instrument(final AgentBuilder agentBuilder) {
return agentBuilder
.type(
named("javax.servlet.http.HttpServlet"),
not(isInterface()).and(hasSuperType(named("javax.servlet.http.HttpServlet"))),
classLoaderHasClasses("javax.servlet.AsyncEvent", "javax.servlet.AsyncListener"))
.transform(
DDAdvice.create()