You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by cs...@apache.org on 2014/12/17 16:54:33 UTC

camel git commit: Fixing tests

Repository: camel
Updated Branches:
  refs/heads/temp-jetty9 f6d6325cd -> ea4d82462


Fixing tests


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ea4d8246
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ea4d8246
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ea4d8246

Branch: refs/heads/temp-jetty9
Commit: ea4d82462b90d421b81b11ec87b5903d523194c1
Parents: f6d6325
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Wed Dec 17 16:54:22 2014 +0100
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Wed Dec 17 16:54:22 2014 +0100

----------------------------------------------------------------------
 .../camel/component/jetty/CamelHttpClient8.java |  50 ---
 .../camel/component/jetty/CamelHttpClient9.java |  41 ---
 .../component/jetty/JettyContentExchange.java   |  18 +-
 .../component/jetty/JettyContentExchange9.java  | 302 ------------------
 .../component/jetty/JettyHttpComponent.java     |   6 +-
 .../component/jetty/JettyHttpComponent8.java    |  11 -
 .../component/jetty/JettyHttpComponent9.java    |  11 -
 .../component/jetty/JettyHttpProducer.java      |   1 +
 .../component/jetty8/CamelHttpClient8.java      |  51 ++++
 .../component/jetty8/JettyHttpComponent8.java   |  13 +
 .../component/jetty9/CamelHttpClient9.java      |  42 +++
 .../component/jetty9/JettyContentExchange9.java | 304 +++++++++++++++++++
 .../component/jetty9/JettyHttpComponent9.java   |  13 +
 .../services/org/apache/camel/component/jetty   |   2 +-
 .../JettyComponentSpringConfiguredTest.xml      |   2 +-
 .../camel/component/jetty/jetty-https.xml       |   2 +-
 16 files changed, 447 insertions(+), 422 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ea4d8246/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
