Hello Stephen,
> I'm using cocoon 2.2.
>
> Background:
> I'm trying to build a cocoon presentation layer on top of an
> subversion repository. A user makes a request and the cocoon
> application checks to see if a directory index needs to be added, adds
> menus and navigation trails, handles mobile formatting etc but does a
> ci:includexml to get the content of the page from the subversion
> repository.
>
It seems very interesting :-)
> Problem:
> Some of the files in the subversion repository have spaces in the file
> names (and it's not feasible to have a repository without any URL
> encoding required characters) which are decoded (by the matcher?) and
> then passed off to the reader which makes a request of the source
> resolver without re-encoding the spaces (I think).
>
> I assume this is what is happening because I get a FileNotFound error
> when using <ci:includexml> with the src set stuff from the request
> generator but it works when I use xslt to replace the spaces with
> %20s.  I can fix the problem when constructing pages using xslt but
> not for images and other stuff that needs to be <map:read>.
>
> Am I going to have to write my own reader that does URL encoding?
>From my point of view, you don't have to write a reader to handle you
data/link. Because the (right) way to communicate with a server it with
URL, which involves URL encoding. It seems that you want to communicate
with your server, as with a standard file system. Since it isn't a file
system, you have to adapt you to web and web server requirements, i.e.
URL encoding.

I guess you use svn list to know what contains your svn repository.
(Please give us more details about this part) It must be interpreted via
a BASH at some point. So you should also use this BASH to translate your
listing into a "URL encoded" listing. I saw that sed with a file
urlencode.sed [1] can be very useful to reach this goal : svn list | sed
-f urlencode.sed

Finally, you should find a way before using <ci:includexml>, so that you
provide your server with data respecting web requirements/rules. There
are several ways :
1/ Encode URL via your BASH and the command sed.
2/ Use a XSLT style sheet to transform every occurrence of char
forbidden in URL string.
3/ Use EncodeURLTransformer. I'm not sure it releases what you want, but
its name seems to be interesting ;-) [2]
4/ Use POST data, because they likely don't require URL encoding.
5/ ... ?

There are many ways to fix your problem and I haven't provide you with a
exact fix, sorry. Whatever I wrote, I hope you understand that you have
to provide your server with URL encoded URLs. I mean the solution isn't
in developing a reader, but more in using or developing a transformer to
encode you URL or even in providing your system with URL encoded data
since the beginning.

Good luck.

Thomas.

[1] urlencode.sed
s/%/%25/g
s/ /%20/g
s/ /%09/g
s/!/%21/g
s/"/%22/g
s/#/%23/g
s/\$/%24/g
s/\&/%26/g
s/'\''/%27/g
s/(/%28/g
s/)/%29/g
s/\*/%2a/g
s/+/%2b/g
s/,/%2c/g
s/-/%2d/g
s/\./%2e/g
s/\//%2f/g
s/:/%3a/g
s/;/%3b/g
s//%3e/g
s/?/%3f/g
s/@/%40/g
s/\[/%5b/g
s/\\/%5c/g
s/\]/%5d/g
s/\^/%5e/g
s/_/%5f/g
s/`/%60/g
s/{/%7b/g
s/|/%7c/g
s/}/%7d/g
s/~/%7e/g
s/      /%09/g

[2] http://cocoon.apache.org/2.1/userdocs/encodeurl-transformer.html

Reply via email to