Return-Path: Delivered-To: apmail-cocoon-dev-archive@www.apache.org Received: (qmail 78146 invoked from network); 29 Jan 2007 11:09:36 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 29 Jan 2007 11:09:36 -0000 Received: (qmail 98840 invoked by uid 500); 29 Jan 2007 11:09:31 -0000 Delivered-To: apmail-cocoon-dev-archive@cocoon.apache.org Received: (qmail 98708 invoked by uid 500); 29 Jan 2007 11:09:31 -0000 Mailing-List: contact dev-help@cocoon.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@cocoon.apache.org List-Id: Delivered-To: mailing list dev@cocoon.apache.org Received: (qmail 98663 invoked by uid 99); 29 Jan 2007 11:09:30 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 29 Jan 2007 03:09:30 -0800 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (herse.apache.org: domain of grek@tuffmail.com designates 216.86.168.178 as permitted sender) Received: from [216.86.168.178] (HELO mxout-03.mxes.net) (216.86.168.178) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 29 Jan 2007 03:09:21 -0800 Received: from [108.108.108.4] (unknown [87.206.142.101]) by smtp.mxes.net (Postfix) with ESMTP id BE85151979 for ; Mon, 29 Jan 2007 06:08:59 -0500 (EST) Message-ID: <45BDD5C7.4090100@tuffmail.com> Date: Mon, 29 Jan 2007 12:08:55 +0100 From: Grzegorz Kossakowski User-Agent: Thunderbird 1.5.0.9 (X11/20060911) MIME-Version: 1.0 To: dev@cocoon.apache.org Subject: Re: ${cocoon.request.contextPath} returns null in 2.2 References: <45BBBCF0.1000002@tuffmail.com> <45BCFD51.3080205@nada.kth.se> <45BDBC85.4090205@nada.kth.se> In-Reply-To: <45BDBC85.4090205@nada.kth.se> Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 8bit X-Virus-Checked: Checked by ClamAV on apache.org Daniel Fagerstrom napisa�(a): > Daniel Fagerstrom skrev: >> Grzegorz Kossakowski wrote: >>> Hello, >>> >>> I'm hacking now ajax and forms block to get them use of >>> servlet-services >>> and came across a bug. When you put ${cocoon.request.contextPath} into >>> JX template it will always return null (at least while using servlet >>> dispatcher). However, ${cocoon.request.requestURI} returns valid value, >>> so it must be only contextPath broken somehow. Unfortunately, I have no >>> skills to debug this. >>> Anyone can at least confirm this? Can you test it without servlet >>> dispatcher? (I would do it myself if I knew how) >>> >> I have not tested it. But looking at the code the servlet dispatcher >> just embeds the request object from the servlet container with a >> proxy. And the proxy doesn't affect the contextPath AFAICS, so it >> might be that the context path is null in the original request. >> >> For a servlet service that is called through the servlet protocol, >> the contextPath will always be "", which is a bug. Currently the >> request object of the calling servlet service is not available in the >> servlet source, so there is no easy fix. I plan to refactor the call >> stack and make it available there. >> >> In the servlet architecture we have: >> >> requestURI = contextPath + servletPath + pathInfo >> >> As the servlet service architecture creates an extra level of paths >> relative to the servlet architecture there are several possibilities >> where to add the mountPath. I solved it in the following way: the >> dispatcher servlet will look for the mountPath that is the longest >> prefix in the incoming pathInfo. It will then create a new >> servletPath and pathInfo for the called servlet service: >> >> newServletPath = servletPath + mountPath >> newPathInfo = pathInfo.substring(mountPath.length()) >> >> So as you can see the contextPath will be the same as for all servlet >> services. > Taking a look at your patches in JIRA I see that you have replaced > {request:contextPath}/_cocoon/resources > with > /blocks-test/cocoon-forms-impl/resources > > Now the original pattern is actually faulty (even if it seem to be > used everywhere in the samples), it should have been > {request:contextPath}{request:servletPath}/_cocoon/resources > and > {request:contextPath}{request:servletPath}/resources > in your refactored code. > > The only reason that the samples work is that the web.xml in > cocoon-webapp mounts the sitemap servlet at "/*" which gives > servletPath="", but there is no reason to constrain the use of the > sitemap servlet to be used only with an empty servlet path. A servlet > is supposed to be mountable wherever the user want it. > > Using the servlet service fw, sitemap servlets will be mounted at > other paths and the servletPath must be taken into account. Thanks for explanation. However, your proposed solution will not work. In cocoon-ajax-sample we have: