From 66de7a035680cf2604207ded9c19caf6bbece159 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Mon, 28 Feb 2022 22:47:26 -0800 Subject: [PATCH] Remove JAXRS HttpClient instrumentation (#5430) --- .../HttpUrlConnectionSingletons.java | 2 + .../build.gradle.kts | 24 +---- .../groovy/JaxMultithreadedClientTest.groovy | 0 .../src/test/groovy/JaxRsClientTest.groovy | 31 +++--- .../groovy/ResteasyProxyClientTest.groovy | 0 .../groovy/ResteasySingleConnection.groovy | 0 .../v2_0/ClientBuilderInstrumentation.java | 52 ---------- .../ClientRequestContextHeaderSetter.java | 19 ---- .../v2_0/ClientTracingFeature.java | 23 ----- .../jaxrsclient/v2_0/ClientTracingFilter.java | 42 --------- .../v2_0/JaxRsClientHttpAttributesGetter.java | 81 ---------------- .../JaxRsClientInstrumentationModule.java | 26 ----- .../v2_0/JaxRsClientNetAttributesGetter.java | 42 --------- .../v2_0/JaxRsClientSingletons.java | 55 ----------- .../javaagent/build.gradle.kts | 17 ---- ...cClientConnectionErrorInstrumentation.java | 46 --------- ...fClientConnectionErrorInstrumentation.java | 42 --------- .../v2_0/CxfClientInstrumentationModule.java | 32 ------- .../jaxrsclient/v2_0/CxfClientUtil.java | 27 ------ .../javaagent/build.gradle.kts | 17 ---- ...yClientConnectionErrorInstrumentation.java | 69 -------------- .../JerseyClientInstrumentationModule.java | 35 ------- .../jaxrsclient/v2_0/JerseyClientUtil.java | 23 ----- .../OpenTelemetryResponseCallbackWrapper.java | 40 -------- .../javaagent/build.gradle.kts | 17 ---- .../v2_0/ClientInvocationHeaderSetter.java | 25 ----- .../ResteasyClientHttpAttributesGetter.java | 87 ----------------- .../ResteasyClientInstrumentationModule.java | 94 ------------------- .../ResteasyClientNetAttributesGetter.java | 42 --------- .../v2_0/ResteasyClientSingletons.java | 57 ----------- settings.gradle.kts | 5 +- 31 files changed, 22 insertions(+), 1050 deletions(-) rename instrumentation/jaxrs-client/{jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent => jaxrs-client-2.0-testing}/build.gradle.kts (55%) rename instrumentation/jaxrs-client/{jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent => jaxrs-client-2.0-testing}/src/test/groovy/JaxMultithreadedClientTest.groovy (100%) rename instrumentation/jaxrs-client/{jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent => jaxrs-client-2.0-testing}/src/test/groovy/JaxRsClientTest.groovy (93%) rename instrumentation/jaxrs-client/{jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent => jaxrs-client-2.0-testing}/src/test/groovy/ResteasyProxyClientTest.groovy (100%) rename instrumentation/jaxrs-client/{jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent => jaxrs-client-2.0-testing}/src/test/groovy/ResteasySingleConnection.groovy (100%) delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientBuilderInstrumentation.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientRequestContextHeaderSetter.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientTracingFeature.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientTracingFilter.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientHttpAttributesGetter.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientInstrumentationModule.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientNetAttributesGetter.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientSingletons.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/build.gradle.kts delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfAsyncClientConnectionErrorInstrumentation.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfClientConnectionErrorInstrumentation.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfClientInstrumentationModule.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfClientUtil.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/build.gradle.kts delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JerseyClientConnectionErrorInstrumentation.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JerseyClientInstrumentationModule.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JerseyClientUtil.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/org/glassfish/jersey/client/OpenTelemetryResponseCallbackWrapper.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/build.gradle.kts delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientInvocationHeaderSetter.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientHttpAttributesGetter.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientInstrumentationModule.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientNetAttributesGetter.java delete mode 100644 instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientSingletons.java diff --git a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java index b3be1fd37511..6a794b630e73 100644 --- a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java +++ b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java @@ -11,6 +11,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor; import java.net.HttpURLConnection; @@ -27,6 +28,7 @@ public final class HttpUrlConnectionSingletons { GlobalOpenTelemetry.get(), "io.opentelemetry.http-url-connection", HttpSpanNameExtractor.create(httpAttributesGetter)) + .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor(HttpClientAttributesExtractor.create(httpAttributesGetter)) .addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractor(PeerServiceAttributesExtractor.create(netAttributesGetter)) diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/build.gradle.kts b/instrumentation/jaxrs-client/jaxrs-client-2.0-testing/build.gradle.kts similarity index 55% rename from instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/build.gradle.kts rename to instrumentation/jaxrs-client/jaxrs-client-2.0-testing/build.gradle.kts index e2e401a8af04..719d012d35a9 100644 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/build.gradle.kts +++ b/instrumentation/jaxrs-client/jaxrs-client-2.0-testing/build.gradle.kts @@ -1,29 +1,9 @@ plugins { - id("otel.javaagent-instrumentation") -} - -muzzle { - pass { - group.set("javax.ws.rs") - module.set("javax.ws.rs-api") - versions.set("[2.0,)") - } - pass { - // We want to support the dropwizard clients too. - group.set("io.dropwizard") - module.set("dropwizard-client") - versions.set("[0.8.0,)") - assertInverse.set(true) - } + id("otel.javaagent-testing") } dependencies { - compileOnly("javax.ws.rs:javax.ws.rs-api:2.0.1") - compileOnly("javax.annotation:javax.annotation-api:1.3.2") - - testInstrumentation(project(":instrumentation:jaxrs-client:jaxrs-client-2.0:jaxrs-client-2.0-cxf-3.0:javaagent")) - testInstrumentation(project(":instrumentation:jaxrs-client:jaxrs-client-2.0:jaxrs-client-2.0-jersey-2.0:javaagent")) - testInstrumentation(project(":instrumentation:jaxrs-client:jaxrs-client-2.0:jaxrs-client-2.0-resteasy-3.0:javaagent")) + testInstrumentation(project(":instrumentation:http-url-connection:javaagent")) testImplementation("javax.ws.rs:javax.ws.rs-api:2.0.1") diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/test/groovy/JaxMultithreadedClientTest.groovy b/instrumentation/jaxrs-client/jaxrs-client-2.0-testing/src/test/groovy/JaxMultithreadedClientTest.groovy similarity index 100% rename from instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/test/groovy/JaxMultithreadedClientTest.groovy rename to instrumentation/jaxrs-client/jaxrs-client-2.0-testing/src/test/groovy/JaxMultithreadedClientTest.groovy diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/test/groovy/JaxRsClientTest.groovy b/instrumentation/jaxrs-client/jaxrs-client-2.0-testing/src/test/groovy/JaxRsClientTest.groovy similarity index 93% rename from instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/test/groovy/JaxRsClientTest.groovy rename to instrumentation/jaxrs-client/jaxrs-client-2.0-testing/src/test/groovy/JaxRsClientTest.groovy index 7669b57f04e8..2211bebc60ea 100644 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/test/groovy/JaxRsClientTest.groovy +++ b/instrumentation/jaxrs-client/jaxrs-client-2.0-testing/src/test/groovy/JaxRsClientTest.groovy @@ -30,6 +30,10 @@ import static io.opentelemetry.semconv.trace.attributes.SemanticAttributes.NetTr abstract class JaxRsClientTest extends HttpClientTest implements AgentTestTrait { + boolean testRedirects() { + false + } + @Override Invocation.Builder buildRequest(String method, URI uri, Map headers) { return internalBuildRequest(uri, headers) @@ -108,7 +112,7 @@ abstract class JaxRsClientTest extends HttpClientTest implem "$SemanticAttributes.HTTP_METHOD" method "$SemanticAttributes.HTTP_STATUS_CODE" statusCode "$SemanticAttributes.HTTP_FLAVOR" "1.1" - "$SemanticAttributes.HTTP_RESPONSE_CONTENT_LENGTH" Long + "$SemanticAttributes.HTTP_USER_AGENT" { it == null || String } } } serverSpan(it, 1, span(0)) @@ -131,11 +135,6 @@ class JerseyClientTest extends JaxRsClientTest { return new JerseyClientBuilder().withConfig(config) } - @Override - int maxRedirects() { - 20 - } - @Override SingleConnection createSingleConnection(String host, int port) { // Jersey JAX-RS client uses HttpURLConnection internally, which does not support pipelining nor @@ -154,10 +153,6 @@ class ResteasyClientTest extends JaxRsClientTest { .establishConnectionTimeout(CONNECT_TIMEOUT_MS, TimeUnit.MILLISECONDS) } - boolean testRedirects() { - false - } - @Override SingleConnection createSingleConnection(String host, int port) { return new ResteasySingleConnection(host, port) @@ -166,16 +161,24 @@ class ResteasyClientTest extends JaxRsClientTest { class CxfClientTest extends JaxRsClientTest { + @Override + Throwable clientSpanError(URI uri, Throwable exception) { + switch (uri.toString()) { + case "http://localhost:61/": // unopened port + case "https://192.0.2.1/": // non routable address + if (exception.getCause() != null) { + exception = exception.getCause() + } + } + return exception + } + @Override ClientBuilder builder() { return new ClientBuilderImpl() .property("http.connection.timeout", (long) CONNECT_TIMEOUT_MS) } - boolean testRedirects() { - false - } - @Override SingleConnection createSingleConnection(String host, int port) { // CXF JAX-RS client uses HttpURLConnection internally, which does not support pipelining nor diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/test/groovy/ResteasyProxyClientTest.groovy b/instrumentation/jaxrs-client/jaxrs-client-2.0-testing/src/test/groovy/ResteasyProxyClientTest.groovy similarity index 100% rename from instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/test/groovy/ResteasyProxyClientTest.groovy rename to instrumentation/jaxrs-client/jaxrs-client-2.0-testing/src/test/groovy/ResteasyProxyClientTest.groovy diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/test/groovy/ResteasySingleConnection.groovy b/instrumentation/jaxrs-client/jaxrs-client-2.0-testing/src/test/groovy/ResteasySingleConnection.groovy similarity index 100% rename from instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/test/groovy/ResteasySingleConnection.groovy rename to instrumentation/jaxrs-client/jaxrs-client-2.0-testing/src/test/groovy/ResteasySingleConnection.groovy diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientBuilderInstrumentation.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientBuilderInstrumentation.java deleted file mode 100644 index b94624d409dd..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientBuilderInstrumentation.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.extendsClass; -import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; -import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface; -import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.returns; - -import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; -import javax.ws.rs.client.Client; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.implementation.bytecode.assign.Assigner; -import net.bytebuddy.matcher.ElementMatcher; - -public class ClientBuilderInstrumentation implements TypeInstrumentation { - @Override - public ElementMatcher classLoaderOptimization() { - return hasClassesNamed("javax.ws.rs.client.ClientBuilder"); - } - - @Override - public ElementMatcher typeMatcher() { - return extendsClass(named("javax.ws.rs.client.ClientBuilder")); - } - - @Override - public void transform(TypeTransformer transformer) { - transformer.applyAdviceToMethod( - named("build").and(returns(implementsInterface(named("javax.ws.rs.client.Client")))), - this.getClass().getName() + "$BuildAdvice"); - } - - @SuppressWarnings("unused") - public static class BuildAdvice { - - @Advice.OnMethodExit - public static void registerFeature( - @Advice.Return(typing = Assigner.Typing.DYNAMIC) Client client) { - // Register on the generated client instead of the builder - // The build() can be called multiple times and is not thread safe - // A client is only created once - client.register(ClientTracingFeature.class); - } - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientRequestContextHeaderSetter.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientRequestContextHeaderSetter.java deleted file mode 100644 index 3592b44143ff..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientRequestContextHeaderSetter.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import io.opentelemetry.context.propagation.TextMapSetter; -import javax.ws.rs.client.ClientRequestContext; - -enum ClientRequestContextHeaderSetter implements TextMapSetter { - INSTANCE; - - @Override - public void set(ClientRequestContext carrier, String key, String value) { - // Don't allow duplicates. - carrier.getHeaders().putSingle(key, value); - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientTracingFeature.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientTracingFeature.java deleted file mode 100644 index f71f39d5be73..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientTracingFeature.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import javax.ws.rs.core.Feature; -import javax.ws.rs.core.FeatureContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class ClientTracingFeature implements Feature { - - private static final Logger logger = LoggerFactory.getLogger(ClientTracingFeature.class); - - @Override - public boolean configure(FeatureContext context) { - context.register(new ClientTracingFilter()); - logger.debug("ClientTracingFilter registered"); - return true; - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientTracingFilter.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientTracingFilter.java deleted file mode 100644 index 5530b96c89b4..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientTracingFilter.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import static io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0.JaxRsClientSingletons.instrumenter; - -import io.opentelemetry.context.Context; -import javax.annotation.Priority; -import javax.ws.rs.Priorities; -import javax.ws.rs.client.ClientRequestContext; -import javax.ws.rs.client.ClientRequestFilter; -import javax.ws.rs.client.ClientResponseContext; -import javax.ws.rs.client.ClientResponseFilter; - -@Priority(Priorities.HEADER_DECORATOR) -public class ClientTracingFilter implements ClientRequestFilter, ClientResponseFilter { - public static final String CONTEXT_PROPERTY_NAME = "io.opentelemetry.javaagent.context"; - - @Override - public void filter(ClientRequestContext requestContext) { - Context parentContext = Context.current(); - if (instrumenter().shouldStart(parentContext, requestContext)) { - Context context = instrumenter().start(parentContext, requestContext); - requestContext.setProperty(CONTEXT_PROPERTY_NAME, context); - } - } - - @Override - public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) { - Object contextObj = requestContext.getProperty(CONTEXT_PROPERTY_NAME); - if (contextObj instanceof Context) { - Context context = (Context) contextObj; - instrumenter().end(context, requestContext, responseContext, null); - } - // we are done with this request, remove context so it could be gcd immediately in case request - // context stays around for whatever reason - requestContext.removeProperty(CONTEXT_PROPERTY_NAME); - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientHttpAttributesGetter.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientHttpAttributesGetter.java deleted file mode 100644 index f8af5d10530e..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientHttpAttributesGetter.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import static java.util.Collections.emptyList; - -import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesGetter; -import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; -import java.util.List; -import javax.annotation.Nullable; -import javax.ws.rs.client.ClientRequestContext; -import javax.ws.rs.client.ClientResponseContext; - -final class JaxRsClientHttpAttributesGetter - implements HttpClientAttributesGetter { - - @Override - @Nullable - public String method(ClientRequestContext httpRequest) { - return httpRequest.getMethod(); - } - - @Override - public String url(ClientRequestContext httpRequest) { - return httpRequest.getUri().toString(); - } - - @Override - public List requestHeader(ClientRequestContext httpRequest, String name) { - return httpRequest.getStringHeaders().getOrDefault(name, emptyList()); - } - - @Override - @Nullable - public Long requestContentLength( - ClientRequestContext httpRequest, @Nullable ClientResponseContext httpResponse) { - return null; - } - - @Override - @Nullable - public Long requestContentLengthUncompressed( - ClientRequestContext httpRequest, @Nullable ClientResponseContext httpResponse) { - return null; - } - - @Override - public String flavor( - ClientRequestContext httpRequest, @Nullable ClientResponseContext httpResponse) { - return SemanticAttributes.HttpFlavorValues.HTTP_1_1; - } - - @Override - public Integer statusCode(ClientRequestContext httpRequest, ClientResponseContext httpResponse) { - return httpResponse.getStatus(); - } - - @Override - @Nullable - public Long responseContentLength( - ClientRequestContext httpRequest, ClientResponseContext httpResponse) { - int length = httpResponse.getLength(); - return length != -1 ? (long) length : null; - } - - @Override - @Nullable - public Long responseContentLengthUncompressed( - ClientRequestContext httpRequest, ClientResponseContext httpResponse) { - return null; - } - - @Override - public List responseHeader( - ClientRequestContext httpRequest, ClientResponseContext httpResponse, String name) { - return httpResponse.getHeaders().getOrDefault(name, emptyList()); - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientInstrumentationModule.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientInstrumentationModule.java deleted file mode 100644 index c51dd616370a..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientInstrumentationModule.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import static java.util.Collections.singletonList; - -import com.google.auto.service.AutoService; -import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; -import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import java.util.List; - -@AutoService(InstrumentationModule.class) -public class JaxRsClientInstrumentationModule extends InstrumentationModule { - - public JaxRsClientInstrumentationModule() { - super("jaxrs-client", "jaxrs-client-2.0"); - } - - @Override - public List typeInstrumentations() { - return singletonList(new ClientBuilderInstrumentation()); - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientNetAttributesGetter.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientNetAttributesGetter.java deleted file mode 100644 index 8a0f17ba0d08..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientNetAttributesGetter.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesGetter; -import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; -import javax.annotation.Nullable; -import javax.ws.rs.client.ClientRequestContext; -import javax.ws.rs.client.ClientResponseContext; - -final class JaxRsClientNetAttributesGetter - implements NetClientAttributesGetter { - - @Override - public String transport(ClientRequestContext request, @Nullable ClientResponseContext response) { - return SemanticAttributes.NetTransportValues.IP_TCP; - } - - @Override - @Nullable - public String peerName(ClientRequestContext request, @Nullable ClientResponseContext response) { - return request.getUri().getHost(); - } - - @Override - public Integer peerPort(ClientRequestContext request, @Nullable ClientResponseContext response) { - int port = request.getUri().getPort(); - if (port != -1) { - return port; - } - return null; - } - - @Override - @Nullable - public String peerIp(ClientRequestContext request, @Nullable ClientResponseContext response) { - return null; - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientSingletons.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientSingletons.java deleted file mode 100644 index 97b61860d312..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JaxRsClientSingletons.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.instrumenter.ErrorCauseExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.api.instrumenter.PeerServiceAttributesExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; -import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.client.ClientRequestContext; -import javax.ws.rs.client.ClientResponseContext; - -public class JaxRsClientSingletons { - private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jaxrs-client-2.0"; - - private static final Instrumenter INSTRUMENTER; - - static { - JaxRsClientHttpAttributesGetter httpAttributesGetter = new JaxRsClientHttpAttributesGetter(); - JaxRsClientNetAttributesGetter netAttributesGetter = new JaxRsClientNetAttributesGetter(); - - INSTRUMENTER = - Instrumenter.builder( - GlobalOpenTelemetry.get(), - INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) - .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) - .setErrorCauseExtractor( - (throwable) -> { - if (throwable instanceof ProcessingException) { - throwable = throwable.getCause(); - } - return ErrorCauseExtractor.jdk().extractCause(throwable); - }) - .addAttributesExtractor(HttpClientAttributesExtractor.create(httpAttributesGetter)) - .addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter)) - .addAttributesExtractor(PeerServiceAttributesExtractor.create(netAttributesGetter)) - .addRequestMetrics(HttpClientMetrics.get()) - .newClientInstrumenter(ClientRequestContextHeaderSetter.INSTANCE); - } - - public static Instrumenter instrumenter() { - return INSTRUMENTER; - } - - private JaxRsClientSingletons() {} -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/build.gradle.kts b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/build.gradle.kts deleted file mode 100644 index eac9f604aa6c..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -plugins { - id("otel.javaagent-instrumentation") -} - -muzzle { - pass { - group.set("org.apache.cxf") - module.set("cxf-rt-rs-client") - versions.set("[3.0.0,)") - } -} - -dependencies { - library("org.apache.cxf:cxf-rt-rs-client:3.0.0") - - implementation(project(":instrumentation:jaxrs-client:jaxrs-client-2.0:jaxrs-client-2.0-common:javaagent")) -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfAsyncClientConnectionErrorInstrumentation.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfAsyncClientConnectionErrorInstrumentation.java deleted file mode 100644 index 1ca89f1688d8..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfAsyncClientConnectionErrorInstrumentation.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.takesArgument; - -import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; -import java.util.Map; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.matcher.ElementMatcher; -import org.apache.cxf.message.Message; - -public class CxfAsyncClientConnectionErrorInstrumentation implements TypeInstrumentation { - @Override - public ElementMatcher typeMatcher() { - return named("org.apache.cxf.jaxrs.client.JaxrsClientCallback"); - } - - @Override - public void transform(TypeTransformer transformer) { - transformer.applyAdviceToMethod( - named("handleException") - .and( - takesArgument(0, named(Map.class.getName())) - .and(takesArgument(1, named(Throwable.class.getName())))), - this.getClass().getName() + "$HandleExceptionAdvice"); - } - - @SuppressWarnings("unused") - public static class HandleExceptionAdvice { - - @Advice.OnMethodExit(suppress = Throwable.class) - public static void handleError( - @Advice.Argument(0) Map map, @Advice.Argument(1) Throwable throwable) { - if (throwable != null && map instanceof Message) { - CxfClientUtil.handleException((Message) map, throwable); - } - } - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfClientConnectionErrorInstrumentation.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfClientConnectionErrorInstrumentation.java deleted file mode 100644 index ea7ffeb1c633..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfClientConnectionErrorInstrumentation.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.takesArgument; - -import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.matcher.ElementMatcher; -import org.apache.cxf.message.Message; - -public class CxfClientConnectionErrorInstrumentation implements TypeInstrumentation { - @Override - public ElementMatcher typeMatcher() { - return named("org.apache.cxf.jaxrs.client.AbstractClient"); - } - - @Override - public void transform(TypeTransformer transformer) { - transformer.applyAdviceToMethod( - named("preProcessResult").and(takesArgument(0, named("org.apache.cxf.message.Message"))), - this.getClass().getName() + "$PreProcessResultAdvice"); - } - - @SuppressWarnings("unused") - public static class PreProcessResultAdvice { - - @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void handleError( - @Advice.Argument(0) Message message, @Advice.Thrown Throwable throwable) { - if (throwable != null) { - CxfClientUtil.handleException(message, throwable); - } - } - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfClientInstrumentationModule.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfClientInstrumentationModule.java deleted file mode 100644 index 9b36cfc01291..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfClientInstrumentationModule.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import static java.util.Arrays.asList; - -import com.google.auto.service.AutoService; -import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; -import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import java.util.List; - -/** - * JAX-RS Client API doesn't define a good point where we can handle connection failures, so we must - * handle these errors at the implementation level. - */ -@AutoService(InstrumentationModule.class) -public class CxfClientInstrumentationModule extends InstrumentationModule { - - public CxfClientInstrumentationModule() { - super("jaxrs-client", "jaxrs-client-2.0", "cxf-client", "cxf-client-3.0"); - } - - @Override - public List typeInstrumentations() { - return asList( - new CxfClientConnectionErrorInstrumentation(), - new CxfAsyncClientConnectionErrorInstrumentation()); - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfClientUtil.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfClientUtil.java deleted file mode 100644 index 6e6e303a8023..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/CxfClientUtil.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import static io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0.JaxRsClientSingletons.instrumenter; - -import io.opentelemetry.context.Context; -import javax.ws.rs.client.ClientRequestContext; -import org.apache.cxf.jaxrs.client.spec.ClientRequestContextImpl; -import org.apache.cxf.message.Message; - -public final class CxfClientUtil { - - public static void handleException(Message message, Throwable throwable) { - ClientRequestContext context = - new ClientRequestContextImpl(message, /* responseContext= */ false); - Object prop = context.getProperty(ClientTracingFilter.CONTEXT_PROPERTY_NAME); - if (prop instanceof Context) { - instrumenter().end((Context) prop, context, null, throwable); - } - } - - private CxfClientUtil() {} -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/build.gradle.kts b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/build.gradle.kts deleted file mode 100644 index 589a46c12668..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -plugins { - id("otel.javaagent-instrumentation") -} - -muzzle { - pass { - group.set("org.glassfish.jersey.core") - module.set("jersey-client") - versions.set("[2.0,3.0.0)") - } -} - -dependencies { - library("org.glassfish.jersey.core:jersey-client:2.0") - - implementation(project(":instrumentation:jaxrs-client:jaxrs-client-2.0:jaxrs-client-2.0-common:javaagent")) -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JerseyClientConnectionErrorInstrumentation.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JerseyClientConnectionErrorInstrumentation.java deleted file mode 100644 index d68e9ecf6c00..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JerseyClientConnectionErrorInstrumentation.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import static net.bytebuddy.matcher.ElementMatchers.isMethod; -import static net.bytebuddy.matcher.ElementMatchers.isPublic; -import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.namedOneOf; -import static net.bytebuddy.matcher.ElementMatchers.takesArgument; - -import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.implementation.bytecode.assign.Assigner; -import net.bytebuddy.matcher.ElementMatcher; -import org.glassfish.jersey.client.ClientRequest; -import org.glassfish.jersey.client.OpenTelemetryResponseCallbackWrapper; - -public class JerseyClientConnectionErrorInstrumentation implements TypeInstrumentation { - @Override - public ElementMatcher typeMatcher() { - return named("org.glassfish.jersey.client.ClientRuntime"); - } - - @Override - public void transform(TypeTransformer transformer) { - transformer.applyAdviceToMethod( - isMethod() - .and(isPublic()) - .and(named("invoke")) - .and(takesArgument(0, named("org.glassfish.jersey.client.ClientRequest"))), - this.getClass().getName() + "$InvokeAdvice"); - transformer.applyAdviceToMethod( - isMethod() - .and(namedOneOf("submit", "createRunnableForAsyncProcessing")) - .and(takesArgument(0, named("org.glassfish.jersey.client.ClientRequest"))) - .and(takesArgument(1, named("org.glassfish.jersey.client.ResponseCallback"))), - this.getClass().getName() + "$SubmitAdvice"); - } - - @SuppressWarnings("unused") - public static class InvokeAdvice { - - @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void handleError( - @Advice.Argument(0) ClientRequest context, @Advice.Thrown Throwable throwable) { - if (throwable != null) { - JerseyClientUtil.handleException(context, throwable); - } - } - } - - @SuppressWarnings("unused") - public static class SubmitAdvice { - - // using dynamic typing because parameter type is package private - @Advice.OnMethodEnter(suppress = Throwable.class) - public static void handleError( - @Advice.Argument(0) ClientRequest context, - @Advice.Argument(value = 1, readOnly = false, typing = Assigner.Typing.DYNAMIC) - Object callback) { - callback = OpenTelemetryResponseCallbackWrapper.wrap(context, callback); - } - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JerseyClientInstrumentationModule.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JerseyClientInstrumentationModule.java deleted file mode 100644 index 30cd3901247b..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JerseyClientInstrumentationModule.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import static java.util.Collections.singletonList; - -import com.google.auto.service.AutoService; -import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; -import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import java.util.List; - -/** - * JAX-RS Client API doesn't define a good point where we can handle connection failures, so we must - * handle these errors at the implementation level. - */ -@AutoService(InstrumentationModule.class) -public class JerseyClientInstrumentationModule extends InstrumentationModule { - - public JerseyClientInstrumentationModule() { - super("jaxrs-client", "jaxrs-client-2.0", "jersey-client", "jersey-client-2.0"); - } - - @Override - public boolean isHelperClass(String className) { - return className.equals("org.glassfish.jersey.client.OpenTelemetryResponseCallbackWrapper"); - } - - @Override - public List typeInstrumentations() { - return singletonList(new JerseyClientConnectionErrorInstrumentation()); - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JerseyClientUtil.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JerseyClientUtil.java deleted file mode 100644 index 0e667e410c6b..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/JerseyClientUtil.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import static io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0.JaxRsClientSingletons.instrumenter; - -import io.opentelemetry.context.Context; -import org.glassfish.jersey.client.ClientRequest; - -public final class JerseyClientUtil { - - public static void handleException(ClientRequest context, Throwable exception) { - Object prop = context.getProperty(ClientTracingFilter.CONTEXT_PROPERTY_NAME); - if (prop instanceof Context) { - instrumenter().end((Context) prop, context, null, exception); - } - } - - private JerseyClientUtil() {} -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/org/glassfish/jersey/client/OpenTelemetryResponseCallbackWrapper.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/org/glassfish/jersey/client/OpenTelemetryResponseCallbackWrapper.java deleted file mode 100644 index 86a92f6bbaad..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-jersey-2.0/javaagent/src/main/java/org/glassfish/jersey/client/OpenTelemetryResponseCallbackWrapper.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.glassfish.jersey.client; - -import static io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0.JerseyClientUtil.handleException; - -import javax.ws.rs.ProcessingException; -import org.glassfish.jersey.process.internal.RequestScope; - -// implemented interface is package private so wrapper needs to be in the same package -public class OpenTelemetryResponseCallbackWrapper implements ResponseCallback { - private final ClientRequest request; - private final ResponseCallback delegate; - - public OpenTelemetryResponseCallbackWrapper(ClientRequest request, ResponseCallback delegate) { - this.request = request; - this.delegate = delegate; - } - - public static Object wrap(ClientRequest request, Object callback) { - if (callback instanceof ResponseCallback) { - return new OpenTelemetryResponseCallbackWrapper(request, (ResponseCallback) callback); - } - return callback; - } - - @Override - public void completed(ClientResponse clientResponse, RequestScope requestScope) { - delegate.completed(clientResponse, requestScope); - } - - @Override - public void failed(ProcessingException exception) { - handleException(request, exception.getCause()); - delegate.failed(exception); - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/build.gradle.kts b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/build.gradle.kts deleted file mode 100644 index 6ed917ed3753..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -plugins { - id("otel.javaagent-instrumentation") -} - -muzzle { - pass { - group.set("org.jboss.resteasy") - module.set("resteasy-client") - versions.set("[3.0.0.Final,6)") - } -} - -dependencies { - library("org.jboss.resteasy:resteasy-client:3.0.0.Final") - - implementation(project(":instrumentation:jaxrs-client:jaxrs-client-2.0:jaxrs-client-2.0-common:javaagent")) -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientInvocationHeaderSetter.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientInvocationHeaderSetter.java deleted file mode 100644 index 16055eaaefe2..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ClientInvocationHeaderSetter.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import io.opentelemetry.context.propagation.TextMapSetter; -import javax.ws.rs.core.MultivaluedMap; -import org.jboss.resteasy.client.jaxrs.internal.ClientInvocation; - -enum ClientInvocationHeaderSetter implements TextMapSetter { - INSTANCE; - - @Override - public void set(ClientInvocation carrier, String key, String value) { - // Don't allow duplicates. - // Using MultivaluedMap instead of CaseInsensitiveMap returned by getHeaders because in versions - // prior to 3.0.10.Final CaseInsensitiveMap has putSingle(String, Object) which is not present - // in later versions. Going through MultivaluedMap ensures that we'll be calling - // putSingle(Object, Object) that is present in all versions. - MultivaluedMap map = carrier.getHeaders().getHeaders(); - map.putSingle(key, value); - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientHttpAttributesGetter.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientHttpAttributesGetter.java deleted file mode 100644 index 681ed2b8922e..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientHttpAttributesGetter.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import static java.util.Collections.emptyList; - -import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesGetter; -import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; -import java.util.ArrayList; -import java.util.List; -import javax.annotation.Nullable; -import javax.ws.rs.core.Response; -import org.jboss.resteasy.client.jaxrs.internal.ClientInvocation; - -final class ResteasyClientHttpAttributesGetter - implements HttpClientAttributesGetter { - - @Override - @Nullable - public String method(ClientInvocation httpRequest) { - return httpRequest.getMethod(); - } - - @Override - public String url(ClientInvocation httpRequest) { - return httpRequest.getUri().toString(); - } - - @Override - public List requestHeader(ClientInvocation httpRequest, String name) { - List rawHeaders = httpRequest.getHeaders().getHeaders().getOrDefault(name, emptyList()); - if (rawHeaders.isEmpty()) { - return emptyList(); - } - List stringHeaders = new ArrayList<>(rawHeaders.size()); - for (Object headerValue : rawHeaders) { - stringHeaders.add(String.valueOf(headerValue)); - } - return stringHeaders; - } - - @Override - @Nullable - public Long requestContentLength(ClientInvocation httpRequest, @Nullable Response httpResponse) { - return null; - } - - @Override - @Nullable - public Long requestContentLengthUncompressed( - ClientInvocation httpRequest, @Nullable Response httpResponse) { - return null; - } - - @Override - public String flavor(ClientInvocation httpRequest, @Nullable Response httpResponse) { - return SemanticAttributes.HttpFlavorValues.HTTP_1_1; - } - - @Override - public Integer statusCode(ClientInvocation httpRequest, Response httpResponse) { - return httpResponse.getStatus(); - } - - @Override - @Nullable - public Long responseContentLength(ClientInvocation httpRequest, Response httpResponse) { - int length = httpResponse.getLength(); - return length != -1 ? (long) length : null; - } - - @Override - @Nullable - public Long responseContentLengthUncompressed( - ClientInvocation httpRequest, Response httpResponse) { - return null; - } - - @Override - public List responseHeader( - ClientInvocation clientInvocation, Response response, String name) { - return response.getStringHeaders().getOrDefault(name, emptyList()); - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientInstrumentationModule.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientInstrumentationModule.java deleted file mode 100644 index 679567247ae9..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientInstrumentationModule.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import static io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge.currentContext; -import static io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0.ResteasyClientSingletons.instrumenter; -import static java.util.Collections.singletonList; -import static net.bytebuddy.matcher.ElementMatchers.isMethod; -import static net.bytebuddy.matcher.ElementMatchers.isPublic; -import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.takesArguments; - -import com.google.auto.service.AutoService; -import io.opentelemetry.context.Context; -import io.opentelemetry.context.Scope; -import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; -import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; -import java.util.List; -import javax.ws.rs.core.Response; -import net.bytebuddy.asm.Advice; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.matcher.ElementMatcher; -import org.jboss.resteasy.client.jaxrs.internal.ClientInvocation; - -/** - * Unlike other supported JAX-RS Client implementations, Resteasy's one is very simple and passes - * all requests through single point. Both sync ADN async! This allows for easy instrumentation and - * proper scope handling. - * - *

This specific instrumentation will not conflict with {@link JaxRsClientInstrumentationModule}, - * because nested client spans are suppressed. - */ -@AutoService(InstrumentationModule.class) -public class ResteasyClientInstrumentationModule extends InstrumentationModule { - - public ResteasyClientInstrumentationModule() { - super("jaxrs-client", "jaxrs-client-2.0", "resteasy-client", "resteasy-client-2.0"); - } - - @Override - public List typeInstrumentations() { - return singletonList(new ResteasyClientConnectionErrorInstrumentation()); - } - - private static final class ResteasyClientConnectionErrorInstrumentation - implements TypeInstrumentation { - @Override - public ElementMatcher typeMatcher() { - return named("org.jboss.resteasy.client.jaxrs.internal.ClientInvocation"); - } - - @Override - public void transform(TypeTransformer transformer) { - transformer.applyAdviceToMethod( - isMethod().and(isPublic()).and(named("invoke")).and(takesArguments(0)), - ResteasyClientInstrumentationModule.class.getName() + "$InvokeAdvice"); - } - } - - @SuppressWarnings("unused") - public static class InvokeAdvice { - - @Advice.OnMethodEnter(suppress = Throwable.class) - public static void methodEnter( - @Advice.This ClientInvocation invocation, - @Advice.Local("otelContext") Context context, - @Advice.Local("otelScope") Scope scope) { - Context parentContext = currentContext(); - if (instrumenter().shouldStart(parentContext, invocation)) { - context = instrumenter().start(parentContext, invocation); - scope = context.makeCurrent(); - } - } - - @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void methodExit( - @Advice.This ClientInvocation invocation, - @Advice.Return Response response, - @Advice.Thrown Throwable throwable, - @Advice.Local("otelContext") Context context, - @Advice.Local("otelScope") Scope scope) { - if (scope == null) { - return; - } - - scope.close(); - instrumenter().end(context, invocation, response, throwable); - } - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientNetAttributesGetter.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientNetAttributesGetter.java deleted file mode 100644 index 44ded0b2df96..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientNetAttributesGetter.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesGetter; -import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; -import javax.annotation.Nullable; -import javax.ws.rs.core.Response; -import org.jboss.resteasy.client.jaxrs.internal.ClientInvocation; - -final class ResteasyClientNetAttributesGetter - implements NetClientAttributesGetter { - - @Override - public String transport(ClientInvocation request, @Nullable Response response) { - return SemanticAttributes.NetTransportValues.IP_TCP; - } - - @Override - @Nullable - public String peerName(ClientInvocation request, @Nullable Response response) { - return request.getUri().getHost(); - } - - @Override - public Integer peerPort(ClientInvocation request, @Nullable Response response) { - int port = request.getUri().getPort(); - if (port != -1) { - return port; - } - return null; - } - - @Override - @Nullable - public String peerIp(ClientInvocation request, @Nullable Response response) { - return null; - } -} diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientSingletons.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientSingletons.java deleted file mode 100644 index c5d3feebbe2d..000000000000 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/jaxrs-client-2.0-resteasy-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrsclient/v2_0/ResteasyClientSingletons.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0; - -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.instrumenter.ErrorCauseExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.api.instrumenter.PeerServiceAttributesExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; -import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.core.Response; -import org.jboss.resteasy.client.jaxrs.internal.ClientInvocation; - -public class ResteasyClientSingletons { - private static final String INSTRUMENTATION_NAME = - "io.opentelemetry.jaxrs-client-2.0-resteasy-3.0"; - - private static final Instrumenter INSTRUMENTER; - - static { - ResteasyClientHttpAttributesGetter httpAttributesGetter = - new ResteasyClientHttpAttributesGetter(); - ResteasyClientNetAttributesGetter netAttributesGetter = new ResteasyClientNetAttributesGetter(); - - INSTRUMENTER = - Instrumenter.builder( - GlobalOpenTelemetry.get(), - INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) - .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) - .setErrorCauseExtractor( - (throwable) -> { - if (throwable instanceof ProcessingException) { - throwable = throwable.getCause(); - } - return ErrorCauseExtractor.jdk().extractCause(throwable); - }) - .addAttributesExtractor(HttpClientAttributesExtractor.create(httpAttributesGetter)) - .addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter)) - .addAttributesExtractor(PeerServiceAttributesExtractor.create(netAttributesGetter)) - .addRequestMetrics(HttpClientMetrics.get()) - .newClientInstrumenter(ClientInvocationHeaderSetter.INSTANCE); - } - - public static Instrumenter instrumenter() { - return INSTRUMENTER; - } - - private ResteasyClientSingletons() {} -} diff --git a/settings.gradle.kts b/settings.gradle.kts index d9114d022c98..224d124a6588 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -220,10 +220,7 @@ include(":instrumentation:jaxrs:jaxrs-2.0:jaxrs-2.0-common:testing") include(":instrumentation:jaxrs:jaxrs-2.0:jaxrs-2.0-tomee-testing") include(":instrumentation:jaxrs:jaxrs-2.0:jaxrs-2.0-wildfly-testing") include(":instrumentation:jaxrs-client:jaxrs-client-1.1:javaagent") -include(":instrumentation:jaxrs-client:jaxrs-client-2.0:jaxrs-client-2.0-common:javaagent") -include(":instrumentation:jaxrs-client:jaxrs-client-2.0:jaxrs-client-2.0-cxf-3.0:javaagent") -include(":instrumentation:jaxrs-client:jaxrs-client-2.0:jaxrs-client-2.0-jersey-2.0:javaagent") -include(":instrumentation:jaxrs-client:jaxrs-client-2.0:jaxrs-client-2.0-resteasy-3.0:javaagent") +include(":instrumentation:jaxrs-client:jaxrs-client-2.0-testing") include(":instrumentation:jaxws:jaxws-2.0:javaagent") include(":instrumentation:jaxws:jaxws-2.0-arquillian-testing") include(":instrumentation:jaxws:jaxws-2.0-axis2-1.6:javaagent")