SLING-11969 a few minor improvements to make the limits more explicit (#10)

diff --git a/src/main/java/org/apache/sling/models/jacksonexporter/impl/ConfigurableSerializationModuleProvider.java b/src/main/java/org/apache/sling/models/jacksonexporter/impl/ConfigurableSerializationModuleProvider.java
index d9cf2b9..afd4b40 100644
--- a/src/main/java/org/apache/sling/models/jacksonexporter/impl/ConfigurableSerializationModuleProvider.java
+++ b/src/main/java/org/apache/sling/models/jacksonexporter/impl/ConfigurableSerializationModuleProvider.java
@@ -26,6 +26,8 @@
 import org.osgi.service.metatype.annotations.AttributeDefinition;
 import org.osgi.service.metatype.annotations.Designate;
 import org.osgi.service.metatype.annotations.ObjectClassDefinition;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.fasterxml.jackson.databind.Module;
 import com.fasterxml.jackson.databind.module.SimpleModule;
@@ -39,36 +41,48 @@
     static @interface Config {
 
         @AttributeDefinition(name ="disable serialization",
-                description = "provide a list of the full classnames which should not get serialized")
+                description = "provide a list of the full classnames which should not get serialized; currently only \"" + RESOURCERESOLVER + "\" is supported")
         String[] disable_serialization() default {};
         
         @AttributeDefinition(name ="warn on serialization",
-                description = "provide a list of the full classnames for which a warning should be written when serialized")
+                description = "provide a list of the full classnames for which a warning should be written when serialized; currently only \"" + RESOURCERESOLVER + "\" is supported")
         String[] enable_warn_logging() default {ConfigurableSerializationModuleProvider.RESOURCERESOLVER};
         
 
     }
    
+    private static final Logger LOG = LoggerFactory.getLogger(ConfigurableSerializationModuleProvider.class);
     protected static final String RESOURCERESOLVER = "org.apache.sling.api.resource.ResourceResolver";
     
+    boolean ignoringRR = false;
     
     SimpleModule moduleInstance;
     
