You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jd...@apache.org on 2003/09/03 11:25:32 UTC
cvs commit: incubator-geronimo/modules/common/src/java/org/apache/geronimo/common/net/protocol Protocols.java
jdillon 2003/09/03 02:25:32
Modified: modules/common/src/java/org/apache/geronimo/common/net/protocol
Protocols.java
Log:
o Added registerURLStreamHandler() to attempt to put a handler instance
into URL's handler map cache
Revision Changes Path
1.3 +49 -1 incubator-geronimo/modules/common/src/java/org/apache/geronimo/common/net/protocol/Protocols.java
Index: Protocols.java
===================================================================
RCS file: /home/cvs/incubator-geronimo/modules/common/src/java/org/apache/geronimo/common/net/protocol/Protocols.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Protocols.java 1 Sep 2003 15:16:39 -0000 1.2
+++ Protocols.java 3 Sep 2003 09:25:32 -0000 1.3
@@ -63,6 +63,11 @@
import java.util.LinkedList;
import java.util.Iterator;
import java.util.StringTokenizer;
+import java.util.Map;
+
+import java.lang.reflect.Field;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -81,6 +86,11 @@
{
private static final Log log = LogFactory.getLog(Protocols.class);
+
+ /////////////////////////////////////////////////////////////////////////
+ // Protocol Handler Packages //
+ /////////////////////////////////////////////////////////////////////////
+
public static final String HANDLER_PACKAGES = "java.protocol.handler.pkgs";
public static final String SYSTEM_HANDLER_PACKAGES = System.getProperty(HANDLER_PACKAGES);
@@ -143,6 +153,11 @@
setHandlerPackages(list);
}
+
+ /////////////////////////////////////////////////////////////////////////
+ // URL Stream Handlers //
+ /////////////////////////////////////////////////////////////////////////
+
public static Class getURLStreamHandlerType(final String protocol)
{
if (protocol == null) {
@@ -208,6 +223,39 @@
URL url = new URL(protocols[i], "", -1, "");
}
catch (Exception ignore) {}
+ }
+ }
+
+ public static void registerURLStreamHandler(final String protocol,
+ final URLStreamHandler handler)
+ {
+ if (protocol == null) {
+ throw new NullArgumentException("protocol");
+ }
+ if (handler == null) {
+ throw new NullArgumentException("handler");
+ }
+
+ // This way is "naughty" but works great
+ Map handlers = (Map)AccessController.doPrivileged(
+ new PrivilegedAction() {
+ public Object run() {
+ try {
+ Field field = URL.class.getDeclaredField("handlers");
+ field.setAccessible(true);
+
+ return field.get(null);
+ }
+ catch (Exception e) {
+ log.warn("Failed to access URL 'handlers' field", e);
+ }
+ return null;
+ }
+ }
+ );
+
+ if (handlers != null) {
+ handlers.put(protocol, handler);
}
}
}