This is an automated email from the ASF dual-hosted git repository.

pauls pushed a commit to branch issues/SLING-9714
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-resolver.git

commit b3e8299414aea4e8cc9bb380b54d96363b34c859
Author: Karl Pauls <[email protected]>
AuthorDate: Tue Sep 1 17:27:53 2020 +0200

    SLING-9714: Ignore default resource super type for servlet registrations.
    
    Co-authored-by: Radu Cotescu [email protected]
---
 .../internal/resource/ServletResource.java         |  6 ++--
 .../resource/ServletResourceProviderFactory.java   |  4 ++-
 .../ServletResourceProviderCreateTest.java         | 37 +++++++++++++++++++---
 3 files changed, 38 insertions(+), 9 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResource.java
 
b/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResource.java
index ab63f8b..883e40f 100644
--- 
a/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResource.java
+++ 
b/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResource.java
@@ -35,6 +35,8 @@ import 
org.apache.sling.servlets.resolver.bundle.tracker.internal.BundledScriptS
 
 public class ServletResource extends AbstractResource {
 
+    public static final String DEFAULT_RESOURCE_SUPER_TYPE = 
"sling/bundle/resource";
+
     private final ResourceResolver resourceResolver;
 
     private final Servlet servlet;
@@ -60,7 +62,7 @@ public class ServletResource extends AbstractResource {
         this.servlet = servlet;
         this.path = path;
         this.resourceType = 
ServletResourceProviderFactory.ensureServletNameExtension(path);
-        this.resourceSuperType = StringUtils.isEmpty(resourceSuperType) ? 
"sling/bundle/resource" : resourceSuperType;
+        this.resourceSuperType = StringUtils.isEmpty(resourceSuperType) ? 
DEFAULT_RESOURCE_SUPER_TYPE : resourceSuperType;
         this.metadata = new ResourceMetadata();
         this.metadata.put("sling.servlet.resource", "true");
     }
@@ -86,8 +88,6 @@ public class ServletResource extends AbstractResource {
         return resourceType;
     }
 
-    /** Servlet Resources always returns "sling/bundle/resource" as
-     * the super type. */
     @Override
     public String getResourceSuperType() {
         return resourceSuperType;
diff --git 
a/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java
 
b/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java
index 629d25b..946d7b6 100644
--- 
a/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java
+++ 
b/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java
@@ -36,6 +36,8 @@ import javax.servlet.Servlet;
 
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.api.servlets.HttpConstants;
 import org.apache.sling.commons.osgi.PropertiesUtil;
@@ -149,7 +151,7 @@ public class ServletResourceProviderFactory {
         }
         String resourceSuperType = 
PropertiesUtil.toString(ref.getProperty(SLING_SERVLET_RESOURCE_SUPER_TYPE), 
null);
         Set<String> resourceSuperTypeMarkers = new HashSet<>();
-        if (StringUtils.isNotEmpty(resourceSuperType)) {
+        if (StringUtils.isNotEmpty(resourceSuperType) && 
!ServletResource.DEFAULT_RESOURCE_SUPER_TYPE.equals(resourceSuperType)) {
             for (String rt : 
PropertiesUtil.toStringArray(ref.getProperty(SLING_SERVLET_RESOURCE_TYPES))) {
                 if (!rt.startsWith("/")) {
                     rt = 
getPrefix(ref).concat(ResourceUtil.resourceTypeToPath(rt));
diff --git 
a/src/test/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderCreateTest.java
 
b/src/test/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderCreateTest.java
index a1c25e5..8b11b6c 100644
--- 
a/src/test/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderCreateTest.java
+++ 
b/src/test/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderCreateTest.java
@@ -18,11 +18,6 @@
  */
 package org.apache.sling.servlets.resolver.internal.resource;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
 import java.util.Collections;
 import java.util.Set;
 
@@ -42,6 +37,11 @@ import org.mockito.Mockito;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
 public class ServletResourceProviderCreateTest {
 
     private static final Servlet TEST_SERVLET = new GenericServlet() {
@@ -213,4 +213,31 @@ public class ServletResourceProviderCreateTest {
         assertEquals(TEST_SERVLET, servletResource.adaptTo(Servlet.class));
     }
 
+    @Test
+    public void testCreateWithDefaultResourceSuperType() {
+        @SuppressWarnings("unchecked")
+        final ServiceReference<Servlet> msr = 
Mockito.mock(ServiceReference.class);
+        Mockito.when(msr.getProperty(Constants.SERVICE_ID)).thenReturn(1L);
+        
Mockito.when(msr.getProperty(ServletResolverConstants.SLING_SERVLET_RESOURCE_TYPES)).thenReturn(RES_TYPE);
+        
Mockito.when(msr.getProperty(ServletResolverConstants.SLING_SERVLET_SELECTORS)).thenReturn("sel");
+        
Mockito.when(msr.getProperty(ServletResolverConstants.SLING_SERVLET_EXTENSIONS)).thenReturn(new
 String[] {"html"});
+        
Mockito.when(msr.getProperty(ServletResolverConstants.SLING_SERVLET_RESOURCE_SUPER_TYPE))
+                .thenReturn(new 
String[]{ServletResource.DEFAULT_RESOURCE_SUPER_TYPE});
+        final ServletResourceProvider srp = factory.create(msr, TEST_SERVLET);
+        final Set<String> paths = srp.getServletPaths();
+        assertEquals(1, paths.size());
+        assertTrue(paths.contains(ROOT + RES_TYPE_PATH + "/sel.html" + 
ServletResourceProviderFactory.SERVLET_PATH_EXTENSION));
+        @SuppressWarnings("unchecked")
+        Resource superTypeMarkingResource = 
srp.getResource(Mockito.mock(ResolveContext.class), "/apps/sling/sample",
+                Mockito.mock(ResourceContext.class), 
Mockito.mock(Resource.class));
+        assertNull(superTypeMarkingResource);
+
+        @SuppressWarnings("unchecked")
+        Resource servletResource = 
srp.getResource(Mockito.mock(ResolveContext.class), 
"/apps/sling/sample/sel.html.servlet",
+                Mockito.mock(ResourceContext.class), 
Mockito.mock(Resource.class));
+        assertNotNull(servletResource);
+        assertEquals(ServletResource.DEFAULT_RESOURCE_SUPER_TYPE, 
servletResource.getResourceSuperType());
+        assertEquals(TEST_SERVLET, servletResource.adaptTo(Servlet.class));
+    }
+
 }

Reply via email to