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/12 18:23:46 UTC
[6/6] camel git commit: Merge branch 'temp-jetty9' of
https://git-wip-us.apache.org/repos/asf/camel into temp-jetty9
Merge branch 'temp-jetty9' of https://git-wip-us.apache.org/repos/asf/camel into temp-jetty9
Conflicts:
components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelHttpClient.java
components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java
components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpProducer.java
components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteAliasTest.java
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/cf0618d9
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cf0618d9
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cf0618d9
Branch: refs/heads/temp-jetty9
Commit: cf0618d9b989dfed40bd5ce3ec4bd737c893c7e8
Parents: 95b16c5 0e076c0
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Fri Dec 12 18:23:23 2014 +0100
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Fri Dec 12 18:23:23 2014 +0100
----------------------------------------------------------------------
.../org/apache/camel/component/jetty/JettyContentExchange.java | 2 ++
1 file changed, 2 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/cf0618d9/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java
----------------------------------------------------------------------
diff --cc components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java
index 046caa8,212fde9..ac6fbfb
--- 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,46 -1,254 +1,48 @@@
-/**
- * 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<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;
- }
-
- 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<String, Collection<String>> getResponseHeaders();
+
+ void setSupportRedirect(boolean supportRedirect);
}