diff options
Diffstat (limited to 'bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/MultiplexingURLStreamHandler.java')
-rw-r--r-- | bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/MultiplexingURLStreamHandler.java | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/MultiplexingURLStreamHandler.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/MultiplexingURLStreamHandler.java index 025e6a485..c82ab15ed 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/MultiplexingURLStreamHandler.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/MultiplexingURLStreamHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2012 Cognos Incorporated, IBM Corporation and others. + * Copyright (c) 2006, 2016 Cognos Incorporated, 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 @@ -11,10 +11,12 @@ package org.eclipse.osgi.internal.url; import java.io.IOException; import java.lang.reflect.*; import java.net.*; +import java.net.Proxy; import org.eclipse.osgi.framework.log.FrameworkLogEntry; public class MultiplexingURLStreamHandler extends URLStreamHandler { private static Method openConnectionMethod; + private static Method openConnectionProxyMethod; private static Method equalsMethod; private static Method getDefaultPortMethod; private static Method getHostAddressMethod; @@ -38,6 +40,9 @@ public class MultiplexingURLStreamHandler extends URLStreamHandler { openConnectionMethod = URLStreamHandler.class.getDeclaredMethod("openConnection", new Class[] {URL.class}); //$NON-NLS-1$ openConnectionMethod.setAccessible(true); + openConnectionProxyMethod = URLStreamHandler.class.getDeclaredMethod("openConnection", new Class[] {URL.class, Proxy.class}); //$NON-NLS-1$ + openConnectionProxyMethod.setAccessible(true); + equalsMethod = URLStreamHandler.class.getDeclaredMethod("equals", new Class[] {URL.class, URL.class}); //$NON-NLS-1$ equalsMethod.setAccessible(true); @@ -104,6 +109,24 @@ public class MultiplexingURLStreamHandler extends URLStreamHandler { throw new MalformedURLException(); } + @Override + protected URLConnection openConnection(URL url, Proxy proxy) throws IOException { + URLStreamHandler handler = findAuthorizedURLStreamHandler(protocol); + if (handler != null) { + try { + return (URLConnection) openConnectionProxyMethod.invoke(handler, new Object[] {url, proxy}); + } catch (InvocationTargetException e) { + if (e.getTargetException() instanceof IOException) + throw (IOException) e.getTargetException(); + throw (RuntimeException) e.getTargetException(); + } catch (Exception e) { + factory.container.getLogServices().log(MultiplexingURLStreamHandler.class.getName(), FrameworkLogEntry.ERROR, "openConnection", e); //$NON-NLS-1$ + throw new RuntimeException(e.getMessage(), e); + } + } + throw new MalformedURLException(); + } + protected boolean equals(URL url1, URL url2) { URLStreamHandler handler = findAuthorizedURLStreamHandler(protocol); if (handler != null) { |