diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle index 9cde2997d4..0aa14f2a55 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle @@ -51,7 +51,7 @@ dependencies { // testCompile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.2.3' // latestDepTestCompile group: 'org.glassfish.jersey.inject', name: 'jersey-hk2', version: '2.27' - latestDepTestCompile group: 'com.sun.jersey', name: 'jersey-client', version: jerseyClientVersion + latestDepTestCompile group: 'com.sun.jersey', name: 'jersey-client', version: '1.19.4' // latestDepTestCompile group: 'org.apache.cxf', name: 'cxf-rt-rs-client', version: '3.2.6' // latestDepTestCompile group: 'org.jboss.resteasy', name: 'resteasy-client', version: '3.0.26.Final' } diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java index 44d4f73c49..98f4ec6c5a 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java @@ -1,10 +1,9 @@ package datadog.trace.instrumentation.jaxrs.v1; import io.opentracing.propagation.TextMap; - -import javax.ws.rs.core.MultivaluedMap; import java.util.Iterator; import java.util.Map; +import javax.ws.rs.core.MultivaluedMap; public final class InjectAdapter implements TextMap { private final MultivaluedMap map; diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java index 3c4f00a947..0ee31cef43 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java @@ -3,11 +3,9 @@ package datadog.trace.instrumentation.jaxrs.v1; import com.sun.jersey.api.client.ClientRequest; import com.sun.jersey.api.client.ClientResponse; import datadog.trace.agent.decorator.HttpClientDecorator; - import java.net.URI; -public class JaxRsClientV1Decorator - extends HttpClientDecorator { +public class JaxRsClientV1Decorator extends HttpClientDecorator { public static final JaxRsClientV1Decorator DECORATE = new JaxRsClientV1Decorator(); @Override diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java index 8258d5f2ef..791caeb8f6 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java @@ -1,10 +1,12 @@ package datadog.trace.instrumentation.jaxrs.v1; import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; +import static datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator.DECORATE; +import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -import static datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator.DECORATE; + import com.google.auto.service.AutoService; import com.sun.jersey.api.client.ClientHandler; import com.sun.jersey.api.client.ClientRequest; @@ -15,13 +17,11 @@ import io.opentracing.Scope; import io.opentracing.Span; import io.opentracing.propagation.Format; import io.opentracing.util.GlobalTracer; +import java.util.Map; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import static java.util.Collections.singletonMap; - -import java.util.Map; @AutoService(Instrumenter.class) public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { @@ -50,36 +50,40 @@ public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { @Override public Map, String> transformers() { + System.out.println("######### REGISTERING"); return singletonMap( named("handle") - .and(takesArgument(2, named("com.sun.jersey.api.client.ClientRequest"))) - .and(returns(named("com.sun.jersey.api.client.ClientResponse"))), - HandleAdvice.class.getName() - ); + .and(takesArgument(0, safeHasSuperType(named("com.sun.jersey.api.client.ClientRequest")))) + .and(returns(safeHasSuperType(named("com.sun.jersey.api.client.ClientResponse")))), + HandleAdvice.class.getName()); } public static class HandleAdvice { @Advice.OnMethodEnter - public static void onEnter(@Advice.Argument(value = 1) final ClientRequest request, ClientHandler thisObj) { + public static void onEnter( + @Advice.Argument(value = 0) final ClientRequest request, + @Advice.This final ClientHandler thisObj) { + + System.out.println("############ ON HANDLE ENTER"); // WARNING: this might be a chain...so we only have to trace the first in the chain. boolean isRootClientHandler = null == request.getProperties().get("dd.span"); if (isRootClientHandler) { final Span span = - GlobalTracer.get() - .buildSpan("jax-rs.client.call") - .withTag(DDTags.RESOURCE_NAME, request.getMethod() + " jax-rs.client.call") - .start(); + GlobalTracer.get() + .buildSpan("jax-rs.client.call") + .withTag(DDTags.RESOURCE_NAME, request.getMethod() + " jax-rs.client.call") + .start(); try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, false)) { DECORATE.afterStart(span); DECORATE.onRequest(span, request); GlobalTracer.get() - .inject( - span.context(), - Format.Builtin.HTTP_HEADERS, - new InjectAdapter(request.getHeaders())); + .inject( + span.context(), + Format.Builtin.HTTP_HEADERS, + new InjectAdapter(request.getHeaders())); request.getProperties().put("dd.span", span); request.getProperties().put("dd.root.handler.hash", thisObj.hashCode()); @@ -88,7 +92,13 @@ public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { } @Advice.OnMethodExit - public static void onExit(@Advice.Argument(value = 1) final ClientRequest request, ClientResponse response, ClientHandler thisObj) { + public static void onExit( + @Advice.Argument(value = 0) final ClientRequest request, + @Advice.Return final ClientResponse response, + @Advice.This final ClientHandler thisObj) { + + System.out.println("############ ON HANDLE ENTER"); + Span span = (Span) request.getProperties().get("dd.span"); if (null == span) { return; diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy index 64087fd7fa..38f2ffe769 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy @@ -4,16 +4,16 @@ import com.sun.jersey.client.impl.ClientRequestImpl import datadog.trace.agent.test.base.HttpClientTest import datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator -abstract class JaxRsClientV1Test extends HttpClientTest { +class JaxRsClientV1Test extends HttpClientTest { @Override int doRequest(String method, URI uri, Map headers, Closure callback) { - Client client = Client.create() def resource = client.resource(uri) headers.each { resource.header(it.key, it.value) } def body = BODY_METHODS.contains(method) ? new ClientRequestImpl(uri, method) : null - ClientResponse response = resource.method(method, body) + ClientResponse response = resource.method(method, ClientResponse.class, body) + println "################## RESPOSNE #####################" + response callback?.call() return response.status