Hi Dishara, Excellent, well done. The ResourceResolver is quite picky about whats in the Resource and is also sensitive to trailing / on paths. I expect you now know a lot more about how it works... which will be a good thing for the tasks to come. Well done. Ian
On 22 August 2013 04:25, Dishara Wijewardana <ddwijeward...@gmail.com> wrote: > Hi Ian, > Found it finally :-). You are quite right. I am missing the > resolutionPathInfo property to send back and hence going to a wrong > servlet. I set it to json and it gave me a json rendered page. Awesome !!. > > > On Thu, Aug 22, 2013 at 7:57 AM, Dishara Wijewardana < > ddwijeward...@gmail.com> wrote: > >> Hi Ian, >> I found the place which redirects and causing the loop in debugging. This >> is for a similar request on >> http://localhost:8080/content/cassandra/pnode1/cnode1. >> >> The class is StreamRendererServlet. My request always falls inside the >> else block that specified in BOLD and it redirects the response and hence >> this issue. So following is the status I noticed in the debug flow. Can you >> give me some clues, whether this flow correct ? Should the "stream" be not >> NULL ? Or included=true. What is the path the request should suppose to go >> ? Appreciate any input since I am kind of blocked here.. >> >> if (!included) { *included=false* >> ResourceMetadata meta = resource.getResourceMetadata(); >> long modifTime = meta.getModificationTime(); >> * >> Inside unmodified request.getDateHeader(HEADER_IF_MODIFIED_SINCE) returns >> -1 and hence if block evaluates to false.* >> if (unmodified(request, modifTime)) { >> response.setStatus(SC_NOT_MODIFIED); >> return; >> } >> } >> >> // fall back to plain text rendering if the resource has no stream >> InputStream stream = resource.adaptTo(InputStream.class); >> if (stream != null) { *stream=NULL* >> >> streamResource(resource, stream, included, request, response); >> >> } else { >> >> // the resource is the root, do not redirect, immediately index >> if (isRootResourceRequest(resource)) { >> >> renderDirectory(request, response, included); >> >> } else if (included || response.isCommitted() ) >> {*response.isCommitted() >> = false and included=false* >> >> // request is included or committed, not redirecting >> request.getRequestProgressTracker().log( >> "StreamRendererServlet: Not redirecting with trailing >> slash, response is committed or request included"); >> log.warn("StreamRendererServlet: Not redirecting with >> trailing slash, response is committed or request included"); >> >> } *else {* >> * >> * >> * // redirect to this with trailing slash to render the >> index* >> * String url = request.getResourceResolver().map(request,* >> * resource.getPath())* >> * + "/";* >> * response.sendRedirect(url);* >> * >> * >> * }* >> } >> >> >> >> >> >> >> On Wed, Aug 21, 2013 at 4:16 PM, Ian Boston <i...@tfd.co.uk> wrote: >> >>> Hi, >>> IIRC the behaviour where the resource resolver iterates up the tree is >>> normal resource resolver behaviour but the recursion is not. Neither >>> is the integration test failure. >>> >>> The resource resolver may be looking for the sling:resourceSuperType, >>> but that is just a hunch. >>> >>> Either, the implementation of the ResourceProvider wiring inside the >>> ResourceResolver is buggy, or the Properties of the resource you are >>> sending back are incorrect, which is triggering the behaviour. >>> >>> I would suggest you look carefully at what a standard JcrResource >>> looks like when you make a simular request. Its listed at [1]. >>> >>> Ian >>> >>> 1 http://localhost:8080/system/console/recentRequests >>> >>> >>> On 21 August 2013 08:59, Dishara Wijewardana <ddwijeward...@gmail.com> >>> wrote: >>> > Hi >>> > Since I am doing something similar to PlanetResource, I ran the >>> integration >>> > test of PlanetResource to verify it works in trunk. But that also got >>> > failed and started a thread on that also. >>> > >>> > >>> > On Wed, Aug 21, 2013 at 8:50 AM, Dishara Wijewardana < >>> > ddwijeward...@gmail.com> wrote: >>> > >>> >> Hi, >>> >> As per Ian's request I tried calling a resource URL ends with .json to >>> get >>> >> a json rendered page. >>> >> There I just noticed that, the response I am getting was which I >>> claimed >>> >> earlier a blank page, is not actually a blank page. Sorry for the >>> >> inconvenience. >>> >> >>> >> In the browser there is a message as follows. So then I debug it >>> again. I >>> >> put a debug pointer only inside CassandraProvider.getResource(), and >>> >> observed that it is getting hit continuously. I also noticed that if I >>> hit >>> >> for http://localhost:8080/content/cassandra/pnode1/cnode1 , >>> >> it continuously calls CassandraProvider.getResource with following >>> paths >>> >> over and over again. Appreciate any input on this ? Why the request >>> is >>> >> getting looped ? Because in the code I see no reason to call >>> getResource in >>> >> a loop. >>> >> >>> >> - /content/cassandra/pnode1/cnode1 >>> >> - /content/cassandra/pnode1 >>> >> - /content/cassandra >>> >> >>> >> This webpage has a redirect loop >>> >> The webpage at *http://localhost:8080/cassandra/pnode1/cnode1/* has >>> >> resulted in too many redirects. Clearing your cookies for this site or >>> >> allowing third-party cookies may fix the problem. If not, it is >>> possibly a >>> >> server configuration issue and not a problem with your computer. >>> >> >>> >> -- >>> >> Thanks >>> >> /Dishara >>> >> >>> > >>> > >>> > >>> > -- >>> > Thanks >>> > /Dishara >>> >> >> >> >> -- >> Thanks >> /Dishara >> > > > > -- > Thanks > /Dishara