Author: peter_firmstone
Date: Fri Nov  2 09:25:49 2012
New Revision: 1404901

URL: http://svn.apache.org/viewvc?rev=1404901&view=rev
Log:
Sim, This is an example of how to fix illegal characters in URI / URL strings 
and normalise.  This might address the issues you're seeing with spaces in 
codebase annotations and it may not, if spaces are still present (I haven't had 
much time to look at this), then you'll need to find where codebase annotations 
are being generated and escape the illegal characters prior to them being used 
as codebase annotations for services. 

Hope this helps.

Modified:
    river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/QAConfig.java

Modified: river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/QAConfig.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/QAConfig.java?rev=1404901&r1=1404900&r2=1404901&view=diff
==============================================================================
--- river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/QAConfig.java (original)
+++ river/jtsk/trunk/qa/src/com/sun/jini/qa/harness/QAConfig.java Fri Nov  2 
09:25:49 2012
@@ -36,6 +36,8 @@ import java.io.Serializable;
 
 import java.net.InetAddress;
 import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.UnknownHostException;
 import java.net.URL;
 import java.net.URLClassLoader;
@@ -72,6 +74,7 @@ import net.jini.jeri.BasicILFactory;
 import net.jini.jeri.tcp.TcpServerEndpoint;
 import net.jini.security.ProxyPreparer;
 import net.jini.url.httpmd.HttpmdUtil;
+import org.apache.river.impl.net.UriString;
 
 /**
  * This class represents the environment for tests running in
@@ -703,13 +706,20 @@ public class QAConfig implements Seriali
      */
     public URL getComponentURL(String entryName, TestDescription td) throws 
TestException {
        try {
-           return new URL(entryName);
+            URI uri = new 
URI(UriString.escapeIllegalCharacters(UriString.fixWindowsURI(entryName)));
+            uri = UriString.normalise(uri);
+            return uri.toURL();
+//         return new URL(entryName);
        } catch (MalformedURLException ignore) {
-       }
+       } catch (URISyntaxException ignore){
+        } catch (IllegalArgumentException ignore){
+        }
        File entryFile = getComponentFile(entryName, td);
        if (entryFile != null) { 
            try {
-               return entryFile.getCanonicalFile().toURI().toURL();
+               URI result = entryFile.getCanonicalFile().toURI();
+                result = UriString.normalise(result);
+                return result.toURL();
            } catch (Exception e) {
                throw new TestException("problem converting file to url", e);
            }
@@ -725,18 +735,49 @@ public class QAConfig implements Seriali
                String fqEntry = canonicalize(tdDir + "/" + entryName);
                logger.log(Level.FINEST, "checking test jar file for " + 
fqEntry);
                if (getJarEntry(testJar, fqEntry) != null) {
-                   return new URL("jar:file:" + testJar.replace('\\', '/') + 
"!/" + fqEntry);
+                    StringBuilder sb = new StringBuilder(64);
+                    sb.append("jar:file:")
+                            .append(testJar.replace('\\', '/'))
+                            .append("!/")
+                            .append(fqEntry);
+                    String str = 
UriString.escapeIllegalCharacters(sb.toString());
+                    URI uri = new URI(str);
+                    uri = UriString.normalise(uri);
+                    return uri.toURL();
+//                 return new URL("jar:file:" + testJar.replace('\\', '/') + 
"!/" + fqEntry);
                }
            }
            if (getJarEntry(testJar, entryName) != null) {
-               return new URL("jar:file:" + testJar.replace('\\', '/') + "!/" 
+ entryName);
+                StringBuilder sb = new StringBuilder(64);
+                sb.append("jar:file:")
+                        .append(testJar.replace('\\', '/'))
+                        .append("!/")
+                        .append(entryName);
+                String str = UriString.escapeIllegalCharacters(sb.toString());
+                URI uri = new URI(str);
+                uri = UriString.normalise(uri);
+                return uri.toURL();
+//             return new URL("jar:file:" + testJar.replace('\\', '/') + "!/" 
+ entryName);
            }
            if (getJarEntry(harnessJar, entryName) != null) {
-               return new URL("jar:file:" + harnessJar.replace('\\', '/') + 
"!/" + entryName);
+                StringBuilder sb = new StringBuilder(64);
+                sb.append("jar:file:")
+                        .append(harnessJar.replace('\\', '/'))
+                        .append("!/")
+                        .append(entryName);
+                String str = UriString.escapeIllegalCharacters(sb.toString());
+                URI uri = new URI(str);
+                uri = UriString.normalise(uri);
+                return uri.toURL();
+//             return new URL("jar:file:" + harnessJar.replace('\\', '/') + 
"!/" + entryName);
            }
        } catch (MalformedURLException e) {
            throw new TestException("failed to construct entry URL", e);
-       }
+       } catch (URISyntaxException e){
+            throw new TestException("failed to construct entry URI", e);
+        } catch (IllegalArgumentException e){
+            throw new TestException("failed to construct entry URI", e);
+        }
        throw new TestException("no jar entry found for " + entryName);
     }
 


Reply via email to