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"/>