From 39508bc07e184f8676bfc6aa1c0275fed3c5c3ec Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Wed, 23 Jun 2021 02:34:05 +0300 Subject: [PATCH] Test jax-ws on tomee and wildfly (#3382) * Test jax-ws on tomee and wildfly * Search only org.gradle artifacts from gradle repo --- .../jaxrs-2.0-arquillian-testing.gradle | 7 +- .../jaxrs-2.0-tomee-testing.gradle | 7 +- .../jaxrs-2.0-wildfly-testing.gradle | 7 +- .../jaxws-2.0-arquillian-testing.gradle | 29 ++++ .../main/groovy/ArquillianJaxWsTest.groovy | 135 ++++++++++++++++++ .../main/java/test/EjbHelloServiceImpl.java | 22 +++ .../src/main/java/test/HelloService.java | 19 +++ .../src/main/java/test/HelloServiceImpl.java | 20 +++ .../jaxws-2.0-tomee-testing.gradle | 29 ++++ .../src/test/groovy/TomeeJaxWsTest.groovy | 19 +++ .../src/test/resources/arquillian.xml | 15 ++ .../src/test/resources/logback.xml | 18 +++ .../jaxws-2.0-wildfly-testing.gradle | 80 +++++++++++ .../src/test/groovy/WildflyJaxWsTest.groovy | 15 ++ .../src/test/resources/arquillian.xml | 15 ++ settings.gradle | 3 + 16 files changed, 437 insertions(+), 3 deletions(-) create mode 100644 instrumentation/jaxws/jaxws-2.0-arquillian-testing/jaxws-2.0-arquillian-testing.gradle create mode 100644 instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/groovy/ArquillianJaxWsTest.groovy create mode 100644 instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/java/test/EjbHelloServiceImpl.java create mode 100644 instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/java/test/HelloService.java create mode 100644 instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/java/test/HelloServiceImpl.java create mode 100644 instrumentation/jaxws/jaxws-2.0-tomee-testing/jaxws-2.0-tomee-testing.gradle create mode 100644 instrumentation/jaxws/jaxws-2.0-tomee-testing/src/test/groovy/TomeeJaxWsTest.groovy create mode 100644 instrumentation/jaxws/jaxws-2.0-tomee-testing/src/test/resources/arquillian.xml create mode 100644 instrumentation/jaxws/jaxws-2.0-tomee-testing/src/test/resources/logback.xml create mode 100644 instrumentation/jaxws/jaxws-2.0-wildfly-testing/jaxws-2.0-wildfly-testing.gradle create mode 100644 instrumentation/jaxws/jaxws-2.0-wildfly-testing/src/test/groovy/WildflyJaxWsTest.groovy create mode 100644 instrumentation/jaxws/jaxws-2.0-wildfly-testing/src/test/resources/arquillian.xml diff --git a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-arquillian-testing/jaxrs-2.0-arquillian-testing.gradle b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-arquillian-testing/jaxrs-2.0-arquillian-testing.gradle index cd9a06814f..297a581609 100644 --- a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-arquillian-testing/jaxrs-2.0-arquillian-testing.gradle +++ b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-arquillian-testing/jaxrs-2.0-arquillian-testing.gradle @@ -5,7 +5,12 @@ plugins { // add repo for org.gradle:gradle-tooling-api which org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-gradle-depchain depends on repositories { mavenCentral() - maven { url 'https://repo.gradle.org/artifactory/libs-releases-local' } + maven { + url 'https://repo.gradle.org/artifactory/libs-releases-local' + content { + includeGroup 'org.gradle' + } + } mavenLocal() } diff --git a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-tomee-testing/jaxrs-2.0-tomee-testing.gradle b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-tomee-testing/jaxrs-2.0-tomee-testing.gradle index da0b33521e..18e1460f63 100644 --- a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-tomee-testing/jaxrs-2.0-tomee-testing.gradle +++ b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-tomee-testing/jaxrs-2.0-tomee-testing.gradle @@ -6,7 +6,12 @@ plugins { // which is used by jaxrs-2.0-arquillian-testing depends on repositories { mavenCentral() - maven { url 'https://repo.gradle.org/artifactory/libs-releases-local' } + maven { + url 'https://repo.gradle.org/artifactory/libs-releases-local' + content { + includeGroup 'org.gradle' + } + } mavenLocal() } diff --git a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-wildfly-testing/jaxrs-2.0-wildfly-testing.gradle b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-wildfly-testing/jaxrs-2.0-wildfly-testing.gradle index 2c3f441957..5fc9ba3f70 100644 --- a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-wildfly-testing/jaxrs-2.0-wildfly-testing.gradle +++ b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-wildfly-testing/jaxrs-2.0-wildfly-testing.gradle @@ -6,7 +6,12 @@ plugins { // which is used by jaxrs-2.0-arquillian-testing depends on repositories { mavenCentral() - maven { url 'https://repo.gradle.org/artifactory/libs-releases-local' } + maven { + url 'https://repo.gradle.org/artifactory/libs-releases-local' + content { + includeGroup 'org.gradle' + } + } mavenLocal() } diff --git a/instrumentation/jaxws/jaxws-2.0-arquillian-testing/jaxws-2.0-arquillian-testing.gradle b/instrumentation/jaxws/jaxws-2.0-arquillian-testing/jaxws-2.0-arquillian-testing.gradle new file mode 100644 index 0000000000..12912f72c6 --- /dev/null +++ b/instrumentation/jaxws/jaxws-2.0-arquillian-testing/jaxws-2.0-arquillian-testing.gradle @@ -0,0 +1,29 @@ +plugins { + id("otel.javaagent-testing") +} + +// add repo for org.gradle:gradle-tooling-api which org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-gradle-depchain depends on +repositories { + mavenCentral() + maven { + url 'https://repo.gradle.org/artifactory/libs-releases-local' + content { + includeGroup 'org.gradle' + } + } + mavenLocal() +} + +dependencies { + compileOnly "javax:javaee-api:7.0" + + api project(':testing-common') + implementation "io.opentelemetry:opentelemetry-api" + implementation "org.jsoup:jsoup:1.13.1" + + def arquillianVersion = '1.4.0.Final' + implementation "org.jboss.arquillian.junit:arquillian-junit-container:${arquillianVersion}" + implementation "org.jboss.arquillian.protocol:arquillian-protocol-servlet:${arquillianVersion}" + implementation 'org.jboss.arquillian.spock:arquillian-spock-container:1.0.0.CR1' + api "org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-gradle-depchain:3.1.3" +} diff --git a/instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/groovy/ArquillianJaxWsTest.groovy b/instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/groovy/ArquillianJaxWsTest.groovy new file mode 100644 index 0000000000..af39e088d4 --- /dev/null +++ b/instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/groovy/ArquillianJaxWsTest.groovy @@ -0,0 +1,135 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +import static io.opentelemetry.api.trace.SpanKind.INTERNAL +import static io.opentelemetry.api.trace.SpanKind.SERVER +import static io.opentelemetry.api.trace.StatusCode.ERROR + +import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification +import io.opentelemetry.instrumentation.test.asserts.TraceAssert +import io.opentelemetry.sdk.trace.data.SpanData +import io.opentelemetry.semconv.trace.attributes.SemanticAttributes +import io.opentelemetry.testing.internal.armeria.client.WebClient +import org.jboss.arquillian.container.test.api.Deployment +import org.jboss.arquillian.container.test.api.RunAsClient +import org.jboss.arquillian.spock.ArquillianSputnik +import org.jboss.arquillian.test.api.ArquillianResource +import org.jboss.shrinkwrap.api.ShrinkWrap +import org.jboss.shrinkwrap.api.asset.EmptyAsset +import org.jboss.shrinkwrap.api.spec.WebArchive +import org.jsoup.Jsoup +import org.junit.runner.RunWith +import spock.lang.Unroll +import test.EjbHelloServiceImpl +import test.HelloService +import test.HelloServiceImpl + +@RunWith(ArquillianSputnik) +@RunAsClient +abstract class ArquillianJaxWsTest extends AgentInstrumentationSpecification { + + static WebClient client = WebClient.of() + + @ArquillianResource + static URI url + + @Deployment + static WebArchive createDeployment() { + return ShrinkWrap.create(WebArchive) + .addClass(HelloService) + .addClass(HelloServiceImpl) + .addClass(EjbHelloServiceImpl) + .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") + } + + def getAddress(String service) { + return url.resolve(service).toString() + } + + @Unroll + def "test #service"() { + setup: + def soapMessage = + """ + + + + Test + + + """ + + def response = client.post(getAddress(service), soapMessage).aggregate().join() + def doc = Jsoup.parse(response.contentUtf8()) + + expect: + response.status().code() == 200 + doc.selectFirst("message").text() == "Hello Test" + + and: + def methodName = "hello" + assertTraces(1) { + trace(0, 3) { + serverSpan(it, 0, serverSpanName(service, methodName)) + handlerSpan(it, 1, service, methodName, span(0)) + annotationHandlerSpan(it, 2, service, methodName, span(1)) + } + } + + where: + service << ["HelloService", "EjbHelloService"] + } + + def serverSpanName(String service, String operation) { + return service + "Impl." + operation + } + + static serverSpan(TraceAssert trace, int index, String operation, Throwable exception = null) { + trace.span(index) { + hasNoParent() + name operation + kind SERVER + if (exception != null) { + status ERROR + } + } + } + + static handlerSpan(TraceAssert trace, int index, String service, String operation, Object parentSpan = null, Throwable exception = null) { + trace.span(index) { + if (parentSpan == null) { + hasNoParent() + } else { + childOf((SpanData) parentSpan) + } + name service + "/" + operation + kind INTERNAL + if (exception) { + status ERROR + errorEvent(exception.class, exception.message) + } + } + } + + static annotationHandlerSpan(TraceAssert trace, int index, String service, String methodName, Object parentSpan = null, Throwable exception = null) { + trace.span(index) { + if (parentSpan == null) { + hasNoParent() + } else { + childOf((SpanData) parentSpan) + } + name service + "Impl." + methodName + kind INTERNAL + if (exception) { + status ERROR + errorEvent(exception.class, exception.message) + } + attributes { + "${SemanticAttributes.CODE_NAMESPACE.key}" "test." + service + "Impl" + "${SemanticAttributes.CODE_FUNCTION.key}" methodName + } + } + } +} diff --git a/instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/java/test/EjbHelloServiceImpl.java b/instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/java/test/EjbHelloServiceImpl.java new file mode 100644 index 0000000000..df0dc1b952 --- /dev/null +++ b/instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/java/test/EjbHelloServiceImpl.java @@ -0,0 +1,22 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package test; + +import javax.ejb.Stateless; +import javax.jws.WebService; + +@WebService( + serviceName = "EjbHelloService", + endpointInterface = "test.HelloService", + targetNamespace = "http://opentelemetry.io/test/hello-web-service") +@Stateless +public class EjbHelloServiceImpl implements HelloService { + + @Override + public String hello(String name) { + return "Hello " + name; + } +} diff --git a/instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/java/test/HelloService.java b/instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/java/test/HelloService.java new file mode 100644 index 0000000000..d576b1797d --- /dev/null +++ b/instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/java/test/HelloService.java @@ -0,0 +1,19 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package test; + +import javax.jws.WebParam; +import javax.jws.WebResult; +import javax.jws.WebService; +import javax.xml.ws.RequestWrapper; + +@WebService(targetNamespace = "http://opentelemetry.io/test/hello-web-service") +public interface HelloService { + + @RequestWrapper(localName = "helloRequest") + @WebResult(name = "message") + String hello(@WebParam(name = "name") String name); +} diff --git a/instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/java/test/HelloServiceImpl.java b/instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/java/test/HelloServiceImpl.java new file mode 100644 index 0000000000..2cf670d739 --- /dev/null +++ b/instrumentation/jaxws/jaxws-2.0-arquillian-testing/src/main/java/test/HelloServiceImpl.java @@ -0,0 +1,20 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package test; + +import javax.jws.WebService; + +@WebService( + serviceName = "HelloService", + endpointInterface = "test.HelloService", + targetNamespace = "http://opentelemetry.io/test/hello-web-service") +public class HelloServiceImpl implements HelloService { + + @Override + public String hello(String name) { + return "Hello " + name; + } +} diff --git a/instrumentation/jaxws/jaxws-2.0-tomee-testing/jaxws-2.0-tomee-testing.gradle b/instrumentation/jaxws/jaxws-2.0-tomee-testing/jaxws-2.0-tomee-testing.gradle new file mode 100644 index 0000000000..1ad3f0f723 --- /dev/null +++ b/instrumentation/jaxws/jaxws-2.0-tomee-testing/jaxws-2.0-tomee-testing.gradle @@ -0,0 +1,29 @@ +plugins { + id("otel.javaagent-testing") +} + +// add repo for org.gradle:gradle-tooling-api which org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-gradle-depchain +// which is used by jaxws-2.0-arquillian-testing depends on +repositories { + mavenCentral() + maven { + url 'https://repo.gradle.org/artifactory/libs-releases-local' + content { + includeGroup 'org.gradle' + } + } + mavenLocal() +} + +dependencies { + testImplementation project(':instrumentation:jaxws:jaxws-2.0-arquillian-testing') + testCompileOnly "jakarta.enterprise:jakarta.enterprise.cdi-api:2.0.2" + testRuntimeOnly "org.apache.tomee:arquillian-tomee-embedded:8.0.6" + testRuntimeOnly "org.apache.tomee:tomee-embedded:8.0.6" + testRuntimeOnly "org.apache.tomee:tomee-webservices:8.0.6" + + testInstrumentation project(':instrumentation:servlet:servlet-3.0:javaagent') + testInstrumentation project(':instrumentation:jaxws:jaxws-2.0:javaagent') + testInstrumentation project(':instrumentation:jaxws:jaxws-2.0-cxf-3.0:javaagent') + testInstrumentation project(':instrumentation:jaxws:jws-1.1:javaagent') +} diff --git a/instrumentation/jaxws/jaxws-2.0-tomee-testing/src/test/groovy/TomeeJaxWsTest.groovy b/instrumentation/jaxws/jaxws-2.0-tomee-testing/src/test/groovy/TomeeJaxWsTest.groovy new file mode 100644 index 0000000000..b2faf9bd60 --- /dev/null +++ b/instrumentation/jaxws/jaxws-2.0-tomee-testing/src/test/groovy/TomeeJaxWsTest.groovy @@ -0,0 +1,19 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +import javax.enterprise.inject.Vetoed + +// exclude this class from CDI as it causes NullPointerException when tomee is run with jdk8 +@Vetoed +class TomeeJaxWsTest extends ArquillianJaxWsTest { + + @Override + def getAddress(String service) { + if (service == "EjbHelloService") { + service = "webservices/EjbHelloServiceImpl" + } + return super.getAddress(service) + } +} diff --git a/instrumentation/jaxws/jaxws-2.0-tomee-testing/src/test/resources/arquillian.xml b/instrumentation/jaxws/jaxws-2.0-tomee-testing/src/test/resources/arquillian.xml new file mode 100644 index 0000000000..e0ae2a76e0 --- /dev/null +++ b/instrumentation/jaxws/jaxws-2.0-tomee-testing/src/test/resources/arquillian.xml @@ -0,0 +1,15 @@ + + + + + + + -1 + -1 + + + \ No newline at end of file diff --git a/instrumentation/jaxws/jaxws-2.0-tomee-testing/src/test/resources/logback.xml b/instrumentation/jaxws/jaxws-2.0-tomee-testing/src/test/resources/logback.xml new file mode 100644 index 0000000000..6875217a64 --- /dev/null +++ b/instrumentation/jaxws/jaxws-2.0-tomee-testing/src/test/resources/logback.xml @@ -0,0 +1,18 @@ + + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + diff --git a/instrumentation/jaxws/jaxws-2.0-wildfly-testing/jaxws-2.0-wildfly-testing.gradle b/instrumentation/jaxws/jaxws-2.0-wildfly-testing/jaxws-2.0-wildfly-testing.gradle new file mode 100644 index 0000000000..a75369533b --- /dev/null +++ b/instrumentation/jaxws/jaxws-2.0-wildfly-testing/jaxws-2.0-wildfly-testing.gradle @@ -0,0 +1,80 @@ +plugins { + id("otel.javaagent-testing") +} + +// add repo for org.gradle:gradle-tooling-api which org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-gradle-depchain +// which is used by jaxws-2.0-arquillian-testing depends on +repositories { + mavenCentral() + maven { + url 'https://repo.gradle.org/artifactory/libs-releases-local' + content { + includeGroup 'org.gradle' + } + } + mavenLocal() +} + +configurations { + testServer +} + +dependencies { + testImplementation "javax:javaee-api:7.0" + + testImplementation project(':instrumentation:jaxws:jaxws-2.0-arquillian-testing') + testRuntimeOnly "org.wildfly.arquillian:wildfly-arquillian-container-embedded:2.2.0.Final" + + testInstrumentation project(':instrumentation:servlet:servlet-3.0:javaagent') + testInstrumentation project(':instrumentation:jaxws:jaxws-2.0:javaagent') + testInstrumentation project(':instrumentation:jaxws:jaxws-2.0-cxf-3.0:javaagent') + testInstrumentation project(':instrumentation:jaxws:jws-1.1:javaagent') + + // wildfly version used to run tests + testServer "org.wildfly:wildfly-dist:18.0.0.Final@zip" +} + +// extract wildfly dist, path is used from arquillian.xml +task setupServer(type: Copy) { + from zipTree(configurations.testServer.singleFile) + into file('build/server/') +} + +// logback-classic contains /META-INF/services/javax.servlet.ServletContainerInitializer +// that breaks deploy on embedded wildfly +// create a copy of logback-classic jar that does not have this file +task modifyLogbackJar(type: Jar) { + doFirst { + configurations.configureEach { + if (it.name.toLowerCase().endsWith('testruntimeclasspath')) { + def logbackJar = it.find { it.name.contains('logback-classic') } + from zipTree(logbackJar) + exclude( + "/META-INF/services/javax.servlet.ServletContainerInitializer" + ) + } + } + } + destinationDirectory = file("$buildDir/tmp") + archiveFileName = "logback-classic-modified.jar" +} + +test.dependsOn modifyLogbackJar, setupServer + +test { + doFirst { + // --add-modules is unrecognized on jdk8, ignore it instead of failing + jvmArgs "-XX:+IgnoreUnrecognizedVMOptions" + // needed for java 11 to avoid org.jboss.modules.ModuleNotFoundException: java.se + jvmArgs "--add-modules=java.se" + // add offset to default port values + jvmArgs "-Djboss.socket.binding.port-offset=200" + + // remove logback-classic from classpath + classpath = classpath.filter { + return !it.absolutePath.contains("logback-classic") + } + // add modified copy of logback-classic to classpath + classpath += files("$buildDir/tmp/logback-classic-modified.jar") + } +} \ No newline at end of file diff --git a/instrumentation/jaxws/jaxws-2.0-wildfly-testing/src/test/groovy/WildflyJaxWsTest.groovy b/instrumentation/jaxws/jaxws-2.0-wildfly-testing/src/test/groovy/WildflyJaxWsTest.groovy new file mode 100644 index 0000000000..a8d5f1ae3d --- /dev/null +++ b/instrumentation/jaxws/jaxws-2.0-wildfly-testing/src/test/groovy/WildflyJaxWsTest.groovy @@ -0,0 +1,15 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +class WildflyJaxWsTest extends ArquillianJaxWsTest { + + @Override + def getAddress(String service) { + if (service == "EjbHelloService") { + service = "EjbHelloService/EjbHelloServiceImpl" + } + return super.getAddress(service) + } +} diff --git a/instrumentation/jaxws/jaxws-2.0-wildfly-testing/src/test/resources/arquillian.xml b/instrumentation/jaxws/jaxws-2.0-wildfly-testing/src/test/resources/arquillian.xml new file mode 100644 index 0000000000..02e0432fac --- /dev/null +++ b/instrumentation/jaxws/jaxws-2.0-wildfly-testing/src/test/resources/arquillian.xml @@ -0,0 +1,15 @@ + + + + + + + build/server/wildfly-18.0.0.Final + build/server/wildfly-18.0.0.Final/modules + + + \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 7424da2595..587f44f430 100644 --- a/settings.gradle +++ b/settings.gradle @@ -169,12 +169,15 @@ include ':instrumentation:jaxrs-client:jaxrs-client-2.0:jaxrs-client-2.0-cxf-3.0 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:jaxws:jaxws-2.0:javaagent' +include ':instrumentation:jaxws:jaxws-2.0-arquillian-testing' include ':instrumentation:jaxws:jaxws-2.0-axis2-1.6:javaagent' include ':instrumentation:jaxws:jaxws-2.0-axis2-1.6:library' include ':instrumentation:jaxws:jaxws-2.0-cxf-3.0:javaagent' include ':instrumentation:jaxws:jaxws-2.0-cxf-3.0:library' include ':instrumentation:jaxws:jaxws-2.0-metro-2.2:javaagent' include ':instrumentation:jaxws:jaxws-2.0-testing' +include ':instrumentation:jaxws:jaxws-2.0-tomee-testing' +include ':instrumentation:jaxws:jaxws-2.0-wildfly-testing' include ':instrumentation:jaxws:jaxws-common:library' include ':instrumentation:jaxws:jws-1.1:javaagent' include ':instrumentation:jdbc:javaagent'