KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > tools > utils > URLFactory


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