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);
         }

Reply via email to