This is an automated email from the ASF dual-hosted git repository. dblevins pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomee.git
commit d44266970479c3c30035545b2ca2f7f19553ac5f Author: David Blevins <[email protected]> AuthorDate: Sun Feb 20 16:18:50 2022 -0500 TOMEE-3844 Improve logging for JAX-RS application deployment --- .../jaxrs/applogging/ApplicationLoggingTest.java | 10 +------ .../openejb/server/cxf/rs/CxfRsHttpListener.java | 34 +++++++++++++++++----- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/itests/jaxrs/src/test/java/org/apache/tomee/itests/jaxrs/applogging/ApplicationLoggingTest.java b/itests/jaxrs/src/test/java/org/apache/tomee/itests/jaxrs/applogging/ApplicationLoggingTest.java index 4d02e89..c4b16ba 100644 --- a/itests/jaxrs/src/test/java/org/apache/tomee/itests/jaxrs/applogging/ApplicationLoggingTest.java +++ b/itests/jaxrs/src/test/java/org/apache/tomee/itests/jaxrs/applogging/ApplicationLoggingTest.java @@ -79,13 +79,6 @@ public class ApplicationLoggingTest { "Resource{clazz=org.apache.tomee.itests.jaxrs.applogging.TriangleResource, discovered=false, singleton=false}", normalize(join)); } - /** - * This test shows two bugs: - * - singletons show up as discovered when they were explicitly configured - * - * @throws Exception - */ - @Ignore @Test public void getSingletons() throws Exception { @@ -98,13 +91,12 @@ public class ApplicationLoggingTest { .add(AnnotatedWriter.class) .asJar()) .watch("org.apache.openejb.server.cxf.rs.CxfRsHttpListener.logApplication ", "\n", output::add) -// .debug(5005) .build(); Collections.sort(output); final String join = Join.join("\n", output); - assertEquals("Application{path='http://localhost:0/test/red', class=org.apache.tomee.itests.jaxrs.applogging.GetSingletons, resources=2, providers=2, invalids=0}\n" + + assertEquals("Application{path='http://localhost:0/test/red', class=org.apache.tomee.itests.jaxrs.applogging.GetSingletons, resources=2, providers=1, invalids=0}\n" + "Provider{clazz=org.apache.tomee.itests.jaxrs.applogging.AnnotatedWriter, discovered=false, singleton=true}\n" + "Resource{clazz=org.apache.tomee.itests.jaxrs.applogging.SquareResource, discovered=false, singleton=true}\n" + "Resource{clazz=org.apache.tomee.itests.jaxrs.applogging.TriangleResource, discovered=false, singleton=true}", normalize(join)); diff --git a/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java b/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java index dd9580c..04016ff 100644 --- a/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java +++ b/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java @@ -848,17 +848,37 @@ public class CxfRsHttpListener implements RsHttpListener { declaredSingletons.addAll(application.getSingletons()); } + for (final Object declaredSingleton : new ArrayList<>(declaredSingletons)) { + if (declaredSingleton instanceof Class) { + continue; + } + declaredSingletons.add(declaredSingleton.getClass()); + } + + final Set<Class<?>> seen = new HashSet<>(); for (final Object additionalProvider : additionalProviders) { - if (additionalProvider instanceof Class) { - final boolean discovered = !declaredSingletons.contains(additionalProvider); + final Class<?> providerClass = (additionalProvider instanceof Class) ? (Class<?>) additionalProvider : additionalProvider.getClass(); + + // If we have already seen this provider class, skip it + // For some reason we add a duplicate version, one of the instance and one of the class + if (!seen.add(providerClass)) continue; + + if (declaredSingletons.contains(providerClass)) { + + applicationData.addProvider(false, providerClass, additionalProvider); + + } else if (declaredClasses.contains(providerClass)) { + + applicationData.addProvider(false, providerClass, null); + + } else if (additionalProvider instanceof Class) { - applicationData.addProvider(discovered, (Class<?>) additionalProvider, null); + applicationData.addProvider(true, providerClass, null); } else { - final boolean discovered = !declaredSingletons.contains(additionalProvider); - applicationData.addProvider(discovered, additionalProvider.getClass(), null); + applicationData.addProvider(true, providerClass, additionalProvider); } } @@ -881,7 +901,7 @@ public class CxfRsHttpListener implements RsHttpListener { } else { - final boolean discovered = !declaredClasses.contains(clazz); + final boolean discovered = !(declaredClasses.contains(clazz) || declaredSingletons.contains(clazz)); applicationData.addResource(discovered, clazz, null); @@ -894,7 +914,7 @@ public class CxfRsHttpListener implements RsHttpListener { final Class<?> clazz = realClass(singleton.getClass()); - final boolean configured = declaredClasses.contains(clazz) || declaredClasses.contains(singleton.getClass()); + final boolean configured = declaredSingletons.contains(clazz) || declaredSingletons.contains(singleton.getClass()); applicationData.addResource(!configured, clazz, singleton); }