deleted file mode 100644
index 993f52a..0000000
--- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient8.java
+++ /dev/null
@@ -1,50 +0,0 @@
-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/ea4d8246/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
deleted file mode 100644
index 8ca7729..0000000
--- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient9.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 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/ea4d8246/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 ac6fbfb..15d3b6f 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,10 +1,24 @@
+/**
+ * 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;
 

http://git-wip-us.apache.org/repos/asf/camel/blob/ea4d8246/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
deleted file mode 100644
index 1a49413..0000000
--- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange9.java
+++ /dev/null
@@ -1,302 +0,0 @@
-/**
- * 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<String, Collection<String>> getResponseHeaders() {
-        final HttpFields f = response.getHeaders();
-        Map<String, Collection<String>> ret = new TreeMap<String, Collection<String>>(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/ea4d8246/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 27374da..fd98e43 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
@@ -748,7 +748,9 @@ public abstract class JettyHttpComponent extends HttpComponent implements RestCo
     
     private SslContextFactory createSslContextFactory(SSLContextParameters ssl) throws GeneralSecurityException, IOException {
         SslContextFactory answer = new SslContextFactory();
-        answer.setSslContext(ssl.createSSLContext());
+        if (ssl != null) {
+            answer.setSslContext(ssl.createSSLContext());
+        }
         return answer;
     }
     
@@ -790,7 +792,7 @@ public abstract class JettyHttpComponent extends HttpComponent implements RestCo
      * @param ssl        option SSL parameters
      */
     public CamelHttpClient createHttpClient(JettyHttpEndpoint endpoint, Integer minThreads, Integer maxThreads, SSLContextParameters ssl) throws Exception {
-        SslContextFactory sslContextFactory = (ssl != null) ? createSslContextFactory(ssl) : null;
+        SslContextFactory sslContextFactory = createSslContextFactory(ssl);
         CamelHttpClient httpClient = createCamelHttpClient(sslContextFactory);
         
         CamelContext context = endpoint.getCamelContext();

http://git-wip-us.apache.org/repos/asf/camel/blob/ea4d8246/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
deleted file mode 100644
index c144d1a..0000000
--- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent8.java
+++ /dev/null
@@ -1,11 +0,0 @@
-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/ea4d8246/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
deleted file mode 100644
index f8d256d..0000000
--- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent9.java
+++ /dev/null
@@ -1,11 +0,0 @@
-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/ea4d8246/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 ab2bb20..1bcbed0 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
@@ -34,6 +34,7 @@ import org.apache.camel.Message;
 import org.apache.camel.component.http.HttpConstants;
 import org.apache.camel.component.http.HttpMethods;
 import org.apache.camel.component.http.helper.HttpHelper;
+import org.apache.camel.component.jetty9.JettyContentExchange9;
 import org.apache.camel.impl.DefaultProducer;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.camel.util.AsyncProcessorHelper;

http://git-wip-us.apache.org/repos/asf/camel/blob/ea4d8246/components/camel-jetty/src/main/java/org/apache/camel/component/jetty8/CamelHttpClient8.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty8/CamelHttpClient8.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty8/CamelHttpClient8.java
new file mode 100644
index 0000000..5845be0
--- /dev/null
+++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty8/CamelHttpClient8.java
@@ -0,0 +1,51 @@
+package org.apache.camel.component.jetty8;
+
+import java.util.concurrent.Executor;
+
+import org.apache.camel.component.jetty.CamelHttpClient;
+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/ea4d8246/components/camel-jetty/src/main/java/org/apache/camel/component/jetty8/JettyHttpComponent8.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty8/JettyHttpComponent8.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty8/JettyHttpComponent8.java
new file mode 100644
index 0000000..d1d49c0
--- /dev/null
+++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty8/JettyHttpComponent8.java
@@ -0,0 +1,13 @@
+package org.apache.camel.component.jetty8;
+
+import org.apache.camel.component.jetty.CamelHttpClient;
+import org.apache.camel.component.jetty.JettyHttpComponent;
+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/ea4d8246/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/CamelHttpClient9.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/CamelHttpClient9.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/CamelHttpClient9.java
new file mode 100644
index 0000000..b86b8e2
--- /dev/null
+++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/CamelHttpClient9.java
@@ -0,0 +1,42 @@
+/**
+ * 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.jetty9;
+
+import java.util.concurrent.Executor;
+
+import org.apache.camel.component.jetty.CamelHttpClient;
+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/ea4d8246/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyContentExchange9.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyContentExchange9.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyContentExchange9.java
new file mode 100644
index 0000000..e4bcf2f
--- /dev/null
+++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyContentExchange9.java
@@ -0,0 +1,304 @@
+/**
+ * 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.jetty9;
+
+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.apache.camel.component.jetty.JettyContentExchange;
+import org.apache.camel.component.jetty.JettyHttpBinding;
+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<String, Collection<String>> getResponseHeaders() {
+        final HttpFields f = response.getHeaders();
+        Map<String, Collection<String>> ret = new TreeMap<String, Collection<String>>(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/ea4d8246/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyHttpComponent9.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyHttpComponent9.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyHttpComponent9.java
new file mode 100644
index 0000000..fc6bb15
--- /dev/null
+++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty9/JettyHttpComponent9.java
@@ -0,0 +1,13 @@
+package org.apache.camel.component.jetty9;
+
+import org.apache.camel.component.jetty.CamelHttpClient;
+import org.apache.camel.component.jetty.JettyHttpComponent;
+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/ea4d8246/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 e0d1a23..d3cc88d 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.JettyHttpComponent9
\ No newline at end of file
+class=org.apache.camel.component.jetty9.JettyHttpComponent9
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/ea4d8246/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 2235752..0c3f98c 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
     ">
 
-	<bean id="jetty2" class="org.apache.camel.component.jetty.JettyHttpComponent9">
+	<bean id="jetty2" class="org.apache.camel.component.jetty9.JettyHttpComponent9">
 		<property name="enableJmx" value="true"/>
 		<property name="minThreads" value="10"/>
 		<property name="maxThreads" value="50"/>

http://git-wip-us.apache.org/repos/asf/camel/blob/ea4d8246/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 ace8d82..c8e4ae4 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
     ">
-    <bean id="jetty" class="org.apache.camel.component.jetty.JettyHttpComponent9">
+    <bean id="jetty" class="org.apache.camel.component.jetty9.JettyHttpComponent9">
         <property name="sslPassword" value="changeit"/>
         <property name="sslKeyPassword" value="changeit"/>
         <property name="keystore" value="src/test/resources/jsse/localhost.ks"/>