1 package org.objectweb.celtix.tools.utils; 2 3 import java.net.MalformedURLException ; 4 import java.net.URL ; 5 import java.net.URLStreamHandler ; 6 import java.util.StringTokenizer ; 7 8 public final class URLFactory { 9 public static final String PROTOCOL_HANDLER_PKGS = "java.protocol.handler.pkgs"; 10 public static final String UNKNOWN_PROPTOCL_EX_MSG = "unknown protocol: "; 11 12 private URLFactory() { 13 14 } 15 16 public static URL createURL(String spec) throws MalformedURLException { 17 return createURL(null, spec); 18 } 19 20 public static URL createURL(URL context, String spec) throws MalformedURLException { 21 URL url = null; 22 try { 23 url = new URL (context, spec); 24 } catch (MalformedURLException mue) { 25 26 String msg = mue.getMessage(); 27 if (msg.indexOf(UNKNOWN_PROPTOCL_EX_MSG) != -1) { 28 URLStreamHandler handler = findHandler(msg.substring(UNKNOWN_PROPTOCL_EX_MSG.length())); 29 if (handler != null) { 30 url = new URL (context, spec, handler); 31 } 32 } 33 if (url == null) { 34 throw mue; 35 } 36 } 37 return url; 38 } 39 40 public static URLStreamHandler findHandler(String protocol) { 41 42 URLStreamHandler handler = null; 43 String packagePrefixList = System.getProperty(PROTOCOL_HANDLER_PKGS, ""); 44 StringTokenizer packagePrefixIter = new StringTokenizer (packagePrefixList, "|"); 45 while (handler == null && packagePrefixIter.hasMoreTokens()) { 46 String packagePrefix = packagePrefixIter.nextToken().trim(); 47 try { 48 String clsName = packagePrefix + "." + protocol + ".Handler"; 49 Class cls = null; 50 try { 51 cls = Class.forName(clsName); 52 } catch (ClassNotFoundException e) { 53 ClassLoader cl = Thread.currentThread().getContextClassLoader(); 54 if (cl != null) { 55 cls = cl.loadClass(clsName); 56 } 57 } 58 if (cls != null) { 59 handler = (URLStreamHandler )cls.newInstance(); 60 } 61 } catch (Exception ignored) { 62 ignored.getMessage(); 63 } 64 } 65 return handler; 66 } 67 } 68 | Popular Tags |