Hi Dan, Yep, using new URI(url.getProtocol(), url.getAuthority(), url.getPath(), url.getQuery(), null); works as it well call into some URI internal method to do the encode if necessary, I will revise the code accordingly.
Thanks Freeman ------------- Freeman(Yue) Fang Red Hat, Inc. FuseSource is now part of Red Hat Web: http://fusesource.com | http://www.redhat.com/ Twitter: freemanfang Blog: http://freemanfang.blogspot.com http://blog.sina.com.cn/u/1473905042 weibo: http://weibo.com/u/1473905042 On 2012-11-8, at 下午11:23, Daniel Kulp wrote: > > On Nov 8, 2012, at 8:16 AM, Freeman Fang <[email protected]> wrote: > >> Thanks for the suggestion, but I don't think the >> if (!loadedCatalogs.contains(catalogURL.toURI()) >> could work. >> >> Take a close look at URL.toURI() method, it's >> public URI toURI() throws URISyntaxException { >> return new URI (toString()); ///line 1 >> } >> >> Also take a look at URI.create() method, it's >> public static URI create(String str) { >> try { >> return new URI(str); ///line 2 >> } catch (URISyntaxException x) { >> throw new IllegalArgumentException(x.getMessage(), x); >> } >> } >> >> so line1 and line2 are exactly same method with same input argument, so >> using catalogURL.toURI() actually same effect with >> URI.create(catalogURL.toString()). So we need explicitly manipulate >> catalogURL.toString() anyway to replace/encode whitespace there. > > Wow. That really sucks. I more or less would expect a "toURI" method to > actually produce a usable URI if the URL is valid. Oh well. Good > investigation. > > You MIGHT be able to try something like: > > new URI(url.getProtocol(), url.getAuthority(), url.getPath(), url.getQuery(), > null); > > to avoid the toString/parse combo, but that probably has similar issues. :-( > > > Dan > > >> >> Best Regards >> Freeman >> ------------- >> Freeman(Yue) Fang >> >> Red Hat, Inc. >> FuseSource is now part of Red Hat >> Web: http://fusesource.com | http://www.redhat.com/ >> Twitter: freemanfang >> Blog: http://freemanfang.blogspot.com >> http://blog.sina.com.cn/u/1473905042 >> weibo: http://weibo.com/u/1473905042 >> >> On 2012-11-8, at 下午8:36, Daniel Kulp wrote: >> >>> >>> Freeman, >>> >>> Since we have URL objects, instead of calling toString on them and doing: >>> >>>> if >>>> (!loadedCatalogs.contains(URI.create(replaceWhitespace(catalogURL.toString())))) >>>> { >>> >>> >>> can we just do something like >>> >>> if (!loadedCatalogs.contains(catalogURL.toURI()) >>> >>> >>> or similar? Would avoid some issues converting the URL to string, >>> encoding it, etc… If there are other characters in the URL that need >>> encoding, that may handle that as well. >>> >>> Dan >>> >>> >>> On Nov 8, 2012, at 3:48 AM, [email protected] wrote: >>> >>>> Author: ffang >>>> Date: Thu Nov 8 08:48:30 2012 >>>> New Revision: 1406958 >>>> >>>> URL: http://svn.apache.org/viewvc?rev=1406958&view=rev >>>> Log: >>>> [CXF-4620]Exception at compilation when a 'space' character is present in >>>> maven local repository path >>>> >>>> Modified: >>>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/OASISCatalogManager.java >>>> >>>> Modified: >>>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/OASISCatalogManager.java >>>> URL: >>>> http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/OASISCatalogManager.java?rev=1406958&r1=1406957&r2=1406958&view=diff >>>> ============================================================================== >>>> --- >>>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/OASISCatalogManager.java >>>> (original) >>>> +++ >>>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/OASISCatalogManager.java >>>> Thu Nov 8 08:48:30 2012 >>>> @@ -144,15 +144,15 @@ public class OASISCatalogManager { >>>> Enumeration<URL> catalogs = classLoader.getResources(name); >>>> while (catalogs.hasMoreElements()) { >>>> URL catalogURL = catalogs.nextElement(); >>>> - if >>>> (!loadedCatalogs.contains(URI.create(catalogURL.toString()))) { >>>> + if >>>> (!loadedCatalogs.contains(URI.create(replaceWhitespace(catalogURL.toString())))) >>>> { >>>> ((Catalog)catalog).parseCatalog(catalogURL); >>>> - loadedCatalogs.add(URI.create(catalogURL.toString())); >>>> + >>>> loadedCatalogs.add(URI.create(replaceWhitespace(catalogURL.toString()))); >>>> } >>>> } >>>> } >>>> >>>> public final void loadCatalog(URL catalogURL) throws IOException { >>>> - if (!loadedCatalogs.contains(URI.create(catalogURL.toString())) >>>> && catalog != null) { >>>> + if >>>> (!loadedCatalogs.contains(URI.create(replaceWhitespace(catalogURL.toString()))) >>>> && catalog != null) { >>>> if ("file".equals(catalogURL.getProtocol())) { >>>> try { >>>> File file = new File(catalogURL.toURI()); >>>> @@ -166,9 +166,16 @@ public class OASISCatalogManager { >>>> >>>> ((Catalog)catalog).parseCatalog(catalogURL); >>>> >>>> - loadedCatalogs.add(URI.create(catalogURL.toString())); >>>> + >>>> loadedCatalogs.add(URI.create(replaceWhitespace(catalogURL.toString()))); >>>> } >>>> } >>>> + >>>> + private String replaceWhitespace(String str) { >>>> + if (str.contains(" ")) { >>>> + str = str.replace(" ", "%20"); >>>> + } >>>> + return str; >>>> + } >>>> >>>> private static OASISCatalogManager getContextCatalog() { >>>> try { >>>> >>>> >>> >>> -- >>> Daniel Kulp >>> [email protected] - http://dankulp.com/blog >>> Talend Community Coder - http://coders.talend.com >>> >> > > -- > Daniel Kulp > [email protected] - http://dankulp.com/blog > Talend Community Coder - http://coders.talend.com >
