Hi Cocooners,

I am trying to build a complete URL inside a Saxlet by using the methods
defined in org.apache.cocoon.environment.Request.

Depending on the fact whether or not there was a content aggregation in the
(sub)sitemap, request.getRequestURI() returns different results (request is
an instance of org.apache.cocoon.environment.wrapper.RequestWrapper).

A partial sub sitemap is included at the end of this message.

With content aggregation (browser URL
http://localhost:8088/cocoon/subsite/foo/index.xml.html) I get the
following results:
request.getContextPath(): "/cocoon"
request.getRequestURI(): "subsite/template/foo/index.xml"
request.getSitemapURI(): "template/foo/index.xml"
(The fragment "template" comes from the section
<map:part src="cocoon:/template/{1}/{2}"/> and shall be ignored here.)

Without content aggregation (browser URL
http://localhost:8088/cocoon/subsite/foo/index.xml.html.foo) this looks
like:
request.getContextPath(): "/cocoon"
request.getRequestURI(): "/cocoon/subsite/foo/index.xml.html.foo"
request.getSitemapURI(): "foo/index.xml.html.foo"

After digging through the developer mailing lists I have found a discussion
related to that specific topic back in May this year (see
http://www2.real-time.com/pipermail/cocoon-devel/2001-May/007294.html).
Unfortunately it seems as if the thread of this topic was not finished
completely (in case I missed it - sorry for that).

The documentation of the Request Interface puts it that way:
getRequestURI()
Returns the part of this request's URL from the protocol name up to the
query string in the first line of the HTTP request.

Now here is the question considering the method desciption:
Is request.getRequestURI() really supposed to return only a part of the
original requestURI (i.e. with the contextPath ripped off)? - As you can see
in the example without content aggregation, getRequestURI() includes the
contextPath, whereas in the example using content aggregation, the
contextPath was removed.

How do I have to build a complete URL from the Request's methods then?
In cases without content aggregation, to me it looks like "take the
request's scheme, append the serverName, append the port if necessary,
add the requestURI and there you go (not mentioning slashes and colons)".
How can I decide inside the Java code whether there was content
aggregation or not and how the URL should be built? Just checking whether
the requestURI starts with the contextPath? Sounds a little too easy.

Still new in this area, so don't blame me for silly questions. ;-)

Thanks in advance!
Oliver.




<!-- partial sub site map -->

 <map:pipeline>
  <!-- Example with content aggregation -->
  <map:match pattern="*/**.html">
   <map:aggregate element="aggregatedpage">
    <map:part src="cocoon:/template/{1}/{2}"/>
    <map:part src="cocoon:/content/{1}/{2}"/>
        <!-- {2} not used in this example -->
   </map:aggregate>
   <map:transform src="docs/{1}/template.xsl"/>
   <map:serialize/>
  </map:match>
  <!-- Example without content aggregation -->
  <map:match pattern="*/**.html.foo">
   <map:generate src="docs/{1}/template.xml" type="saxlet"/>
   <map:serialize/>
  </map:match>
 </map:pipeline>
 <map:pipeline internal-only="true">
  <!-- Process the aggregated content -->
  <map:match pattern="template/*/**">
   <!-- XML page template -->
   <map:generate src="docs/{1}/template.xml" type="saxlet"/>
   <map:serialize/>
  </map:match>
  <map:match pattern="content/**">
   <!-- XML content file  -->
   <map:generate src="docs/{1}" type="file"/>
   <map:transform src="stylesheets/content.xsl"/>
   <map:serialize/>
  </map:match>
 </map:pipeline>






---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to