Return-Path: X-Original-To: apmail-camel-commits-archive@www.apache.org Delivered-To: apmail-camel-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 76EE3FB19 for ; Fri, 12 Dec 2014 17:23:42 +0000 (UTC) Received: (qmail 68089 invoked by uid 500); 12 Dec 2014 17:23:42 -0000 Delivered-To: apmail-camel-commits-archive@camel.apache.org Received: (qmail 67948 invoked by uid 500); 12 Dec 2014 17:23:42 -0000 Mailing-List: contact commits-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list commits@camel.apache.org Received: (qmail 67737 invoked by uid 99); 12 Dec 2014 17:23:42 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 12 Dec 2014 17:23:42 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id E83DC9540EC; Fri, 12 Dec 2014 17:23:41 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: cschneider@apache.org To: commits@camel.apache.org Date: Fri, 12 Dec 2014 17:23:45 -0000 Message-Id: <0771caa055bb41ddaf406312d3e5fce5@git.apache.org> In-Reply-To: <3705f3f34193472bba751b4498aec7c0@git.apache.org> References: <3705f3f34193472bba751b4498aec7c0@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [5/6] camel git commit: Separate classes between jetty versions Separate classes between jetty versions Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/95b16c53 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/95b16c53 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/95b16c53 Branch: refs/heads/temp-jetty9 Commit: 95b16c53380bc559f9528532e0e81c266fdf274f Parents: abde35a Author: Christian Schneider Authored: Fri Dec 12 18:16:36 2014 +0100 Committer: Christian Schneider Committed: Fri Dec 12 18:16:36 2014 +0100 ---------------------------------------------------------------------- .../camel/component/jetty/CamelHttpClient.java | 71 +---- .../camel/component/jetty/CamelHttpClient8.java | 50 +++ .../camel/component/jetty/CamelHttpClient9.java | 41 +++ .../component/jetty/JettyContentExchange.java | 276 +++-------------- .../component/jetty/JettyContentExchange9.java | 302 +++++++++++++++++++ .../component/jetty/JettyHttpComponent.java | 14 +- .../component/jetty/JettyHttpComponent8.java | 11 + .../component/jetty/JettyHttpComponent9.java | 11 + .../component/jetty/JettyHttpProducer.java | 2 +- .../services/org/apache/camel/component/jetty | 2 +- .../JettyComponentSpringConfiguredTest.xml | 2 +- .../camel/component/jetty/jetty-https.xml | 2 +- 12 files changed, 466 insertions(+), 318 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/95b16c53/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient.java index 45f09ba..3018f1f 100644 --- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient.java +++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient.java @@ -16,42 +16,23 @@ */ package org.apache.camel.component.jetty; -import java.util.Collection; import java.util.concurrent.Executor; import javax.net.ssl.SSLContext; import org.apache.camel.util.ObjectHelper; import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.server.Server; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.util.thread.QueuedThreadPool; -import org.eclipse.jetty.util.thread.ThreadPool; -public class CamelHttpClient extends HttpClient { +public abstract class CamelHttpClient extends HttpClient { private boolean supportRedirect; - - public CamelHttpClient() { - super(); - setConnectorTypeJetty8(); - } - + public CamelHttpClient(SslContextFactory sslContextFactory) { super(sslContextFactory); - setConnectorTypeJetty8(); } - - private void setConnectorTypeJetty8() { - if (Server.getVersion().startsWith("8")) { - try { - HttpClient.class.getMethod("setConnectorType", Integer.TYPE).invoke(this, 2); - } catch (Throwable t) { - throw new RuntimeException(t); - } - } - } - + @Deprecated /** * It does nothing here, please setup SslContextFactory directly, it will be removed in Camel 2.16.0 @@ -76,51 +57,11 @@ public class CamelHttpClient extends HttpClient { super.doStart(); } - private boolean hasThreadPool() { - try { - return getClass().getMethod("getExecutor").invoke(this) != null; - } catch (Exception ex) { - try { - return getClass().getMethod("getThreadPool").invoke(this) != null; - } catch (Exception ex2) { - throw new RuntimeException(ex); - } - } - } + protected abstract boolean hasThreadPool(); - void setThreadPoolOrExecutor(Executor pool) { - try { - getClass().getMethod("setExecutor", Executor.class).invoke(this, pool); - } catch (Exception ex) { - try { - getClass().getMethod("setThreadPool", ThreadPool.class).invoke(this, pool); - } catch (Exception ex2) { - throw new RuntimeException(ex); - } - } - } + protected abstract void setThreadPoolOrExecutor(Executor pool); - public void setProxy(String host, int port) { - try { - if (Server.getVersion().startsWith("8")) { - //setProxy(new org.eclipse.jetty.client.Address(host, port)); - Class c = Class.forName("org.eclipse.jetty.client.Address"); - Object o = c.getConstructor(String.class, Integer.TYPE).newInstance(host, port); - this.getClass().getMethod("setProxy", c).invoke(this, o); - } else { - //getProxyConfiguration().getProxies().add(new org.eclipse.jetty.client.HttpProxy(host, port)); - Object o = this.getClass().getMethod("getProxyConfiguration").invoke(this); - @SuppressWarnings("unchecked") - Collection c = (Collection)o.getClass().getMethod("getProxies").invoke(o); - c.clear(); - Class cls = Class.forName("org.eclipse.jetty.client.HttpProxy"); - o = cls.getConstructor(String.class, Integer.TYPE).newInstance(host, port); - c.add(o); - } - } catch (Throwable t) { - throw new RuntimeException(t); - } - } + public abstract void setProxy(String host, int port); public boolean isSupportRedirect() { return supportRedirect; http://git-wip-us.apache.org/repos/asf/camel/blob/95b16c53/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient8.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient8.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient8.java new file mode 100644 index 0000000..993f52a --- /dev/null +++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient8.java @@ -0,0 +1,50 @@ +package org.apache.camel.component.jetty; + +import java.util.concurrent.Executor; + +import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.util.ssl.SslContextFactory; +import org.eclipse.jetty.util.thread.ThreadPool; + +public class CamelHttpClient8 extends CamelHttpClient { + + public CamelHttpClient8(SslContextFactory sslContextFactory) { + super(sslContextFactory); + setConnectorType(); + } + + private void setConnectorType() { + try { + HttpClient.class.getMethod("setConnectorType", Integer.TYPE).invoke(this, 2); + } catch (Throwable t) { + throw new RuntimeException(t); + } + } + + protected boolean hasThreadPool() { + try { + return getClass().getMethod("getThreadPool").invoke(this) != null; + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + protected void setThreadPoolOrExecutor(Executor pool) { + try { + getClass().getMethod("setThreadPool", ThreadPool.class).invoke(this, pool); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + public void setProxy(String host, int port) { + try { + // setProxy(new org.eclipse.jetty.client.Address(host, port)); + Class c = Class.forName("org.eclipse.jetty.client.Address"); + Object o = c.getConstructor(String.class, Integer.TYPE).newInstance(host, port); + this.getClass().getMethod("setProxy", c).invoke(this, o); + } catch (Throwable t) { + throw new RuntimeException(t); + } + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/95b16c53/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient9.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient9.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient9.java new file mode 100644 index 0000000..8ca7729 --- /dev/null +++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient9.java @@ -0,0 +1,41 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.jetty; + +import java.util.concurrent.Executor; + +import org.eclipse.jetty.util.ssl.SslContextFactory; + +public class CamelHttpClient9 extends CamelHttpClient { + + public CamelHttpClient9(SslContextFactory sslContextFactory) { + super(sslContextFactory); + } + + protected boolean hasThreadPool() { + return getExecutor() != null; + } + + protected void setThreadPoolOrExecutor(Executor pool) { + setExecutor(pool); + } + + public void setProxy(String host, int port) { + getProxyConfiguration().getProxies().add(new org.eclipse.jetty.client.HttpProxy(host, port)); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/95b16c53/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java index 212fde9..046caa8 100644 --- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java +++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java @@ -1,254 +1,46 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ package org.apache.camel.component.jetty; -import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; import java.util.Collection; import java.util.Map; -import java.util.TreeMap; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; import org.apache.camel.AsyncCallback; -import org.apache.camel.CamelExchangeException; -import org.apache.camel.Exchange; -import org.apache.camel.ExchangeTimedOutException; import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.api.Request; -import org.eclipse.jetty.client.api.Response; -import org.eclipse.jetty.client.api.Result; -import org.eclipse.jetty.client.util.BufferingResponseListener; -import org.eclipse.jetty.client.util.BytesContentProvider; -import org.eclipse.jetty.client.util.InputStreamContentProvider; -import org.eclipse.jetty.client.util.StringContentProvider; -import org.eclipse.jetty.http.HttpFields; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Jetty specific exchange which keeps track of the the request and response. - * - * @version - */ -public class JettyContentExchange { - - private static final Logger LOG = LoggerFactory.getLogger(JettyContentExchange.class); - - private volatile Exchange exchange; - private volatile AsyncCallback callback; - private volatile JettyHttpBinding jettyBinding; - private volatile HttpClient client; - private final CountDownLatch done = new CountDownLatch(1); - private Request request; - private Response response; - private byte[] responseContent; - - private String requestContentType; - - private boolean supportRedirect; - - public JettyContentExchange(Exchange exchange, JettyHttpBinding jettyBinding, - final HttpClient client) { - super(); // keep headers by default - this.exchange = exchange; - this.jettyBinding = jettyBinding; - this.client = client; - } - - public void setCallback(AsyncCallback callback) { - this.callback = callback; - } - - protected void onRequestComplete() { - LOG.trace("onRequestComplete"); - closeRequestContentSource(); - } - - protected void onResponseComplete(Result result, byte[] content, String contentType) { - LOG.trace("onResponseComplete"); - done.countDown(); - this.response = result.getResponse(); - this.responseContent = content; - if (callback == null) { - // this is only for the async callback - return; - } - try { - jettyBinding.populateResponse(exchange, this); - } catch (Exception e) { - exchange.setException(e); - } finally { - callback.done(false); - } - } - - protected void onExpire() { - LOG.trace("onExpire"); - - // need to close the request input stream - closeRequestContentSource(); - doTaskCompleted(new ExchangeTimedOutException(exchange, client.getConnectTimeout())); - } - - protected void onException(Throwable ex) { - LOG.trace("onException {}", ex); - - // need to close the request input stream - closeRequestContentSource(); - doTaskCompleted(ex); - } - - protected void onConnectionFailed(Throwable ex) { - LOG.trace("onConnectionFailed {}", ex); - - // need to close the request input stream - closeRequestContentSource(); - doTaskCompleted(ex); - } - - public byte[] getBody() { - // must return the content as raw bytes - return getResponseContentBytes(); - } - - public String getUrl() { - try { - return this.request.getURI().toURL().toExternalForm(); - } catch (MalformedURLException e) { - throw new IllegalStateException(e.getMessage(), e); - } - } - - protected void closeRequestContentSource() { - tryClose(this.request.getContent()); - } - - private void tryClose(Object obj) { - if (obj instanceof Closeable) { - try { - ((Closeable)obj).close(); - } catch (IOException e) { - // Ignore - } - } - } - - protected void doTaskCompleted(Throwable ex) { - if (ex instanceof TimeoutException) { - exchange.setException(new ExchangeTimedOutException(exchange, request.getTimeout())); - } else { - exchange.setException(new CamelExchangeException("JettyClient failed cause by: " + ex.getMessage(), exchange, ex)); - } - done.countDown(); - - if (callback != null) { - // now invoke callback to indicate we are done async - callback.done(false); - } - } - - public void setRequestContentType(String contentType) { - this.requestContentType = contentType; - } - - public int getResponseStatus() { - return this.response.getStatus(); - } - - public void setMethod(String method) { - this.request.method(method); - } - - public void setTimeout(long timeout) { - this.request.timeout(timeout, TimeUnit.MILLISECONDS); - } - - public void setURL(String url) { - this.request = client.newRequest(url); - } - - public void setRequestContent(byte[] byteArray) { - this.request.content(new BytesContentProvider(byteArray), this.requestContentType); - } - - public void setRequestContent(String data, String charset) throws UnsupportedEncodingException { - StringContentProvider cp = charset != null ? new StringContentProvider(data, charset) : new StringContentProvider(data); - this.request.content(cp, this.requestContentType); - } - public void setRequestContent(InputStream ins) { - this.request.content(new InputStreamContentProvider(ins), this.requestContentType); - } - - public void addRequestHeader(String key, String s) { - this.request.header(key, s); - } - - public void send(HttpClient client) throws IOException { - org.eclipse.jetty.client.api.Request.Listener listener = new Request.Listener.Adapter() { - - @Override - public void onSuccess(Request request) { - onRequestComplete(); - } - - @Override - public void onFailure(Request request, Throwable failure) { - onConnectionFailed(failure); - } - - }; - BufferingResponseListener responseListener = new BufferingResponseListener() { - - @Override - public void onComplete(Result result) { - if (result.isFailed()) { - doTaskCompleted(result.getFailure()); - } else { - onResponseComplete(result, getContent(), getMediaType()); - } - } - }; - request.followRedirects(supportRedirect).listener(listener).send(responseListener); - } - - protected void setResponse(Response response) { - this.response = response; - } - - public byte[] getResponseContentBytes() { - return responseContent; - } - - public Map> getResponseHeaders() { - final HttpFields f = response.getHeaders(); - Map> ret = new TreeMap>(String.CASE_INSENSITIVE_ORDER); - for (String n : f.getFieldNamesCollection()) { - ret.put(n, f.getValuesList(n)); - } - return ret; - } - - public void setSupportRedirect(boolean supportRedirect) { - this.supportRedirect = supportRedirect; - } + +public interface JettyContentExchange { + + void setCallback(AsyncCallback callback); + + byte[] getBody(); + + String getUrl(); + + void setRequestContentType(String contentType); + + int getResponseStatus(); + + void setMethod(String method); + + void setTimeout(long timeout); + + void setURL(String url); + + void setRequestContent(byte[] byteArray); + + void setRequestContent(String data, String charset) throws UnsupportedEncodingException; + + void setRequestContent(InputStream ins); + + void addRequestHeader(String key, String s); + + void send(HttpClient client) throws IOException; + + byte[] getResponseContentBytes(); + + Map> getResponseHeaders(); + + void setSupportRedirect(boolean supportRedirect); } http://git-wip-us.apache.org/repos/asf/camel/blob/95b16c53/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange9.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange9.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange9.java new file mode 100644 index 0000000..1a49413 --- /dev/null +++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange9.java @@ -0,0 +1,302 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.jetty; + +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.util.Collection; +import java.util.Map; +import java.util.TreeMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +import org.apache.camel.AsyncCallback; +import org.apache.camel.CamelExchangeException; +import org.apache.camel.Exchange; +import org.apache.camel.ExchangeTimedOutException; +import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.client.api.Request; +import org.eclipse.jetty.client.api.Response; +import org.eclipse.jetty.client.api.Result; +import org.eclipse.jetty.client.util.BufferingResponseListener; +import org.eclipse.jetty.client.util.BytesContentProvider; +import org.eclipse.jetty.client.util.InputStreamContentProvider; +import org.eclipse.jetty.client.util.StringContentProvider; +import org.eclipse.jetty.http.HttpFields; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Jetty specific exchange which keeps track of the the request and response. + * + * @version + */ +public class JettyContentExchange9 implements JettyContentExchange { + + private static final Logger LOG = LoggerFactory.getLogger(JettyContentExchange9.class); + + private volatile Exchange exchange; + private volatile AsyncCallback callback; + private volatile JettyHttpBinding jettyBinding; + private volatile HttpClient client; + private final CountDownLatch done = new CountDownLatch(1); + private Request request; + private Response response; + private byte[] responseContent; + + private String requestContentType; + + private boolean supportRedirect; + + public JettyContentExchange9(Exchange exchange, JettyHttpBinding jettyBinding, + final HttpClient client) { + super(); // keep headers by default + this.exchange = exchange; + this.jettyBinding = jettyBinding; + this.client = client; + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#setCallback(org.apache.camel.AsyncCallback) + */ + public void setCallback(AsyncCallback callback) { + this.callback = callback; + } + + protected void onRequestComplete() { + LOG.trace("onRequestComplete"); + closeRequestContentSource(); + } + + protected void onResponseComplete(Result result, byte[] content, String contentType) { + LOG.trace("onResponseComplete"); + done.countDown(); + this.response = result.getResponse(); + this.responseContent = content; + if (callback == null) { + // this is only for the async callback + return; + } + try { + jettyBinding.populateResponse(exchange, this); + } catch (Exception e) { + exchange.setException(e); + } finally { + callback.done(false); + } + } + + protected void onExpire() { + LOG.trace("onExpire"); + + // need to close the request input stream + closeRequestContentSource(); + doTaskCompleted(new ExchangeTimedOutException(exchange, client.getConnectTimeout())); + } + + protected void onException(Throwable ex) { + LOG.trace("onException {}", ex); + + // need to close the request input stream + closeRequestContentSource(); + doTaskCompleted(ex); + } + + protected void onConnectionFailed(Throwable ex) { + LOG.trace("onConnectionFailed {}", ex); + + // need to close the request input stream + closeRequestContentSource(); + doTaskCompleted(ex); + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#getBody() + */ + public byte[] getBody() { + // must return the content as raw bytes + return getResponseContentBytes(); + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#getUrl() + */ + public String getUrl() { + try { + return this.request.getURI().toURL().toExternalForm(); + } catch (MalformedURLException e) { + throw new IllegalStateException(e.getMessage(), e); + } + } + + protected void closeRequestContentSource() { + tryClose(this.request.getContent()); + } + + private void tryClose(Object obj) { + if (obj instanceof Closeable) { + try { + ((Closeable)obj).close(); + } catch (IOException e) { + // Ignore + } + } + } + + protected void doTaskCompleted(Throwable ex) { + if (ex instanceof TimeoutException) { + exchange.setException(new ExchangeTimedOutException(exchange, request.getTimeout())); + } else { + exchange.setException(new CamelExchangeException("JettyClient failed cause by: " + ex.getMessage(), exchange, ex)); + } + done.countDown(); + + if (callback != null) { + // now invoke callback to indicate we are done async + callback.done(false); + } + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#setRequestContentType(java.lang.String) + */ + public void setRequestContentType(String contentType) { + this.requestContentType = contentType; + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#getResponseStatus() + */ + public int getResponseStatus() { + return this.response.getStatus(); + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#setMethod(java.lang.String) + */ + public void setMethod(String method) { + this.request.method(method); + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#setTimeout(long) + */ + public void setTimeout(long timeout) { + this.request.timeout(timeout, TimeUnit.MILLISECONDS); + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#setURL(java.lang.String) + */ + public void setURL(String url) { + this.request = client.newRequest(url); + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#setRequestContent(byte[]) + */ + public void setRequestContent(byte[] byteArray) { + this.request.content(new BytesContentProvider(byteArray), this.requestContentType); + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#setRequestContent(java.lang.String, java.lang.String) + */ + public void setRequestContent(String data, String charset) throws UnsupportedEncodingException { + StringContentProvider cp = charset != null ? new StringContentProvider(data, charset) : new StringContentProvider(data); + this.request.content(cp, this.requestContentType); + } + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#setRequestContent(java.io.InputStream) + */ + public void setRequestContent(InputStream ins) { + this.request.content(new InputStreamContentProvider(ins), this.requestContentType); + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#addRequestHeader(java.lang.String, java.lang.String) + */ + public void addRequestHeader(String key, String s) { + this.request.header(key, s); + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#send(org.eclipse.jetty.client.HttpClient) + */ + public void send(HttpClient client) throws IOException { + org.eclipse.jetty.client.api.Request.Listener listener = new Request.Listener.Adapter() { + + @Override + public void onSuccess(Request request) { + onRequestComplete(); + } + + @Override + public void onFailure(Request request, Throwable failure) { + onConnectionFailed(failure); + } + + }; + BufferingResponseListener responseListener = new BufferingResponseListener() { + + @Override + public void onComplete(Result result) { + if (result.isFailed()) { + doTaskCompleted(result.getFailure()); + } else { + onResponseComplete(result, getContent(), getMediaType()); + } + } + }; + request.followRedirects(supportRedirect).listener(listener).send(responseListener); + } + + protected void setResponse(Response response) { + this.response = response; + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#getResponseContentBytes() + */ + public byte[] getResponseContentBytes() { + return responseContent; + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#getResponseHeaders() + */ + public Map> getResponseHeaders() { + final HttpFields f = response.getHeaders(); + Map> ret = new TreeMap>(String.CASE_INSENSITIVE_ORDER); + for (String n : f.getFieldNamesCollection()) { + ret.put(n, f.getValuesList(n)); + } + return ret; + } + + /* (non-Javadoc) + * @see org.apache.camel.component.jetty.JettyContentExchangeI#setSupportRedirect(boolean) + */ + public void setSupportRedirect(boolean supportRedirect) { + this.supportRedirect = supportRedirect; + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/95b16c53/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java index 92ad01c..27374da 100644 --- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java +++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java @@ -95,7 +95,8 @@ import org.slf4j.LoggerFactory; * * @version */ -public class JettyHttpComponent extends HttpComponent implements RestConsumerFactory { +@SuppressWarnings("deprecation") +public abstract class JettyHttpComponent extends HttpComponent implements RestConsumerFactory { public static final String TMP_DIR = "CamelJettyTempDir"; protected static final HashMap CONNECTORS = new HashMap(); @@ -528,6 +529,7 @@ public class JettyHttpComponent extends HttpComponent implements RestConsumerFac SslContextFactory con = sslSocketConnectors.get(endpoint.getPort()); if (con != null) { SslConnectionFactory sslConnectionFactory = new SslConnectionFactory(con, null); + @SuppressWarnings("resource") ServerConnector sc = new ServerConnector(server, sslConnectionFactory); sc.setPort(endpoint.getPort()); sc.setHost(endpoint.getHttpUri().getHost()); @@ -788,12 +790,8 @@ public class JettyHttpComponent extends HttpComponent implements RestConsumerFac * @param ssl option SSL parameters */ public CamelHttpClient createHttpClient(JettyHttpEndpoint endpoint, Integer minThreads, Integer maxThreads, SSLContextParameters ssl) throws Exception { - CamelHttpClient httpClient = null; - if (ssl != null) { - httpClient = new CamelHttpClient(createSslContextFactory(ssl)); - } else { - httpClient = new CamelHttpClient(); - } + SslContextFactory sslContextFactory = (ssl != null) ? createSslContextFactory(ssl) : null; + CamelHttpClient httpClient = createCamelHttpClient(sslContextFactory); CamelContext context = endpoint.getCamelContext(); @@ -843,6 +841,8 @@ public class JettyHttpComponent extends HttpComponent implements RestConsumerFac return httpClient; } + protected abstract CamelHttpClient createCamelHttpClient(SslContextFactory sslContextFactory); + public Integer getHttpClientMinThreads() { return httpClientMinThreads; } http://git-wip-us.apache.org/repos/asf/camel/blob/95b16c53/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent8.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent8.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent8.java new file mode 100644 index 0000000..c144d1a --- /dev/null +++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent8.java @@ -0,0 +1,11 @@ +package org.apache.camel.component.jetty; + +import org.eclipse.jetty.util.ssl.SslContextFactory; + +public class JettyHttpComponent8 extends JettyHttpComponent { + + protected CamelHttpClient createCamelHttpClient(SslContextFactory sslContextFactory) { + return new CamelHttpClient8(sslContextFactory); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/95b16c53/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent9.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent9.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent9.java new file mode 100644 index 0000000..f8d256d --- /dev/null +++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent9.java @@ -0,0 +1,11 @@ +package org.apache.camel.component.jetty; + +import org.eclipse.jetty.util.ssl.SslContextFactory; + +public class JettyHttpComponent9 extends JettyHttpComponent { + + protected CamelHttpClient createCamelHttpClient(SslContextFactory sslContextFactory) { + return new CamelHttpClient9(sslContextFactory); + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/95b16c53/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpProducer.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpProducer.java index 8384a02..ab2bb20 100644 --- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpProducer.java +++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpProducer.java @@ -120,7 +120,7 @@ public class JettyHttpProducer extends DefaultProducer implements AsyncProcessor HttpMethods methodToUse = HttpHelper.createMethod(exchange, getEndpoint(), exchange.getIn().getBody() != null); String method = methodToUse.createMethod(url).getName(); - JettyContentExchange httpExchange = new JettyContentExchange(exchange, getBinding(), client); + JettyContentExchange httpExchange = new JettyContentExchange9(exchange, getBinding(), client); httpExchange.setURL(url); // Url has to be set first httpExchange.setMethod(method); http://git-wip-us.apache.org/repos/asf/camel/blob/95b16c53/components/camel-jetty/src/main/resources/META-INF/services/org/apache/camel/component/jetty ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/main/resources/META-INF/services/org/apache/camel/component/jetty b/components/camel-jetty/src/main/resources/META-INF/services/org/apache/camel/component/jetty index 99a15df..e0d1a23 100644 --- a/components/camel-jetty/src/main/resources/META-INF/services/org/apache/camel/component/jetty +++ b/components/camel-jetty/src/main/resources/META-INF/services/org/apache/camel/component/jetty @@ -14,4 +14,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -class=org.apache.camel.component.jetty.JettyHttpComponent \ No newline at end of file +class=org.apache.camel.component.jetty.JettyHttpComponent9 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/95b16c53/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/JettyComponentSpringConfiguredTest.xml ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/JettyComponentSpringConfiguredTest.xml b/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/JettyComponentSpringConfiguredTest.xml index 3e6bc99..2235752 100644 --- a/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/JettyComponentSpringConfiguredTest.xml +++ b/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/JettyComponentSpringConfiguredTest.xml @@ -22,7 +22,7 @@ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd "> - + http://git-wip-us.apache.org/repos/asf/camel/blob/95b16c53/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/jetty-https.xml ---------------------------------------------------------------------- diff --git a/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/jetty-https.xml b/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/jetty-https.xml index 763c0e8..ace8d82 100644 --- a/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/jetty-https.xml +++ b/components/camel-jetty/src/test/resources/org/apache/camel/component/jetty/jetty-https.xml @@ -21,7 +21,7 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd "> - +