You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Felix Meschberger (JIRA)" <ji...@apache.org> on 2009/09/23 15:45:16 UTC

[jira] Issue Comment Edited: (SLING-864) Parse path info for NonExistingResource

    [ https://issues.apache.org/jira/browse/SLING-864?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12758699#action_12758699 ] 

Felix Meschberger edited comment on SLING-864 at 9/23/09 6:43 AM:
------------------------------------------------------------------

Following up to the discussion at [1] and agreeing with Bertrands proposal here is a simple patch to set the resource metadata where it should be done:

Index: JcrResourceResolver2.java
===================================================================
--- JcrResourceResolver2.java	(Revision 818098)
+++ JcrResourceResolver2.java	(Arbeitskopie)
@@ -231,10 +231,21 @@
 
         // if no resource has been found, use a NonExistingResource
         if (res == null) {
+            String resourcePath = ensureAbsPath(realPathList[0]);
             log.debug(
                 "resolve: Path {} does not resolve, returning NonExistingResource at {}",
-                absPath, realPathList[0]);
-            res = new NonExistingResource(this, ensureAbsPath(realPathList[0]));
+                absPath, resourcePath);
+            res = new NonExistingResource(this, resourcePath);
+
+            // SLING-864: if the path contains a dot we assume this to be
+            // the start for any selectors, extension, suffix, which may be
+            // used for further request processing.
+            int index = resourcePath.indexOf('.');
+            if (index != -1) {
+                res.getResourceMetadata().setResolutionPathInfo(
+                    resourcePath.substring(index));
+            }
+
         } else {
             log.debug("resolve: Path {} resolves to Resource {}", absPath, res);
         }



[1] http://markmail.org/thread/4kqlegvnfq44p6qw

      was (Author: fmeschbe):
    Following up to the discussion at [1] and agreeing with Bertrands proposal here is a simple patch to set the resource metadata where it should be done:

Index: JcrResourceResolver2.java
===================================================================
--- JcrResourceResolver2.java	(Revision 818098)
+++ JcrResourceResolver2.java	(Arbeitskopie)
@@ -231,10 +231,21 @@
 
         // if no resource has been found, use a NonExistingResource
         if (res == null) {
+            String resourcePath = ensureAbsPath(realPathList[0]);
             log.debug(
                 "resolve: Path {} does not resolve, returning NonExistingResource at {}",
-                absPath, realPathList[0]);
-            res = new NonExistingResource(this, ensureAbsPath(realPathList[0]));
+                absPath, resourcePath);
+            res = new NonExistingResource(this, resourcePath);
+
+            // SLING-864: if the path contains a dot we assume this to be
+            // the start for any selectors, extension, suffix, which may be
+            // used for further request processing.
+            int index = resourcePath.indexOf('.');
+            if (index != -1) {
+                res.getResourceMetadata().setResolutionPathInfo(
+                    resourcePath.substring(index));
+            }
+
         } else {
             log.debug("resolve: Path {} resolves to Resource {}", absPath, res);
         }


  
> Parse path info for NonExistingResource
> ---------------------------------------
>
>                 Key: SLING-864
>                 URL: https://issues.apache.org/jira/browse/SLING-864
>             Project: Sling
>          Issue Type: Improvement
>          Components: API
>    Affects Versions: API 2.0.2
>            Reporter: Alexander Klimetschek
>         Attachments: SLING-nonexisting-pathinfo.patch
>
>
> As proposed on the mailing list http://markmail.org/message/52m32zh36ewo4xl2, it would be helpful if the sling:nonexisting resource type would support selectors and extensions similar to normal resources.
> Currently you can only register one servlet per HTTP method for nonexisting resources. For example, this makes it impossible to add multiple importer servlets, that import different file formats into the repository at non-existing locations (they would create the necessary path). It would be good to register them on an extension-basis, eg. to do a POST to /content/calendar.ics for an icalendar file, a POST to /content/i18n.xliff for an xliff file, etc., with one servlet handling each import.
> Important to note is that until now, the contract of the NonExistingResource case was that sling did not try to parse anything and simply return the full URL as the resource path - even if it contains dots at the end. Selectors and extension in the request path info were always null. The sling post servlet for example relies on that by using the path to create a real resource there. Since this is already part of the released API, changing that contract is not really an option.
> In a f2f discussion with Felix and Carsten we came up with the solution to keep the full path for the nonexisting resource path but additionally try to parse the selectors and extension. This will make the script resolution work just as for existing resource while not breaking the existing contract.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.