You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2011/11/01 14:16:30 UTC

svn commit: r1195981 - in /sling/trunk/bundles/jcr/resource/src: main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java test/java/org/apache/sling/jcr/resource/internal/JcrResourceResolverTest.java

Author: fmeschbe
Date: Tue Nov  1 13:16:30 2011
New Revision: 1195981

URL: http://svn.apache.org/viewvc?rev=1195981&view=rev
Log:
SLING-2258 Apply patch by Antonio Sanso (thanks alot). I have slightly modified the patch to check for the suffix "/jcr:content" to prevent false positives for names like "xyzjcr:content" (however unlikely that might be)

Modified:
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java
    sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrResourceResolverTest.java

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java?rev=1195981&r1=1195980&r2=1195981&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java Tue Nov  1 13:16:30 2011
@@ -95,6 +95,12 @@ public class JcrResourceResolver
 
     public static final String PROP_REDIRECT_EXTERNAL_STATUS = "sling:status";
 
+    // The suffix of a resource being a content node of some parent
+    // such as nt:file. The slash is included to prevent false
+    // positives for the String.endsWith check for names like
+    // "xyzjcr:content"
+    private static final String JCR_CONTENT_LEAF = "/jcr:content";
+
     @SuppressWarnings("deprecation")
     private static final String DEFAULT_QUERY_LANGUAGE = Query.XPATH;
 
@@ -645,7 +651,7 @@ public class JcrResourceResolver
             String path = res.getPath();
             while ( path != null ) {
                 String alias = null;
-                if ( current != null && !path.endsWith("jcr:content")) {
+                if ( current != null && !path.endsWith(JCR_CONTENT_LEAF)) {
                     alias = getProperty(current, PROP_ALIAS);
                 }
                 if (alias == null || alias.length() == 0) {
@@ -1195,16 +1201,18 @@ public class JcrResourceResolver
         Iterator<Resource> children = listChildren(parent);
         while (children.hasNext()) {
             child = children.next();
-            String[] aliases = getProperty(child, PROP_ALIAS, String[].class);
-            if (aliases != null) {
-                for (String alias : aliases) {
-                    if (childName.equals(alias)) {
-                        LOGGER.debug(
-                            "getChildInternal: Found Resource {} with alias {} to use",
-                            child, childName);
-                        return child;
-                    }
-                }
+            if (!child.getPath().endsWith(JCR_CONTENT_LEAF)){
+            	String[] aliases = getProperty(child, PROP_ALIAS, String[].class);
+            	if (aliases != null) {
+            		for (String alias : aliases) {
+            			if (childName.equals(alias)) {
+            				LOGGER.debug(
+            						"getChildInternal: Found Resource {} with alias {} to use",
+            						child, childName);
+            				return child;
+            			}
+            		}
+            	}
             }
         }
 

Modified: sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrResourceResolverTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrResourceResolverTest.java?rev=1195981&r1=1195980&r2=1195981&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrResourceResolverTest.java (original)
+++ sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrResourceResolverTest.java Tue Nov  1 13:16:30 2011
@@ -1304,6 +1304,19 @@ public class JcrResourceResolverTest ext
 
         assertNotNull(res.adaptTo(Node.class));
         assertTrue(rootNode.isSame(res.adaptTo(Node.class)));
+        
+        path = ResourceUtil.normalize(ResourceUtil.getParent(rootPath)
+                + "/" + alias + "/" + alias + ".print.html");
+        res = resResolver.resolve(request, path);
+        assertEquals("GET request resolution does not go up the path",
+                Resource.RESOURCE_TYPE_NON_EXISTING, res.getResourceType());
+        
+        Node child = rootNode.addNode("child", "nt:unstructured");
+        child.setProperty(JcrResourceResolver.PROP_ALIAS, alias);
+        session.save();
+        
+        res = resResolver.resolve(request, path);   
+        assertEquals(child.getPath(), res.getPath());
     }
 
     public void testResolveVanityPath() throws Exception {