Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2004, 2010 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: IBM Corporation - initial API and implementation /
 
 
 package org.eclipse.osgi.framework.internal.protocol;
 
 import java.net.*;
 import java.util.*;
This class contains the URL stream handler factory for the OSGi framework.
 
 public class StreamHandlerFactory extends MultiplexingFactory implements URLStreamHandlerFactory {
 	static final SecureAction secureAction = (SecureAction) AccessController.doPrivileged(SecureAction.createSecureAction());
 
 
 	protected static final String URLSTREAMHANDLERCLASS = "org.osgi.service.url.URLStreamHandlerService"//$NON-NLS-1$
 	protected static final String PROTOCOL_HANDLER_PKGS = "java.protocol.handler.pkgs"//$NON-NLS-1$
 	protected static final String INTERNAL_PROTOCOL_HANDLER_PKG = "org.eclipse.osgi.framework.internal.protocol"//$NON-NLS-1$
 
 	private static final List ignoredClasses = Arrays.asList(new Class[] {MultiplexingURLStreamHandler.classStreamHandlerFactory.classURL.class});
 	private static final boolean useNetProxy;
 	static {
 		Class clazz = null;
 		try {
 			clazz = Class.forName("java.net.Proxy"); //$NON-NLS-1$
 		} catch (ClassNotFoundException e) {
 			// expected on JRE < 1.5
 		}
 		 = clazz != null;
 	}
 	private Hashtable proxies;
 	private ThreadLocal creatingProtocols = new ThreadLocal();

Create the factory.

Parameters:
context BundleContext for the system bundle
 
 	public StreamHandlerFactory(BundleContext contextFrameworkAdaptor adaptor) {
 		super(contextadaptor);
 
 		 = new Hashtable(15);
 	}
 
 	private Class getBuiltIn(String protocolString builtInHandlersboolean fromFramework) {
 		if (builtInHandlers == null)
 			return null;
 		Class clazz;
 		StringTokenizer tok = new StringTokenizer(builtInHandlers"|"); //$NON-NLS-1$
 		while (tok.hasMoreElements()) {
 			StringBuffer name = new StringBuffer();
 			name.append(tok.nextToken());
 			name.append("."); //$NON-NLS-1$
 			name.append(protocol);
 			name.append(".Handler"); //$NON-NLS-1$
 			try {
 				if (fromFramework)
 					clazz = .forName(name.toString());
 				else
 				if (clazz != null)
 					return clazz//this class exists, it is a built in handler	
 			} catch (ClassNotFoundException ex) {
 				// keep looking
 			}
 		}
 		return null;
 	}

Creates a new URLStreamHandler instance for the specified protocol.

Parameters:
protocol The desired protocol
Returns:
a URLStreamHandler for the specific protocol.
 
		// Check if we are recursing
		if (isRecursive(protocol))
			return null;
		try {
			//first check for built in handlers
			Class clazz = getBuiltIn(protocolbuiltInHandlersfalse);
			if (clazz != null)
				return null// let the VM handle it
			URLStreamHandler result = null;
			if (isMultiplexing()) {
				if (findAuthorizedURLStreamHandler(protocol) != null)
					result = new MultiplexingURLStreamHandler(protocolthis);
else {
				result = createInternalURLStreamHandler(protocol);
			}
			// if parent is present do parent lookup
			if (result == null &&  != null)
			return result//result may be null; let the VM handle it (consider sun.net.protocol.www.*)
finally {
		}
	}
	private boolean isRecursive(String protocol) {
		List protocols = (List.get();
		if (protocols == null) {
			protocols = new ArrayList(1);
		}
		if (protocols.contains(protocol))
			return true;
		protocols.add(protocol);
		return false;
	}
	private void releaseRecursive(String protocol) {
		List protocols = (List.get();
		protocols.remove(protocol);
	}
		//internal protocol handlers
		internalHandlerPkgs = internalHandlerPkgs == null ?  : internalHandlerPkgs + '|' + ;
		Class clazz = getBuiltIn(protocolinternalHandlerPkgstrue);
		if (clazz == null) {
			//Now we check the service registry
			//first check to see if the handler is in the cache
			if (handler != null)
				return (handler);
			//look through the service registry for a URLStramHandler registered for this protocol
			if (serviceReferences == null)
				return null;
			for (int i = 0; i < serviceReferences.lengthi++) {
				Object prop = serviceReferences[i].getProperty(.);
				if (prop instanceof String)
					prop = new String[] {(Stringprop}; // TODO should this be a warning?
				if (!(prop instanceof String[])) {
					continue;
				}
				String[] protocols = (String[]) prop;
				for (int j = 0; j < protocols.lengthj++)
					if (protocols[j].equals(protocol)) {
						handler =  ? new URLStreamHandlerFactoryProxyFor15(protocolserviceReferences[i], ) : new URLStreamHandlerProxy(protocolserviceReferences[i], );
						.put(protocolhandler);
						return (handler);
					}
			}
			return null;
		}
		// must be a built-in handler
		try {
			if (handler instanceof ProtocolActivator) {
			}
			return handler;
catch (Exception e) {
			return null;
		}
	}
		if (factory == null)
			return null;
		if (factory == this)
		try {
			Method createInternalURLStreamHandlerMethod = factory.getClass().getMethod("createInternalURLStreamHandler"new Class[] {String.class}); //$NON-NLS-1$
			return (URLStreamHandlercreateInternalURLStreamHandlerMethod.invoke(factorynew Object[] {protocol});
catch (Exception e) {
			.getFrameworkLog().log(new FrameworkLogEntry(StreamHandlerFactory.class.getName(), "findAuthorizedURLStreamHandler-loop".enull)); //$NON-NLS-1$
			throw new RuntimeException(e.getMessage(), e);
		}
	}
	}
	public void setParentFactory(Object parentFactory) {
		if (this. == null// only allow it to be set once
			this. = (URLStreamHandlerFactoryparentFactory;
	}
New to GrepCode? Check out our FAQ X