-    
-   
-    
     @Activate
     private void activate(Config config) {
         this.moduleInstance = new SimpleModule();
-        
-        // Currently only the Sling ResourceResolver is supported to be disabled, other classes tbd.
+
         List<String> disabled = Arrays.asList(config.disable_serialization());
         List<String> logging = Arrays.asList(config.enable_warn_logging());
         
-        if (disabled.contains(RESOURCERESOLVER)) {
-            moduleInstance.setMixInAnnotation(ResourceResolver.class, IgnoringResourceResolverMixin.class);
-        } else if (logging.contains(RESOURCERESOLVER)) {
-            moduleInstance.setMixInAnnotation(ResourceResolver.class, WarningResourceResolverMixin.class);
+        // Currently only the Sling ResourceResolver is supported
+        for (String type: disabled) {
+            if (RESOURCERESOLVER.equals(type)) {
+                moduleInstance.setMixInAnnotation(ResourceResolver.class, IgnoringResourceResolverMixin.class);
+                ignoringRR = true;
+            } else {
+                LOG.warn("Support to disable the serialization of type {} is not implemented", type);
+            }
+        }
+        
+        for (String type: logging) {
+            if (RESOURCERESOLVER.equals(type)) {
+                if (!ignoringRR) {
+                    moduleInstance.setMixInAnnotation(ResourceResolver.class, WarningResourceResolverMixin.class);
+                }
+            } else {
+                LOG.warn("Support to log any serialization of type {} is not implemented", type);
+            }
         }
     }
     
diff --git a/src/test/java/org/apache/sling/models/jacksonexporter/impl/JacksonExporterLimitSerializationTest.java b/src/test/java/org/apache/sling/models/jacksonexporter/impl/JacksonExporterLimitSerializationTest.java
index 016ccc9..3e9b944 100644
--- a/src/test/java/org/apache/sling/models/jacksonexporter/impl/JacksonExporterLimitSerializationTest.java
+++ b/src/test/java/org/apache/sling/models/jacksonexporter/impl/JacksonExporterLimitSerializationTest.java
@@ -18,9 +18,11 @@
  */
 package org.apache.sling.models.jacksonexporter.impl;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
@@ -30,6 +32,7 @@
 import org.apache.sling.api.resource.PersistenceException;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.models.factory.ExportException;
 import org.apache.sling.models.jacksonexporter.impl.example.PojoWithResourceResolver;
 import org.apache.sling.models.jacksonexporter.impl.util.LogCapture;
 import org.apache.sling.testing.mock.osgi.junit5.OsgiContext;
@@ -71,17 +74,40 @@
     @Test
     void testNotSerializingResourceResolverWhenDisabled() throws Exception {
         
+        LogCapture capture = new LogCapture(ConfigurableSerializationModuleProvider.class.getName(),false);
+        
         PojoWithResourceResolver pojo = new PojoWithResourceResolver("text",new EmptyResourceResolver());
         Map<String,Object> config = Collections.singletonMap("disable.serialization", ResourceResolver.class.getName());
         context.registerInjectActivateService(new ConfigurableSerializationModuleProvider(),config);
         
         JacksonExporter underTest = context.registerInjectActivateService(JacksonExporter.class);
         Map<String,String> options = Collections.emptyMap();
+
+        String expectedJson = "{\"msg\":\"text\"}";
+        assertEquals(expectedJson, underTest.export(pojo, String.class, options));
+        // no log is written in this case
+        assertEquals(0,capture.list.size());
+    }
+    
+    
+    @Test
+    void test_givenInvalidTypes_whenActivate_thenWarnLogStatements() throws ExportException {
+        LogCapture capture = new LogCapture(ConfigurableSerializationModuleProvider.class.getName(),false);
         
-        String json = underTest.export(pojo, String.class, options);
-        ObjectMapper mapper = new ObjectMapper();
-        JsonNode result = mapper.readTree(json);
-        assertTrue(result.path("resolver").isMissingNode());
+        Map<String,Object> config = new HashMap<>();
+        config.put("disable.serialization", "foo.bar.disable");
+        config.put("enable.warn.logging", "foo.bar.logging");
+        
+        context.registerInjectActivateService(new ConfigurableSerializationModuleProvider(),config);
+
+        assertTrue(capture.anyMatch(event -> {
+           return event.getFormattedMessage().equals("Support to disable the serialization of type foo.bar.disable is not implemented") && 
+                   event.getLevel().equals(Level.WARN);
+        }));
+        assertTrue(capture.anyMatch(event -> {
+            return event.getFormattedMessage().equals("Support to log any serialization of type foo.bar.logging is not implemented") && 
+                    event.getLevel().equals(Level.WARN);
+         }));
     }
     
     
@@ -90,181 +116,147 @@
      * when trying to export it with Jackson.
      */
     public class EmptyResourceResolver implements ResourceResolver {
-        
-//        public static final String SERIALIZED_STRING = "\"resolver\":{\"live\":false,\"userID\":null,\"searchPath\":null,\"propertyMap\":null,\"userID\":false}";
-        
 
         @Override
         public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public Resource resolve(HttpServletRequest request, String absPath) {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public Resource resolve(String absPath) {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public Resource resolve(HttpServletRequest request) {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public String map(String resourcePath) {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public String map(HttpServletRequest request, String resourcePath) {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public Resource getResource(String path) {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public Resource getResource(Resource base, String path) {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public String[] getSearchPath() {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public Iterator<Resource> listChildren(Resource parent) {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public Iterable<Resource> getChildren(Resource parent) {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public Iterator<Resource> findResources(String query, String language) {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public Iterator<Map<String, Object>> queryResources(String query, String language) {
-            // TODO Auto-generated method stub
             return null;
         }
 
 
         @Override
         public ResourceResolver clone(Map<String, Object> authenticationInfo) throws LoginException {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public boolean isLive() {
-            // TODO Auto-generated method stub
             return false;
         }
 
         @Override
         public void close() {
-            // TODO Auto-generated method stub
-            
+            // do nothing
         }
 
         @Override
         public String getUserID() {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public Iterator<String> getAttributeNames() {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public Object getAttribute(String name) {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public void delete(Resource resource) throws PersistenceException {
-            // TODO Auto-generated method stub
-            
+            // do nothing
         }
 
         @Override
         public Resource create(Resource parent, String name, Map<String, Object> properties)
                 throws PersistenceException {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public void revert() {
-            // TODO Auto-generated method stub
-            
+            // do nothing
         }
 
         @Override
         public void commit() throws PersistenceException {
-            // TODO Auto-generated method stub
-            
+            // do nothing
         }
 
         @Override
         public boolean hasChanges() {
-            // TODO Auto-generated method stub
             return false;
         }
 
         @Override
         public String getParentResourceType(Resource resource) {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public String getParentResourceType(String resourceType) {
-            // TODO Auto-generated method stub
             return null;
         }
 
         @Override
         public boolean isResourceType(Resource resource, String resourceType) {
-            // TODO Auto-generated method stub
             return false;
         }
 
         @Override
         public void refresh() {
-            // TODO Auto-generated method stub
-            
+            // do nothing
         }
-        
     }
-    
-    
 }