You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by Branden Visser <br...@uwindsor.ca> on 2009/08/24 20:46:00 UTC
Script Resolution to non-existing resource
Hi all,
I'm trying to access a resource, then append a suffix to the URI. The
problem is that the GET servlet seems to be taking my full URI, and
returning a 404, even though there is a valid resource found in a
substring of the URL. Here is what I have:
URI: /content/portal/users/admin/pages/home/widgets/hello_world/widget.html
The idea is that /widget.html is the suffix (there is no 'widget'
resource!), and therefore Sling will attempt to execute hello_world.
hello_world has sling:resourceType="portal/widgets/url/url", and the
following file exists: /apps/portal/widgets/url/url/GET.esp.
However, when I hit the URI above, I get 404. My intention is to make
GET.esp create the resource "widget" below hello_world automatically if
it does not exist.
From what I understand from the URL decomposition and resource
resolution [1], since /widget does not exist, hello_world should be the
mapped resource, while /widget.html is the suffix. Correct?
Here is my request breakdown:
0 (2009-08-24 14:33:17) Starting Request Processing
0 (2009-08-24 14:33:17) Method=GET,
PathInfo=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html
0 (2009-08-24 14:33:17) Starting ResourceResolution
9 (2009-08-24 14:33:17)
URI=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html
resolves to Resource=NonExistingResource,
path=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html,
elapsed = 9ms
9 (2009-08-24 14:33:17) Resource Path Info: SlingRequestPathInfo:
path='/content/portal/users/admin/pages/home/widgets/hello_world/widget.html',
selectorString='null', extension='null', suffix='null'
9 (2009-08-24 14:33:17) Starting ServletResolution
9 (2009-08-24 14:33:17) Starting
resolveServlet(NonExistingResource,
path=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html)
9 (2009-08-24 14:33:17) Using servlet
org.apache.sling.servlets.get.DefaultGetServlet, elapsed = 0ms
9 (2009-08-24 14:33:17)
URI=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html
handled by Servlet=org.apache.sling.servlets.get.DefaultGetServlet,
elapsed = 0ms
9 (2009-08-24 14:33:17) Applying request filters
9 (2009-08-24 14:33:17) Calling filter:
org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter
9 (2009-08-24 14:33:17) Starting
org.apache.sling.servlets.get.DefaultGetServlet#0
9 (2009-08-24 14:33:17)
org.apache.sling.servlets.get.DefaultGetServlet#0, elapsed = 0ms
10 (2009-08-24 14:33:17) Starting handleError:status=404
10 (2009-08-24 14:33:17) Using handler Sling Default Error Handler
Servlet, elapsed = 0ms
10 (2009-08-24 14:33:17) Error handler finished, elapsed = 0ms
It's clear that the GetServlet is using the full URI, and not attempting
to parse a suffix.
Any ideas?
Thanks,
Branden
[1] http://sling.apache.org/site/sling-api.html
Re: Script Resolution to non-existing resource
Posted by Branden Visser <br...@uwindsor.ca>.
Hi Bertrand,
These tests don't demonstrate my problem. I think a variation of
testPathExtAndSuffix() would:
public void testPathAndSuffixOnly() {
RequestPathInfo p = new SlingRequestPathInfo(new MockResource(
"/some/path/here", "/some/suffix"));
assertEquals("/some/path/here", p.getResourcePath());
assertNull("Selectors are null",p.getSelectorString());
assertEquals(0, p.getSelectors().length);
assertEquals("Extension is null", p.getExtension());
assertEquals("/some/suffix", p.getSuffix());
}
Where /some/path/here is a resolvable resource, but both
/some/path/here/some and /some/path/here/some/suffix are non-existent.
Best,
Branden
Bertrand Delacretaz wrote:
> Hi Branden,
>
> 2009/8/24 <br...@uwindsor.ca>:
>> ...it contradicts the documentation under "URL Decomposition" at
>> http://sling.apache.org/site/sling-api.html, and even worse, makes my program
>> less elegant! :) In the Sling API, the resource is said to not need an extension
>> to register as the located resource....
>
> Could you have a look at the tests in [1], and see if they demonstrate
> your problem?
>
> If not I'd like to enhance them to clarify this.
>
> -Bertrand
>
> [1] http://svn.apache.org/repos/asf/sling/trunk/bundles/engine/src/test/java/org/apache/sling/engine/impl/request/SlingRequestPathInfoTest.java
> (just added a link to that class to sling-api.html BTW)
>
>
>
>> Is this by design, or is this a bug?
>>
>> Thanks,
>> ------------------------------------------
>> Branden Visser
>> LMS Application Programmer - Information Systems Services
>> Information Technology Services
>> University of Windsor
>>
>> -----Dominik Süß <do...@gmail.com> wrote: -----
>>
>> To: dev@sling.apache.org, branden@uwindsor.ca
>> From: Dominik Süß <do...@gmail.com>
>> Date: 08/24/2009 02:54PM
>> Subject: Re: Script Resolution to non-existing resource
>>
>> Hi Branden,
>>
>> it might help you to have a look at:
>> http://dev.day.com/microsling/content/blogs/main/cheatsheet.html
>>
>> There you can see how URLs are composed/decomposed. For your case
>>
>> /content/portal/users/admin/pages/home/widgets/hello_world.html/widget.html
>> might do the trick ;)
>>
>> HTH
>> Best regards,
>> Dominik
>>
>> On Mon, Aug 24, 2009 at 8:46 PM, Branden Visser <br...@uwindsor.ca> wrote:
>>
>> Hi all,
>>
>>
>> I'm trying to access a resource, then append a suffix to the URI. The problem is that the GET servlet seems to be taking my full URI, and returning a 404, even though there is a valid resource found in a substring of the URL. Here is what I have:
>>
>>
>>
>> URI: /content/portal/users/admin/pages/home/widgets/hello_world/widget.html
>>
>>
>> The idea is that /widget.html is the suffix (there is no 'widget' resource!), and therefore Sling will attempt to execute hello_world.
>>
>>
>> hello_world has sling:resourceType="portal/widgets/url/url", and the following file exists: /apps/portal/widgets/url/url/GET.esp.
>>
>>
>> However, when I hit the URI above, I get 404. My intention is to make GET.esp create the resource "widget" below hello_world automatically if it does not exist.
>>
>>
>> From what I understand from the URL decomposition and resource resolution [1], since /widget does not exist, hello_world should be the mapped resource, while /widget.html is the suffix. Correct?
>>
>>
>> Here is my request breakdown:
>>
>>
>> 0 (2009-08-24 14:33:17) Starting Request Processing
>>
>> 0 (2009-08-24 14:33:17) Method=GET, PathInfo=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html
>>
>> 0 (2009-08-24 14:33:17) Starting ResourceResolution
>>
>> 9 (2009-08-24 14:33:17) URI=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html resolves to Resource=NonExistingResource, path=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html, elapsed = 9ms
>>
>>
>> 9 (2009-08-24 14:33:17) Resource Path Info: SlingRequestPathInfo: path='/content/portal/users/admin/pages/home/widgets/hello_world/widget.html', selectorString='null', extension='null', suffix='null'
>>
>>
>> 9 (2009-08-24 14:33:17) Starting ServletResolution
>>
>> 9 (2009-08-24 14:33:17) Starting resolveServlet(NonExistingResource, path=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html)
>>
>> 9 (2009-08-24 14:33:17) Using servlet org.apache.sling.servlets.get.DefaultGetServlet, elapsed = 0ms
>>
>> 9 (2009-08-24 14:33:17) URI=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html handled by Servlet=org.apache.sling.servlets.get.DefaultGetServlet, elapsed = 0ms
>>
>> 9 (2009-08-24 14:33:17) Applying request filters
>>
>> 9 (2009-08-24 14:33:17) Calling filter: org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter
>>
>> 9 (2009-08-24 14:33:17) Starting org.apache.sling.servlets.get.DefaultGetServlet#0
>>
>> 9 (2009-08-24 14:33:17) org.apache.sling.servlets.get.DefaultGetServlet#0, elapsed = 0ms
>>
>> 10 (2009-08-24 14:33:17) Starting handleError:status=404
>>
>> 10 (2009-08-24 14:33:17) Using handler Sling Default Error Handler Servlet, elapsed = 0ms
>>
>> 10 (2009-08-24 14:33:17) Error handler finished, elapsed = 0ms
>>
>>
>> It's clear that the GetServlet is using the full URI, and not attempting to parse a suffix.
>>
>>
>> Any ideas?
>>
>>
>> Thanks,
>>
>>
>> Branden
>>
>>
>> [1] http://sling.apache.org/site/sling-api.html
>>
>>
>>
>>
Re: Script Resolution to non-existing resource
Posted by Bertrand Delacretaz <bd...@apache.org>.
Hi Branden,
2009/8/24 <br...@uwindsor.ca>:
> ...it contradicts the documentation under "URL Decomposition" at
> http://sling.apache.org/site/sling-api.html, and even worse, makes my program
> less elegant! :) In the Sling API, the resource is said to not need an extension
> to register as the located resource....
Could you have a look at the tests in [1], and see if they demonstrate
your problem?
If not I'd like to enhance them to clarify this.
-Bertrand
[1] http://svn.apache.org/repos/asf/sling/trunk/bundles/engine/src/test/java/org/apache/sling/engine/impl/request/SlingRequestPathInfoTest.java
(just added a link to that class to sling-api.html BTW)
>
> Is this by design, or is this a bug?
>
> Thanks,
> ------------------------------------------
> Branden Visser
> LMS Application Programmer - Information Systems Services
> Information Technology Services
> University of Windsor
>
> -----Dominik Süß <do...@gmail.com> wrote: -----
>
> To: dev@sling.apache.org, branden@uwindsor.ca
> From: Dominik Süß <do...@gmail.com>
> Date: 08/24/2009 02:54PM
> Subject: Re: Script Resolution to non-existing resource
>
> Hi Branden,
>
> it might help you to have a look at:
> http://dev.day.com/microsling/content/blogs/main/cheatsheet.html
>
> There you can see how URLs are composed/decomposed. For your case
>
> /content/portal/users/admin/pages/home/widgets/hello_world.html/widget.html
> might do the trick ;)
>
> HTH
> Best regards,
> Dominik
>
> On Mon, Aug 24, 2009 at 8:46 PM, Branden Visser <br...@uwindsor.ca> wrote:
>
> Hi all,
>
>
> I'm trying to access a resource, then append a suffix to the URI. The problem is that the GET servlet seems to be taking my full URI, and returning a 404, even though there is a valid resource found in a substring of the URL. Here is what I have:
>
>
>
> URI: /content/portal/users/admin/pages/home/widgets/hello_world/widget.html
>
>
> The idea is that /widget.html is the suffix (there is no 'widget' resource!), and therefore Sling will attempt to execute hello_world.
>
>
> hello_world has sling:resourceType="portal/widgets/url/url", and the following file exists: /apps/portal/widgets/url/url/GET.esp.
>
>
> However, when I hit the URI above, I get 404. My intention is to make GET.esp create the resource "widget" below hello_world automatically if it does not exist.
>
>
> From what I understand from the URL decomposition and resource resolution [1], since /widget does not exist, hello_world should be the mapped resource, while /widget.html is the suffix. Correct?
>
>
> Here is my request breakdown:
>
>
> 0 (2009-08-24 14:33:17) Starting Request Processing
>
> 0 (2009-08-24 14:33:17) Method=GET, PathInfo=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html
>
> 0 (2009-08-24 14:33:17) Starting ResourceResolution
>
> 9 (2009-08-24 14:33:17) URI=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html resolves to Resource=NonExistingResource, path=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html, elapsed = 9ms
>
>
> 9 (2009-08-24 14:33:17) Resource Path Info: SlingRequestPathInfo: path='/content/portal/users/admin/pages/home/widgets/hello_world/widget.html', selectorString='null', extension='null', suffix='null'
>
>
> 9 (2009-08-24 14:33:17) Starting ServletResolution
>
> 9 (2009-08-24 14:33:17) Starting resolveServlet(NonExistingResource, path=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html)
>
> 9 (2009-08-24 14:33:17) Using servlet org.apache.sling.servlets.get.DefaultGetServlet, elapsed = 0ms
>
> 9 (2009-08-24 14:33:17) URI=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html handled by Servlet=org.apache.sling.servlets.get.DefaultGetServlet, elapsed = 0ms
>
> 9 (2009-08-24 14:33:17) Applying request filters
>
> 9 (2009-08-24 14:33:17) Calling filter: org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter
>
> 9 (2009-08-24 14:33:17) Starting org.apache.sling.servlets.get.DefaultGetServlet#0
>
> 9 (2009-08-24 14:33:17) org.apache.sling.servlets.get.DefaultGetServlet#0, elapsed = 0ms
>
> 10 (2009-08-24 14:33:17) Starting handleError:status=404
>
> 10 (2009-08-24 14:33:17) Using handler Sling Default Error Handler Servlet, elapsed = 0ms
>
> 10 (2009-08-24 14:33:17) Error handler finished, elapsed = 0ms
>
>
> It's clear that the GetServlet is using the full URI, and not attempting to parse a suffix.
>
>
> Any ideas?
>
>
> Thanks,
>
>
> Branden
>
>
> [1] http://sling.apache.org/site/sling-api.html
>
>
>
>
Re: Script Resolution to non-existing resource
Posted by br...@uwindsor.ca.
Thanks Dominik, I think that does the trick. However it contradicts the documentation under "URL Decomposition" at http://sling.apache.org/site/sling-api.html, and even worse, makes my program less elegant! :) In the Sling API, the resource is said to not need an extension to register as the located resource.
Is this by design, or is this a bug?
Thanks,
------------------------------------------
Branden Visser
LMS Application Programmer - Information Systems Services
Information Technology Services
University of Windsor
-----Dominik Süß <do...@gmail.com> wrote: -----
To: dev@sling.apache.org, branden@uwindsor.ca
From: Dominik Süß <do...@gmail.com>
Date: 08/24/2009 02:54PM
Subject: Re: Script Resolution to non-existing resource
Hi Branden,
it might help you to have a look at:
http://dev.day.com/microsling/content/blogs/main/cheatsheet.html
There you can see how URLs are composed/decomposed. For your case
/content/portal/users/admin/pages/home/widgets/hello_world.html/widget.html
might do the trick ;)
HTH
Best regards,
Dominik
On Mon, Aug 24, 2009 at 8:46 PM, Branden Visser <br...@uwindsor.ca> wrote:
Hi all,
I'm trying to access a resource, then append a suffix to the URI. The problem is that the GET servlet seems to be taking my full URI, and returning a 404, even though there is a valid resource found in a substring of the URL. Here is what I have:
URI: /content/portal/users/admin/pages/home/widgets/hello_world/widget.html
The idea is that /widget.html is the suffix (there is no 'widget' resource!), and therefore Sling will attempt to execute hello_world.
hello_world has sling:resourceType="portal/widgets/url/url", and the following file exists: /apps/portal/widgets/url/url/GET.esp.
However, when I hit the URI above, I get 404. My intention is to make GET.esp create the resource "widget" below hello_world automatically if it does not exist.
>From what I understand from the URL decomposition and resource resolution [1], since /widget does not exist, hello_world should be the mapped resource, while /widget.html is the suffix. Correct?
Here is my request breakdown:
0 (2009-08-24 14:33:17) Starting Request Processing
0 (2009-08-24 14:33:17) Method=GET, PathInfo=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html
0 (2009-08-24 14:33:17) Starting ResourceResolution
9 (2009-08-24 14:33:17) URI=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html resolves to Resource=NonExistingResource, path=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html, elapsed = 9ms
9 (2009-08-24 14:33:17) Resource Path Info: SlingRequestPathInfo: path='/content/portal/users/admin/pages/home/widgets/hello_world/widget.html', selectorString='null', extension='null', suffix='null'
9 (2009-08-24 14:33:17) Starting ServletResolution
9 (2009-08-24 14:33:17) Starting resolveServlet(NonExistingResource, path=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html)
9 (2009-08-24 14:33:17) Using servlet org.apache.sling.servlets.get.DefaultGetServlet, elapsed = 0ms
9 (2009-08-24 14:33:17) URI=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html handled by Servlet=org.apache.sling.servlets.get.DefaultGetServlet, elapsed = 0ms
9 (2009-08-24 14:33:17) Applying request filters
9 (2009-08-24 14:33:17) Calling filter: org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter
9 (2009-08-24 14:33:17) Starting org.apache.sling.servlets.get.DefaultGetServlet#0
9 (2009-08-24 14:33:17) org.apache.sling.servlets.get.DefaultGetServlet#0, elapsed = 0ms
10 (2009-08-24 14:33:17) Starting handleError:status=404
10 (2009-08-24 14:33:17) Using handler Sling Default Error Handler Servlet, elapsed = 0ms
10 (2009-08-24 14:33:17) Error handler finished, elapsed = 0ms
It's clear that the GetServlet is using the full URI, and not attempting to parse a suffix.
Any ideas?
Thanks,
Branden
[1] http://sling.apache.org/site/sling-api.html
Re: Script Resolution to non-existing resource
Posted by Dominik Süß <do...@gmail.com>.
Hi Branden,
it might help you to have a look at:
http://dev.day.com/microsling/content/blogs/main/cheatsheet.html
There you can see how URLs are composed/decomposed. For your case
/content/portal/users/admin/pages/home/widgets/hello_world*.html*
/widget.html
might do the trick ;)
HTH
Best regards,
Dominik
On Mon, Aug 24, 2009 at 8:46 PM, Branden Visser <br...@uwindsor.ca> wrote:
> Hi all,
>
> I'm trying to access a resource, then append a suffix to the URI. The
> problem is that the GET servlet seems to be taking my full URI, and
> returning a 404, even though there is a valid resource found in a substring
> of the URL. Here is what I have:
>
> URI: /content/portal/users/admin/pages/home/widgets/hello_world/widget.html
>
> The idea is that /widget.html is the suffix (there is no 'widget'
> resource!), and therefore Sling will attempt to execute hello_world.
>
> hello_world has sling:resourceType="portal/widgets/url/url", and the
> following file exists: /apps/portal/widgets/url/url/GET.esp.
>
> However, when I hit the URI above, I get 404. My intention is to make
> GET.esp create the resource "widget" below hello_world automatically if it
> does not exist.
>
> From what I understand from the URL decomposition and resource resolution
> [1], since /widget does not exist, hello_world should be the mapped
> resource, while /widget.html is the suffix. Correct?
>
> Here is my request breakdown:
>
> 0 (2009-08-24 14:33:17) Starting Request Processing
> 0 (2009-08-24 14:33:17) Method=GET,
> PathInfo=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html
> 0 (2009-08-24 14:33:17) Starting ResourceResolution
> 9 (2009-08-24 14:33:17)
> URI=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html
> resolves to Resource=NonExistingResource,
> path=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html,
> elapsed = 9ms
> 9 (2009-08-24 14:33:17) Resource Path Info: SlingRequestPathInfo:
> path='/content/portal/users/admin/pages/home/widgets/hello_world/widget.html',
> selectorString='null', extension='null', suffix='null'
> 9 (2009-08-24 14:33:17) Starting ServletResolution
> 9 (2009-08-24 14:33:17) Starting resolveServlet(NonExistingResource,
> path=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html)
> 9 (2009-08-24 14:33:17) Using servlet
> org.apache.sling.servlets.get.DefaultGetServlet, elapsed = 0ms
> 9 (2009-08-24 14:33:17)
> URI=/content/portal/users/admin/pages/home/widgets/hello_world/widget.html
> handled by Servlet=org.apache.sling.servlets.get.DefaultGetServlet, elapsed
> = 0ms
> 9 (2009-08-24 14:33:17) Applying request filters
> 9 (2009-08-24 14:33:17) Calling filter:
> org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter
> 9 (2009-08-24 14:33:17) Starting
> org.apache.sling.servlets.get.DefaultGetServlet#0
> 9 (2009-08-24 14:33:17)
> org.apache.sling.servlets.get.DefaultGetServlet#0, elapsed = 0ms
> 10 (2009-08-24 14:33:17) Starting handleError:status=404
> 10 (2009-08-24 14:33:17) Using handler Sling Default Error Handler
> Servlet, elapsed = 0ms
> 10 (2009-08-24 14:33:17) Error handler finished, elapsed = 0ms
>
> It's clear that the GetServlet is using the full URI, and not attempting to
> parse a suffix.
>
> Any ideas?
>
> Thanks,
>
> Branden
>
> [1] http://sling.apache.org/site/sling-api.html
>