You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2011/07/05 21:26:01 UTC

svn commit: r1143180 - /wicket/trunk/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java

Author: mgrigorov
Date: Tue Jul  5 19:26:01 2011
New Revision: 1143180

URL: http://svn.apache.org/viewvc?rev=1143180&view=rev
Log:
WICKET-3867 URIs should be used instead of URLs as Set or Map keys.


Modified:
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java?rev=1143180&r1=1143179&r2=1143180&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java Tue Jul  5 19:26:01 2011
@@ -16,12 +16,15 @@
  */
 package org.apache.wicket.application;
 
-import java.io.IOException;
 import java.lang.ref.WeakReference;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -130,7 +133,10 @@ public final class DefaultClassResolver 
 	 */
 	public Iterator<URL> getResources(String name)
 	{
-		HashSet<URL> loadedFiles = new HashSet<URL>();
+		List<URL> resultList = new ArrayList<URL>();
+
+		// URIs should be used instead of URLs as Set keys. See WICKET-3867.
+		HashSet<URI> loadedFiles = new HashSet<URI>();
 		try
 		{
 			// Try the classloader for the wicket jar/bundle
@@ -144,30 +150,39 @@ public final class DefaultClassResolver 
 			// Try the context class loader
 			resources = Thread.currentThread().getContextClassLoader().getResources(name);
 			loadResources(resources, loadedFiles);
+
+			for (URI uri : loadedFiles)
+			{
+				resultList.add(uri.toURL());
+			}
 		}
-		catch (IOException e)
+		catch (Exception e)
 		{
 			throw new WicketRuntimeException(e);
 		}
 
-		return loadedFiles.iterator();
+		return resultList.iterator();
 	}
 
 	/**
 	 * 
 	 * @param resources
 	 * @param loadedFiles
+	 * @throws URISyntaxException
+	 *             if URL.toURI() throws
 	 */
-	private void loadResources(Enumeration<URL> resources, Set<URL> loadedFiles)
+	private void loadResources(Enumeration<URL> resources, Set<URI> loadedFiles)
+		throws URISyntaxException
 	{
 		if (resources != null)
 		{
 			while (resources.hasMoreElements())
 			{
 				final URL url = resources.nextElement();
-				if (!loadedFiles.contains(url))
+				URI uri = url.toURI();
+				if (!loadedFiles.contains(uri))
 				{
-					loadedFiles.add(url);
+					loadedFiles.add(uri);
 				}
 			}
 		}