Repository: tomee Updated Branches: refs/heads/tomee-1.7.x ea8347ac0 -> cc31914c9
reapplying 7.x http ejbd client fixes Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/cc31914c Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/cc31914c Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/cc31914c Branch: refs/heads/tomee-1.7.x Commit: cc31914c989878d455e62464a93acdbd3c96b21a Parents: ea8347a Author: rmannibucau <[email protected]> Authored: Sat Dec 3 17:56:42 2016 +0100 Committer: rmannibucau <[email protected]> Committed: Sat Dec 3 17:56:42 2016 +0100 ---------------------------------------------------------------------- .../java/org/apache/openejb/client/Client.java | 4 +++ .../openejb/client/HttpConnectionFactory.java | 35 ++++++++++++++++---- .../org/apache/openejb/client/JNDIContext.java | 10 ++++-- 3 files changed, 39 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/cc31914c/server/openejb-client/src/main/java/org/apache/openejb/client/Client.java ---------------------------------------------------------------------- diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/Client.java b/server/openejb-client/src/main/java/org/apache/openejb/client/Client.java index 4cc352a..d8c74b1 100644 --- a/server/openejb-client/src/main/java/org/apache/openejb/client/Client.java +++ b/server/openejb-client/src/main/java/org/apache/openejb/client/Client.java @@ -26,6 +26,7 @@ import org.apache.openejb.client.event.RetryingRequest; import org.apache.openejb.client.event.ServerAdded; import org.apache.openejb.client.event.ServerRemoved; +import javax.naming.AuthenticationException; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; @@ -264,6 +265,9 @@ public class Client { in = conn.getInputStream(); } catch (final IOException e) { + if (AuthenticationException.class.isInstance(e.getCause())) { + throw e.getCause(); + } throw newIOException("Cannot open input stream to server: ", e); } http://git-wip-us.apache.org/repos/asf/tomee/blob/cc31914c/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java ---------------------------------------------------------------------- diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java b/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java index 78b1928..15d55ae 100644 --- a/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java +++ b/server/openejb-client/src/main/java/org/apache/openejb/client/HttpConnectionFactory.java @@ -16,6 +16,7 @@ */ package org.apache.openejb.client; +import javax.naming.AuthenticationException; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLSocketFactory; import java.io.IOException; @@ -25,8 +26,6 @@ import java.net.HttpURLConnection; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; import java.util.Map; import java.util.Queue; import java.util.concurrent.ConcurrentHashMap; @@ -74,7 +73,10 @@ public class HttpConnectionFactory implements ConnectionFactory { throw new IllegalArgumentException("Invalid uri " + uri.toString(), e); } - httpURLConnection = (HttpURLConnection) url.openConnection(); + final String authorization = params.get("authorization"); + + httpURLConnection = (HttpURLConnection) (authorization == null ? + url : new URL(stripQuery(url.toExternalForm(), "authorization"))).openConnection(); httpURLConnection.setDoOutput(true); final int timeout; @@ -89,19 +91,23 @@ public class HttpConnectionFactory implements ConnectionFactory { if (params.containsKey("readTimeout")) { httpURLConnection.setReadTimeout(Integer.parseInt(params.get("readTimeout"))); } + if (authorization != null) { + httpURLConnection.setRequestProperty("Authorization", authorization); + } if (params.containsKey("sslKeyStore") || params.containsKey("sslTrustStore")) { try { SSLSocketFactory sslSocketFactory = socketFactoryMap.get(uri); if (sslSocketFactory == null) { sslSocketFactory = new SSLContextBuilder(params).build().getSocketFactory(); - socketFactoryMap.put(uri, sslSocketFactory); + final SSLSocketFactory existing = socketFactoryMap.putIfAbsent(uri, sslSocketFactory); + if (existing != null) { + sslSocketFactory = existing; + } } ((HttpsURLConnection) httpURLConnection).setSSLSocketFactory(sslSocketFactory); - } catch (final NoSuchAlgorithmException e) { - throw new ClientRuntimeException(e.getMessage(), e); - } catch (final KeyManagementException e) { + } catch (final Exception e) { throw new ClientRuntimeException(e.getMessage(), e); } } @@ -113,6 +119,18 @@ public class HttpConnectionFactory implements ConnectionFactory { } } + private String stripQuery(final String url, final String param) { + String result = url; + do { + final int h = result.indexOf(param + '='); + final int end = result.indexOf('&', h); + if (h <= 0) { + return result; + } + result = result.substring(0, h - 1) + (end < 0 ? "" : result.substring(end + 1, result.length())); + } while (true); + } + @Override public void discard() { try { @@ -175,6 +193,9 @@ public class HttpConnectionFactory implements ConnectionFactory { @Override public InputStream getInputStream() throws IOException { if (inputStream == null) { + if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED) { + throw new IOException(new AuthenticationException()); + } inputStream = httpURLConnection.getInputStream(); } return inputStream; http://git-wip-us.apache.org/repos/asf/tomee/blob/cc31914c/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java ---------------------------------------------------------------------- diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java b/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java index 852ebae..c73cf68 100644 --- a/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java +++ b/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java @@ -428,9 +428,13 @@ public class JNDIContext implements InitialContextFactory, Context { try { res = request(req); } catch (Exception e) { - if (e instanceof RemoteException && e.getCause() instanceof ConnectException) { - e = (Exception) e.getCause(); - throw (ServiceUnavailableException) new ServiceUnavailableException("Cannot lookup '" + name + "'.").initCause(e); + if (e instanceof RemoteException) { + if (e.getCause() instanceof ConnectException) { + e = (Exception) e.getCause(); + throw (ServiceUnavailableException) new ServiceUnavailableException("Cannot lookup '" + name + "'.").initCause(e); + } else if (AuthenticationException.class.isInstance(e.getCause())) { + throw AuthenticationException.class.cast(e.getCause()); + } } throw (NamingException) new NamingException("Cannot lookup '" + name + "'.").initCause(e); }
