Hi, additional comment about the performance. I have debuged the method parseURI with the following Argument: file:/C:/Data/Eclipse/workspace-lib/WorldAccount-webapp/tomcat/webapps/wa/ I have append the Stackframe the regexp library need to resolve this regexp. You can see that are a lot of recursive funktion calls and there is a lot of code executed in each loop. I am a litle bit concerned about the performance, because resolving is really often called in Cocoon. Hmmmm, "org.apache.regexp" library is also used inside the Matcher, so I asked me if there are faster regexp libraries available. Whats about the ORO stuff? Are there some performance measurements available?
It seams that we need to write our own handwritten parser for the URI stuff. What do you think? Volker Thread [Thread-8] (Suspended (breakpoint at line 1372 in org.apache.regexp.RE)) org.apache.regexp.RE.matchNodes(int, int, int) line: 1372 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 962 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 985 org.apache.regexp.RE.matchNodes(int, int, int) line: 985 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchNodes(int, int, int) line: 962 org.apache.regexp.RE.matchNodes(int, int, int) line: 962 org.apache.regexp.RE.matchNodes(int, int, int) line: 1428 org.apache.regexp.RE.matchAt(int) line: 882 org.apache.regexp.RE.match(org.apache.regexp.CharacterIterator, int) line: 797 org.apache.regexp.RE.match(java.lang.String, int) line: 768 org.apache.regexp.RE.match(java.lang.String) line: 757 org.apache.excalibur.source.SourceUtil.parseUrl(java.lang.String) line: 740 org.apache.excalibur.source.SourceUtil.absolutize(java.lang.String, java.lang.String, boolean) line: 578 org.apache.excalibur.source.SourceUtil.absolutize(java.lang.String, java.lang.String) line: 541 org.apache.excalibur.source.impl.SourceResolverImpl.absolutize(org.apache.excalibur.source.SourceFactory, java.lang.String, java.lang.String) line: 289 org.apache.excalibur.source.impl.SourceResolverImpl.resolveURI(java.lang.String, java.lang.String, java.util.Map) line: 263 org.apache.cocoon.components.CocoonComponentManager.resolveURI(java.lang.String, java.lang.String, java.util.Map) line: 450 org.apache.cocoon.environment.http.HttpEnvironment(org.apache.cocoon.environment.AbstractEnvironment).resolveURI(java.lang.String, java.lang.String, java.util.Map) line: 513 org.apache.cocoon.environment.http.HttpEnvironment(org.apache.cocoon.environment.AbstractEnvironment).resolveURI(java.lang.String) line: 500 <snip /> On Tue, 2003-06-10 at 11:01, Carsten Ziegeler wrote: > Bruno Dumon wrote: > > On Tue, 2003-06-10 at 10:02, Carsten Ziegeler wrote: > > > Sylvain Wallez wrote: > > > > > > > > What about using the two ;-) > > > > 1/ test if the URI is absolute. For this, you can use Excalibur's > > > > SourceUtil.getScheme() which performs a strict control on > > scheme syntax > > > > without using a regexp. > > > > 2/ if not, use the regexp only on the part before the '?' > > (BTW, if '?' > > > > is part of the URI, it should be encoded as %3F > > > > > > > That's what I tried to propose :) > > > > > > > (Just now awakening) > > > > Is this the cause of the infinite loop, or is that still a seperate > > problem? > > > My first guess that it is an infinite loop seems to be incorrect. It's > rather > that evaluation the regexp is implemented recursivly and that the longer > the uri to test is, the more recursive calls you get. So in fact it > is not an infinite loop but looks like one. > So there is the hope that if 2/ is implemented, the recursion should be > not that deep and fix the problem for now. 1/ is just a performance > update. > Yep, after trying it out I saw it too. Anybody working on this already? (or can I do it?) -- Bruno Dumon http://outerthought.org/ Outerthought - Open Source, Java & XML Competence Support Center [EMAIL PROTECTED] [EMAIL PROTECTED]