You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2020/04/24 09:59:48 UTC

[sling-org-apache-sling-servlets-resolver] branch issues/SLING-9365 updated: Remove servlet extensions from main scripts and adaptto servlets directly if they are provided by us.

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

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


The following commit(s) were added to refs/heads/issues/SLING-9365 by this push:
     new e2c3b19  Remove servlet extensions from main scripts and adaptto servlets directly if they are provided by us.
e2c3b19 is described below

commit e2c3b194d141ca3faf4f754e7fb6c3fa89b54269
Author: Karl Pauls <ka...@gmail.com>
AuthorDate: Fri Apr 24 11:59:32 2020 +0200

    Remove servlet extensions from main scripts and adaptto servlets directly if they are provided by us.
---
 .../apache/sling/servlets/resolver/internal/ScriptResource.java  | 9 ++++++---
 .../servlets/resolver/internal/ScriptResourceDecorator.java      | 3 ++-
 .../servlets/resolver/internal/resource/ServletResource.java     | 2 +-
 .../internal/resource/ServletResourceProviderFactory.java        | 8 ++++++--
 4 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResource.java b/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResource.java
index 0994f26..ff995bb 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResource.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResource.java
@@ -29,6 +29,7 @@ import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.api.scripting.SlingScript;
+import org.apache.sling.servlets.resolver.internal.resource.ServletResource;
 
 /**
  * ScriptResource is a resource wrapper of a resource fetched by a
@@ -100,9 +101,11 @@ public class ScriptResource extends AbstractResource {
     @Override
     public <AdapterType> AdapterType adaptTo(final Class<AdapterType> type) {
         if ( type == Servlet.class ) {
-            final Servlet s = (Servlet)super.adaptTo(type);
-            if ( s != null ) {
-                return (AdapterType)s;
+            if (! (this.getActiveResource() instanceof ServletResource)) {
+                final Servlet s = (Servlet) super.adaptTo(type);
+                if ( s != null ) {
+                    return (AdapterType)s;
+                }
             }
         } else if ( type == SlingScript.class ) {
             final SlingScript s = (SlingScript)super.adaptTo(type);
diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResourceDecorator.java b/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResourceDecorator.java
index e7ec555..b2827d0 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResourceDecorator.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResourceDecorator.java
@@ -19,6 +19,7 @@
 package org.apache.sling.servlets.resolver.internal;
 
 import java.util.Iterator;
+import javax.servlet.Servlet;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.sling.api.resource.Resource;
@@ -71,7 +72,7 @@ public class ScriptResourceDecorator implements ResourceDecorator
             @Override
             public ResourceResolver getResourceResolver()
             {
-                return resource.getResourceResolver();
+                return new ScriptResourceResolver(resource.getResourceResolver(), () -> m_provider);
             }
 
             @Override
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 9ee7266..16d1c5a 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
@@ -31,7 +31,7 @@ import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.api.wrappers.ValueMapDecorator;
 
-class ServletResource extends AbstractResource {
+public class ServletResource extends AbstractResource {
 
     private final ResourceResolver resourceResolver;
 
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 e4f6995..7e61e31 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
@@ -34,6 +34,7 @@ import java.util.Set;
 
 import javax.servlet.Servlet;
 
+import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.api.servlets.HttpConstants;
@@ -220,8 +221,11 @@ public class ServletResourceProviderFactory {
                 // add the unmodified path
                 pathSet.add(path);
 
-                // ensure we have another entry which has the .servlet ext.
-                pathSet.add(ensureServletNameExtension(path));
+                if (StringUtils.isEmpty(FilenameUtils.getExtension(path))) {
+                    // ensure we have another entry which has the .servlet ext. if there wasn't one to begin with
+                    // Radu says: this will make sure that scripts are equal to servlets in the resolution process
+                    pathSet.add(ensureServletNameExtension(path));
+                }
             }
         }
     }