From a541b445cc606155515fb04a6961c927f05e4b51 Mon Sep 17 00:00:00 2001 From: Roberto Cortez Date: Wed, 14 Oct 2020 19:27:32 +0100 Subject: [PATCH] Refactor TCK to use Jetty and RESTEasy 4.x. --- .gitignore | 3 + pom.xml | 61 ++++---- tck/pom.xml | 123 ++++----------- .../opentracing/OpenTracingCDIExtension.java | 21 --- ...esteasyClientTracingRegistrarProvider.java | 6 +- .../ServletContextTracingInstaller.java | 9 +- .../smallrye/opentracing/TestApplication.java | 103 ++++++++++++ .../arquillian/DeploymentProcessor.java | 55 +------ .../FixedResteasyServletInitializer.java | 146 ------------------ .../SmallRyeBeanArchiveHandler.java | 59 ------- tck/src/test/resources/arquillian.xml | 19 ++- tck/src/test/tck-suite.xml | 1 + 12 files changed, 194 insertions(+), 412 deletions(-) delete mode 100644 tck/src/test/java/io/smallrye/opentracing/OpenTracingCDIExtension.java create mode 100644 tck/src/test/java/io/smallrye/opentracing/TestApplication.java delete mode 100644 tck/src/test/java/io/smallrye/opentracing/arquillian/FixedResteasyServletInitializer.java delete mode 100644 tck/src/test/java/io/smallrye/opentracing/arquillian/SmallRyeBeanArchiveHandler.java diff --git a/.gitignore b/.gitignore index bfadc56..ba72443 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ hs_err_pid* # Intellij Idea *.iml .idea/ + +# formatter cache directories +.cache diff --git a/pom.xml b/pom.xml index 5611c3f..d7479aa 100644 --- a/pom.xml +++ b/pom.xml @@ -16,11 +16,14 @@ 2.0-RC2 2.0-M1 2.0-RC2 - 1.8.6 + 0.33.0 1.0.0 0.0.5 - 3.12.0.Final + + 1.0.0.CR3 + 9.4.32.v20200930 + 4.6.0-SNAPSHOT ${project.basedir}/tck/target/site/jacoco-aggregate/jacoco.xml,${project.basedir}/../tck/target/site/jacoco-aggregate/jacoco.xml @@ -49,23 +52,23 @@ io.smallrye smallrye-opentracing - 1.3.5-SNAPSHOT + ${project.version} - io.smallrye - smallrye-opentracing-tck - 1.3.5-SNAPSHOT - - - - io.smallrye.config - smallrye-config - ${version.smallrye.config} + io.opentracing + opentracing-api + ${version.opentracing} - org.jboss.resteasy - resteasy-client-microprofile - ${version.resteasy} + io.opentracing.contrib + opentracing-interceptors + ${version.opentracing.interceptors} + + + javax + javaee-api + + @@ -90,36 +93,38 @@ + org.eclipse.microprofile.opentracing microprofile-opentracing-tck ${version.microprofile.opentracing} + test org.eclipse.microprofile.opentracing microprofile-opentracing-tck-rest-client ${version.microprofile.opentracing} + test io.opentracing - opentracing-api + opentracing-mock ${version.opentracing} + test - io.opentracing - opentracing-mock - ${version.opentracing} + org.eclipse.jetty + jetty-bom + ${version.jetty} + pom + import - io.opentracing.contrib - opentracing-interceptors - ${version.opentracing.interceptors} - - - javax - javaee-api - - + org.jboss.resteasy + resteasy-bom + ${version.resteasy} + pom + import diff --git a/tck/pom.xml b/tck/pom.xml index c729765..a55f5e6 100644 --- a/tck/pom.xml +++ b/tck/pom.xml @@ -15,15 +15,6 @@ io.smallrye smallrye-opentracing - - io.smallrye.config - smallrye-config - - - org.jboss.resteasy - resteasy-client-microprofile - - org.eclipse.microprofile.opentracing microprofile-opentracing-tck @@ -38,47 +29,51 @@ - org.jboss.resteasy - resteasy-jaxrs - ${version.resteasy} + org.jboss.arquillian.container + arquillian-jetty-embedded-9 + ${version.arquillian.jetty} + test - org.jboss.resteasy - resteasy-client - ${version.resteasy} + org.eclipse.jetty + jetty-webapp + test - org.jboss.resteasy - resteasy-cdi - ${version.resteasy} + org.eclipse.jetty + jetty-deploy + test - org.jboss.resteasy - resteasy-json-binding-provider - ${version.resteasy} + org.eclipse.jetty + jetty-annotations + test - - org.jboss.arquillian.testng - arquillian-testng-container + org.jboss.weld.servlet + weld-servlet-core + ${version.weld.core} + test - - org.jboss.arquillian.container - arquillian-container-test-spi - provided + org.jboss.resteasy + resteasy-servlet-initializer + test - - org.jboss.spec.javax.servlet - jboss-servlet-api_3.1_spec - 1.0.2.Final + org.jboss.resteasy + resteasy-cdi + test - - org.jboss.weld.servlet - weld-servlet-core - ${version.weld.core} + org.jboss.resteasy + resteasy-json-binding-provider + test + + + org.jboss.resteasy + resteasy-client-microprofile + test @@ -105,6 +100,7 @@ true + org.sonatype.plugins nexus-staging-maven-plugin @@ -116,61 +112,6 @@ - - wildfly-servlet - - - - !noWildflyServlet - - - - - org.wildfly.arquillian - wildfly-arquillian-container-managed - test - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - ${project.build.directory}/wildfly-servlet-${version.wildfly} - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack - process-test-classes - - unpack - - - - - org.wildfly - wildfly-servlet-dist - ${version.wildfly} - zip - false - ${project.build.directory} - - - - - - - - - - coverage diff --git a/tck/src/test/java/io/smallrye/opentracing/OpenTracingCDIExtension.java b/tck/src/test/java/io/smallrye/opentracing/OpenTracingCDIExtension.java deleted file mode 100644 index 27fe724..0000000 --- a/tck/src/test/java/io/smallrye/opentracing/OpenTracingCDIExtension.java +++ /dev/null @@ -1,21 +0,0 @@ -package io.smallrye.opentracing; - -import javax.enterprise.event.Observes; -import javax.enterprise.inject.spi.BeanManager; -import javax.enterprise.inject.spi.BeforeBeanDiscovery; -import javax.enterprise.inject.spi.Extension; - -import org.jboss.logging.Logger; - -/** - * @author Pavol Loffay - */ -public class OpenTracingCDIExtension implements Extension { - - private static final Logger logger = Logger.getLogger(OpenTracingCDIExtension.class); - - public void observeBeforeBeanDiscovery(@Observes BeforeBeanDiscovery bbd, BeanManager manager) { - logger.info("Registering Tracer CDI producer"); - bbd.addAnnotatedType(manager.createAnnotatedType(TracerProducer.class)); - } -} diff --git a/tck/src/test/java/io/smallrye/opentracing/ResteasyClientTracingRegistrarProvider.java b/tck/src/test/java/io/smallrye/opentracing/ResteasyClientTracingRegistrarProvider.java index 6471b6c..496c7f7 100644 --- a/tck/src/test/java/io/smallrye/opentracing/ResteasyClientTracingRegistrarProvider.java +++ b/tck/src/test/java/io/smallrye/opentracing/ResteasyClientTracingRegistrarProvider.java @@ -1,4 +1,3 @@ - package io.smallrye.opentracing; import java.util.concurrent.ExecutorService; @@ -8,7 +7,6 @@ import javax.ws.rs.client.ClientBuilder; import org.eclipse.microprofile.opentracing.ClientTracingRegistrarProvider; -import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; import io.opentracing.Tracer; import io.opentracing.contrib.concurrent.TracedExecutorService; @@ -19,14 +17,12 @@ public class ResteasyClientTracingRegistrarProvider implements ClientTracingRegistrarProvider { public ClientBuilder configure(ClientBuilder clientBuilder) { - // Make sure executor is the same as a default in resteasy ClientBuilder return configure(clientBuilder, Executors.newFixedThreadPool(10)); } public ClientBuilder configure(ClientBuilder clientBuilder, ExecutorService executorService) { - ResteasyClientBuilder resteasyClientBuilder = (ResteasyClientBuilder) clientBuilder; Tracer tracer = CDI.current().select(Tracer.class).get(); - return resteasyClientBuilder.asyncExecutor(new TracedExecutorService(executorService, tracer)) + return clientBuilder.executorService(new TracedExecutorService(executorService, tracer)) .register(new SmallRyeClientTracingFeature(tracer)); } } diff --git a/tck/src/test/java/io/smallrye/opentracing/ServletContextTracingInstaller.java b/tck/src/test/java/io/smallrye/opentracing/ServletContextTracingInstaller.java index 5468275..3565734 100644 --- a/tck/src/test/java/io/smallrye/opentracing/ServletContextTracingInstaller.java +++ b/tck/src/test/java/io/smallrye/opentracing/ServletContextTracingInstaller.java @@ -2,7 +2,6 @@ import java.util.EnumSet; -import javax.enterprise.inject.spi.CDI; import javax.servlet.DispatcherType; import javax.servlet.FilterRegistration.Dynamic; import javax.servlet.ServletContext; @@ -10,7 +9,6 @@ import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; -import io.opentracing.Tracer; import io.opentracing.contrib.jaxrs2.server.SpanFinishingFilter; /** @@ -22,14 +20,13 @@ public class ServletContextTracingInstaller implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent servletContextEvent) { ServletContext servletContext = servletContextEvent.getServletContext(); - servletContext.setInitParameter("resteasy.providers", SmallRyeTracingDynamicFeature.class.getName()); + servletContext.setInitParameter("resteasy.providers", + SmallRyeTracingDynamicFeature.class.getName() + "," + ExceptionMapper.class.getName()); // Span finishing filter - Tracer tracer = CDI.current().select(Tracer.class).get(); Dynamic filterRegistration = servletContext.addFilter("tracingFilter", new SpanFinishingFilter()); filterRegistration.setAsyncSupported(true); - filterRegistration.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), - true, "*"); + filterRegistration.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "*"); } @Override diff --git a/tck/src/test/java/io/smallrye/opentracing/TestApplication.java b/tck/src/test/java/io/smallrye/opentracing/TestApplication.java new file mode 100644 index 0000000..b6a1d55 --- /dev/null +++ b/tck/src/test/java/io/smallrye/opentracing/TestApplication.java @@ -0,0 +1,103 @@ +package io.smallrye.opentracing; + +import static javax.ws.rs.core.MediaType.TEXT_PLAIN; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URL; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.context.RequestScoped; +import javax.enterprise.inject.spi.CDI; +import javax.inject.Inject; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.ApplicationPath; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.container.test.api.RunAsClient; +import org.jboss.arquillian.test.api.ArquillianResource; +import org.jboss.arquillian.testng.Arquillian; +import org.jboss.shrinkwrap.api.ArchivePaths; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.testng.Assert; +import org.testng.annotations.Test; + +public class TestApplication extends Arquillian { + /** + * The base URL for the container under test + */ + @ArquillianResource + private URL baseURL; + + @Deployment + public static WebArchive createDeployment() { + return ShrinkWrap + .create(WebArchive.class) + .addClass(TestServlet.class) + .addClass(RestApplication.class) + .addClass(TestEndpoint.class) + .addAsWebInfResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml")); + } + + @Test + @RunAsClient + public void servlet() { + String uri = baseURL.toExternalForm() + "servlet"; + System.out.println("uri = " + uri); + WebTarget echoEndpointTarget = ClientBuilder.newClient().target(uri); + Response response = echoEndpointTarget.request(TEXT_PLAIN).get(); + Assert.assertEquals(response.getStatus(), HttpURLConnection.HTTP_OK); + } + + @Test + @RunAsClient + public void rest() { + String uri = baseURL.toExternalForm() + "rest"; + System.out.println("uri = " + uri); + WebTarget echoEndpointTarget = ClientBuilder.newClient().target(uri); + Response response = echoEndpointTarget.request(TEXT_PLAIN).get(); + Assert.assertEquals(response.getStatus(), HttpURLConnection.HTTP_OK); + } + + @WebServlet(urlPatterns = "/servlet") + public static class TestServlet extends HttpServlet { + @Override + protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException { + resp.getWriter().write(CDI.current().select(HelloBean.class).get().hello()); + } + } + + @ApplicationPath("/rest") + public static class RestApplication extends javax.ws.rs.core.Application { + + } + + @RequestScoped + @Path("/") + public static class TestEndpoint { + @Inject + HelloBean helloBean; + + @GET + public String hello() { + return helloBean.hello(); + } + } + + @ApplicationScoped + public static class HelloBean { + public String hello() { + return "hello"; + } + } +} diff --git a/tck/src/test/java/io/smallrye/opentracing/arquillian/DeploymentProcessor.java b/tck/src/test/java/io/smallrye/opentracing/arquillian/DeploymentProcessor.java index c37bac9..1a11267 100644 --- a/tck/src/test/java/io/smallrye/opentracing/arquillian/DeploymentProcessor.java +++ b/tck/src/test/java/io/smallrye/opentracing/arquillian/DeploymentProcessor.java @@ -2,80 +2,39 @@ import java.io.File; -import javax.enterprise.inject.spi.Extension; -import javax.servlet.ServletContainerInitializer; -import javax.ws.rs.ext.Providers; - import org.eclipse.microprofile.opentracing.ClientTracingRegistrarProvider; import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor; import org.jboss.arquillian.test.spi.TestClass; import org.jboss.shrinkwrap.api.Archive; -import org.jboss.shrinkwrap.api.ShrinkWrap; -import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.resolver.api.maven.Maven; -import org.jboss.weld.environment.deployment.discovery.BeanArchiveHandler; -import io.smallrye.opentracing.ExceptionMapper; -import io.smallrye.opentracing.OpenTracingAsyncInterceptor; -import io.smallrye.opentracing.OpenTracingAsyncInterceptorFactory; -import io.smallrye.opentracing.OpenTracingCDIExtension; import io.smallrye.opentracing.ResteasyClientTracingRegistrarProvider; import io.smallrye.opentracing.ServletContextTracingInstaller; -import io.smallrye.opentracing.SmallRyeRestClientListener; import io.smallrye.opentracing.TracerProducer; /** * @author Pavol Loffay */ public class DeploymentProcessor implements ApplicationArchiveProcessor { - @Override public void process(Archive archive, TestClass testClass) { if (archive instanceof WebArchive) { - JavaArchive extensionsJar = ShrinkWrap.create(JavaArchive.class, "extension.jar"); - extensionsJar.addAsServiceProvider(Providers.class, ExceptionMapper.class); - extensionsJar.addClass(ExceptionMapper.class); - extensionsJar.addAsServiceProvider(ClientTracingRegistrarProvider.class, - ResteasyClientTracingRegistrarProvider.class); - extensionsJar.addClasses(ResteasyClientTracingRegistrarProvider.class); - // extensionsJar.addAsServiceProvider(RestClientListener.class, SmallRyeRestClientListener.class); - extensionsJar.addClass(SmallRyeRestClientListener.class); - extensionsJar.addClass(OpenTracingAsyncInterceptorFactory.class); - extensionsJar.addClass(OpenTracingAsyncInterceptor.class); - extensionsJar.addPackages(true, "io.opentracing"); - - // install CDI extensions - extensionsJar.addAsServiceProvider(Extension.class, OpenTracingCDIExtension.class); - extensionsJar.addClasses(TracerProducer.class); - extensionsJar.addClasses(OpenTracingCDIExtension.class); - - WebArchive war = WebArchive.class.cast(archive); - war.addAsLibraries(extensionsJar); - - // install tracing filters + WebArchive war = (WebArchive) archive; war.addClass(ServletContextTracingInstaller.class); - - // Workaround for RESTEASY-1922 - war.addClass(FixedResteasyServletInitializer.class); - war.addAsServiceProvider(ServletContainerInitializer.class, FixedResteasyServletInitializer.class); - war.addClass(SmallRyeBeanArchiveHandler.class); - war.addAsServiceProvider(BeanArchiveHandler.class, SmallRyeBeanArchiveHandler.class); + war.addClass(TracerProducer.class); + war.addAsServiceProvider(ClientTracingRegistrarProvider.class, ResteasyClientTracingRegistrarProvider.class); String[] deps = { - "io.opentracing:opentracing-api", - "io.smallrye:smallrye-opentracing", - "org.jboss.resteasy:resteasy-client-microprofile", - "org.jboss.resteasy:resteasy-client", - "org.jboss.resteasy:resteasy-json-binding-provider", + "org.jboss.resteasy:resteasy-servlet-initializer", "org.jboss.resteasy:resteasy-cdi", - "org.jboss.weld.servlet:weld-servlet-core", - "io.smallrye.config:smallrye-config", + "org.jboss.resteasy:resteasy-json-binding-provider", + "io.smallrye:smallrye-opentracing" }; File[] dependencies = Maven.resolver() .loadPomFromFile(new File("pom.xml")) .resolve(deps) - .withTransitivity() + .withoutTransitivity() .asFile(); war.addAsLibraries(dependencies); System.out.println(war.toString(true)); diff --git a/tck/src/test/java/io/smallrye/opentracing/arquillian/FixedResteasyServletInitializer.java b/tck/src/test/java/io/smallrye/opentracing/arquillian/FixedResteasyServletInitializer.java deleted file mode 100644 index 5a06bfd..0000000 --- a/tck/src/test/java/io/smallrye/opentracing/arquillian/FixedResteasyServletInitializer.java +++ /dev/null @@ -1,146 +0,0 @@ -package io.smallrye.opentracing.arquillian; - -import java.util.HashSet; -import java.util.Set; - -import javax.servlet.ServletContainerInitializer; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRegistration; -import javax.servlet.annotation.HandlesTypes; -import javax.ws.rs.ApplicationPath; -import javax.ws.rs.Path; -import javax.ws.rs.core.Application; -import javax.ws.rs.ext.Provider; - -import org.jboss.resteasy.core.AsynchronousDispatcher; -import org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher; -import org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters; - -/** - * This is a fixed replacement for ResteasyServletInitializer.java. - * See also RESTEASY-1922. - */ -@HandlesTypes({ Application.class, Path.class, Provider.class }) -public class FixedResteasyServletInitializer implements ServletContainerInitializer { - - final static Set IGNORED_PACKAGES = new HashSet(); - - static { - IGNORED_PACKAGES.add(AsynchronousDispatcher.class.getPackage().getName()); - } - - @Override - public void onStartup(Set> classes, ServletContext servletContext) throws ServletException { - if (classes == null || classes.size() == 0) - return; - for (ServletRegistration reg : servletContext.getServletRegistrations().values()) { - if (reg.getInitParameter("javax.ws.rs.Application") != null) { - return; // there's already a servlet mapping, do nothing - } - } - - Set> appClasses = new HashSet>(); - Set> providers = new HashSet>(); - Set> resources = new HashSet>(); - - for (Class clazz : classes) { - // FIXED: Ignore client proxy interfaces - if (clazz.isInterface() || IGNORED_PACKAGES.contains(clazz.getPackage().getName())) - continue; - if (clazz.isAnnotationPresent(Path.class)) { - resources.add(clazz); - } else if (clazz.isAnnotationPresent(Provider.class)) { - providers.add(clazz); - } else { - appClasses.add(clazz); - } - } - if (appClasses.size() == 0 && resources.size() == 0) - return; - - if (appClasses.size() == 0) { - // todo make sure we can do this on all servlet containers - // handleNoApplicationClass(providers, resources, servletContext); - return; - } - - for (Class app : appClasses) { - register(app, providers, resources, servletContext); - } - } - - protected void handleNoApplicationClass(Set> providers, Set> resources, ServletContext servletContext) { - ServletRegistration defaultApp = null; - for (ServletRegistration reg : servletContext.getServletRegistrations().values()) { - if (reg.getName().equals(Application.class.getName())) { - defaultApp = reg; - } - } - if (defaultApp == null) - return; - throw new IllegalStateException("Default application not implemented yet"); - - } - - protected void register(Class applicationClass, Set> providers, Set> resources, - ServletContext servletContext) { - ApplicationPath path = applicationClass.getAnnotation(ApplicationPath.class); - if (path == null) { - // todo we don't support this yet, i'm not sure if partial deployments are supported in all servlet containers - return; - } - ServletRegistration.Dynamic reg = servletContext.addServlet(applicationClass.getName(), HttpServlet30Dispatcher.class); - reg.setLoadOnStartup(1); - reg.setAsyncSupported(true); - reg.setInitParameter("javax.ws.rs.Application", applicationClass.getName()); - - if (path != null) { - String mapping = path.value(); - if (!mapping.startsWith("/")) - mapping = "/" + mapping; - String prefix = mapping; - if (!prefix.equals("/") && prefix.endsWith("/")) - prefix = prefix.substring(0, prefix.length() - 1); - if (!mapping.endsWith("/*")) { - if (mapping.endsWith("/")) - mapping += "*"; - else - mapping += "/*"; - } - // resteasy.servlet.mapping.prefix - reg.setInitParameter("resteasy.servlet.mapping.prefix", prefix); - reg.addMapping(mapping); - } - - if (resources.size() > 0) { - StringBuilder builder = new StringBuilder(); - boolean first = true; - for (Class resource : resources) { - if (first) { - first = false; - } else { - builder.append(","); - } - - builder.append(resource.getName()); - } - reg.setInitParameter(ResteasyContextParameters.RESTEASY_SCANNED_RESOURCES, builder.toString()); - } - if (providers.size() > 0) { - StringBuilder builder = new StringBuilder(); - boolean first = true; - for (Class provider : providers) { - if (first) { - first = false; - } else { - builder.append(","); - } - builder.append(provider.getName()); - } - reg.setInitParameter(ResteasyContextParameters.RESTEASY_SCANNED_PROVIDERS, builder.toString()); - } - - } -} diff --git a/tck/src/test/java/io/smallrye/opentracing/arquillian/SmallRyeBeanArchiveHandler.java b/tck/src/test/java/io/smallrye/opentracing/arquillian/SmallRyeBeanArchiveHandler.java deleted file mode 100644 index f8af73e..0000000 --- a/tck/src/test/java/io/smallrye/opentracing/arquillian/SmallRyeBeanArchiveHandler.java +++ /dev/null @@ -1,59 +0,0 @@ -package io.smallrye.opentracing.arquillian; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; - -import javax.annotation.Priority; - -import org.jboss.weld.environment.deployment.discovery.BeanArchiveBuilder; -import org.jboss.weld.environment.deployment.discovery.BeanArchiveHandler; -import org.jboss.weld.environment.util.Files; - -/** - * @author Pavol Loffay - */ -@Priority(1) -public class SmallRyeBeanArchiveHandler implements BeanArchiveHandler { - - @Override - public BeanArchiveBuilder handle(String beanArchiveReference) { - - // An external form of a wildfly beans.xml URL will be something like: - // vfs:/content/_DEFAULT___DEFAULT__1f4a3572-fc97-41f5-8fed-0e7e7f7895df.war/WEB-INF/lib/4e0a1b50-4a74-429d-b519-9eedcac11046.jar/META-INF/beans.xml - beanArchiveReference = beanArchiveReference.substring(0, beanArchiveReference.lastIndexOf("/META-INF/beans.xml")); - - if (beanArchiveReference.endsWith(".war")) { - // We only use this handler for libraries - WEB-INF classes are handled by ServletContextBeanArchiveHandler - return null; - } - - try { - URL url = new URL(beanArchiveReference); - try (ZipInputStream in = openStream(url)) { - BeanArchiveBuilder builder = new BeanArchiveBuilder(); - handleLibrary(url, in, builder); - return builder; - } - } catch (IOException e) { - throw new IllegalStateException(e); - } - } - - ZipInputStream openStream(URL url) throws IOException { - InputStream in = url.openStream(); - return (in instanceof ZipInputStream) ? (ZipInputStream) in : new ZipInputStream(in); - } - - private void handleLibrary(URL url, ZipInputStream zip, BeanArchiveBuilder builder) throws IOException { - ZipEntry entry = null; - while ((entry = zip.getNextEntry()) != null) { - if (Files.isClass(entry.getName())) { - builder.addClass(Files.filenameToClassname(entry.getName())); - } - } - } - -} diff --git a/tck/src/test/resources/arquillian.xml b/tck/src/test/resources/arquillian.xml index ea55cc9..93ef503 100644 --- a/tck/src/test/resources/arquillian.xml +++ b/tck/src/test/resources/arquillian.xml @@ -1,12 +1,15 @@ - - - - + + - - + diff --git a/tck/src/test/tck-suite.xml b/tck/src/test/tck-suite.xml index 97b91bc..677719a 100644 --- a/tck/src/test/tck-suite.xml +++ b/tck/src/test/tck-suite.xml @@ -1,3 +1,4 @@ +