Oh, how embarassing. I misread this code. Sorry.
On Sun, Aug 1, 2010 at 5:12 AM, Jim Ma <[email protected]> wrote: > On Sat, Jul 31, 2010 at 7:52 PM, Benson Margulies <[email protected]> > wrote: >> To chime in: it's a really, really, bad idea for non-file URLs, as it >> can violate stringprep. > Why do you say that ? Can you explain it more with a example ? ;-) > >> >> For file URLs, it is an attempt to deal, with non-NFC (or NFKC) >> strings in the URL failing to match the file system. However, file >> system normalization is platform-dependendent. Linux does none at all, >> for example. So it's not safe in general. > > Actually what I add is just a URI.normalize(). > From the java doc , URI.normalize() just removes the ".." and "." > segment and it does not implement whole normalization in RFC 2396. > > ---java doc------ > "public URI normalize() > > Normalizes this URI's path. > > If this URI is opaque, or if its path is already in normal form, > then this URI is returned. Otherwise a new URI is constructed that is > identical to this URI except that its path is computed by normalizing > this URI's path in a manner consistent with RFC 2396, section 5.2, > step 6, sub-steps c through f; that is: > > 1. All "." segments are removed. > 2. If a ".." segment is preceded by a non-".." segment then > both of these segments are removed. This step is repeated until it is > no longer applicable. > 3.If the path is relative, and if its first segment contains a > colon character (':'), then a "." segment is prepended. This prevents > a relative URI with a path such as "a:b/c/d" from later being > re-parsed as an opaque URI with a scheme of "a" and a scheme-specific > part of "b/c/d". (Deviation from RFC 2396) > > A normalized path will begin with one or more ".." segments if > there were insufficient non-".." segments preceding them to allow > their removal. A normalized path will begin with a "." segment if one > was inserted by step 3 above. Otherwise, a normalized path will not > contain any "." or ".." segments. > > Returns: > A URI equivalent to this URI, but whose path is in normal form > ------------------------- > > I tested it on Fedora and the URI > "file:/home/jimma/tmp/test/../../arg" is normalized to > "file:/home/jimma/arg". So it works on Linux. > > Did I miss or misunderstand something else? > > Cheers > Jim > > >> >> >> On Fri, Jul 30, 2010 at 9:50 PM, Glen Mazza <[email protected]> wrote: >>> May I ask why this normalization is helpful (instead of just using the >>> intended file path to being with)? >>> Does this affect just internal CXF use or external usage by users of CXF? >>> If the latter, the potential problem I see is that not all URI's are file >>> paths and, even if they were, I'm not sure that you can safely normalize in >>> a platform-independent manner. >>> >>> Glen >>> >>> [email protected] wrote: >>>> >>>> Author: ema >>>> Date: Fri Jul 30 16:07:40 2010 >>>> New Revision: 980880 >>>> >>>> URL: http://svn.apache.org/viewvc?rev=980880&view=rev >>>> Log: >>>> [CXF-2918]:normalize the url like file:/home/cxf/org/apache/../../cxf in >>>> URIParserUtil.getAbsoluteURL() >>>> >>>> Modified: >>>> >>>> cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/util/URIParserUtil.java >>>> >>>> cxf/trunk/tools/common/src/test/java/org/apache/cxf/tools/util/URIParserUtilTest.java >>>> >>>> Modified: >>>> cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/util/URIParserUtil.java >>>> URL: >>>> http://svn.apache.org/viewvc/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/util/URIParserUtil.java?rev=980880&r1=980879&r2=980880&view=diff >>>> >>>> ============================================================================== >>>> --- >>>> cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/util/URIParserUtil.java >>>> (original) >>>> +++ >>>> cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/util/URIParserUtil.java >>>> Fri Jul 30 16:07:40 2010 >>>> @@ -248,18 +248,15 @@ public final class URIParserUtil { >>>> } >>>> public static String normalize(final String uri) { >>>> URL url = null; >>>> + String result = null; >>>> try { >>>> url = new URL(uri); >>>> - return escapeChars(url.toString().replace("\\", "/")); >>>> + result = >>>> escapeChars(url.toURI().normalize().toString().replace("\\", "/")); >>>> >>> >>> >>> >> >
