You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2018/06/09 13:39:05 UTC

[camel] branch master updated: CAMEL-12566: camel-stream - Add support for HTTP headers

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new 2592b30  CAMEL-12566: camel-stream - Add support for HTTP headers
2592b30 is described below

commit 2592b3032700d8834220ed239c5feabce62d39cc
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Jun 9 15:38:16 2018 +0200

    CAMEL-12566: camel-stream - Add support for HTTP headers
---
 .../camel-stream/src/main/docs/stream-component.adoc       |  3 ++-
 .../org/apache/camel/component/stream/StreamComponent.java |  7 +++++++
 .../org/apache/camel/component/stream/StreamConsumer.java  |  3 +++
 .../org/apache/camel/component/stream/StreamEndpoint.java  | 14 ++++++++++++++
 .../org/apache/camel/component/stream/StreamProducer.java  |  5 +++++
 .../org/apache/camel/component/stream/StreamToUrlTest.java |  5 ++++-
 .../camel/component/stream/mock/MockURLConnection.java     | 12 ++++++++++++
 7 files changed, 47 insertions(+), 2 deletions(-)

diff --git a/components/camel-stream/src/main/docs/stream-component.adoc b/components/camel-stream/src/main/docs/stream-component.adoc
index e0f5a69..5eb5134 100644
--- a/components/camel-stream/src/main/docs/stream-component.adoc
+++ b/components/camel-stream/src/main/docs/stream-component.adoc
@@ -72,7 +72,7 @@ with the following path and query parameters:
 |===
 
 
-==== Query Parameters (19 parameters):
+==== Query Parameters (20 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -96,6 +96,7 @@ with the following path and query parameters:
 | *autoCloseCount* (producer) | Number of messages to process before closing stream on Producer side. Never close stream by default (only when Producer is stopped). If more messages are sent, the stream is reopened for another autoCloseCount batch. |  | int
 | *closeOnDone* (producer) | This option is used in combination with Splitter and streaming to the same file. The idea is to keep the stream open and only close when the Splitter is done, to improve performance. Mind this requires that you only stream to the same file, and not 2 or more files. | false | boolean
 | *delay* (producer) | Initial delay in milliseconds before producing the stream. |  | long
+| *httpHeaders* (advanced) | Optional http headers to use in request when using HTTP URL. |  | Map
 | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
 |===
 // endpoint options: END
diff --git a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamComponent.java b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamComponent.java
index b87a2e4..d50d7f2 100644
--- a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamComponent.java
+++ b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamComponent.java
@@ -20,6 +20,7 @@ import java.util.Map;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.impl.UriEndpointComponent;
+import org.apache.camel.util.URISupport;
 
 /**
  * Component providing streams connectivity
@@ -33,6 +34,12 @@ public class StreamComponent extends UriEndpointComponent {
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
         StreamEndpoint answer = new StreamEndpoint(uri, this);
+
+        Map<String, Object> httpHeaders = URISupport.extractProperties(parameters, "httpHeaders.");
+        if (!httpHeaders.isEmpty()) {
+            answer.setHttpHeaders(httpHeaders);
+        }
+
         answer.setKind(remaining);
         setProperties(answer, parameters);
         return answer;
diff --git a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java
index c2cd374..ac39fde 100644
--- a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java
+++ b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java
@@ -296,6 +296,9 @@ public class StreamConsumer extends DefaultConsumer implements Runnable {
 
         URL url = new URL(u);
         URLConnection c = url.openConnection();
+        if (endpoint.getHttpHeaders() != null) {
+            endpoint.getHttpHeaders().forEach((k, v) -> c.addRequestProperty(k, v.toString()));
+        }
         return c.getInputStream();
     }
 
diff --git a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamEndpoint.java b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamEndpoint.java
index 2e0ca70..50eb80a 100644
--- a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamEndpoint.java
+++ b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamEndpoint.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.stream;
 
 import java.nio.charset.Charset;
+import java.util.Map;
 
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
@@ -72,6 +73,8 @@ public class StreamEndpoint extends DefaultEndpoint {
     private int autoCloseCount;
     @UriParam(label = "consumer")
     private GroupStrategy groupStrategy = new DefaultGroupStrategy();
+    @UriParam(label = "advanced", prefix = "httpHeaders.", multiValue = true)
+    private Map<String, Object> httpHeaders;
 
     public StreamEndpoint(String endpointUri, Component component) throws Exception {
         super(endpointUri, component);
@@ -300,6 +303,17 @@ public class StreamEndpoint extends DefaultEndpoint {
         return charset;
     }
 
+    public Map<String, Object> getHttpHeaders() {
+        return httpHeaders;
+    }
+
+    /**
+     * Optional http headers to use in request when using HTTP URL.
+     */
+    public void setHttpHeaders(Map<String, Object> httpHeaders) {
+        this.httpHeaders = httpHeaders;
+    }
+
     // Implementations
     //-------------------------------------------------------------------------
 
diff --git a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamProducer.java b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamProducer.java
index feb39cc..1e5e5fd 100644
--- a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamProducer.java
+++ b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamProducer.java
@@ -91,6 +91,11 @@ public class StreamProducer extends DefaultProducer {
         URL url = new URL(u);
         URLConnection c = url.openConnection();
         c.setDoOutput(true);
+
+        if (endpoint.getHttpHeaders() != null) {
+            endpoint.getHttpHeaders().forEach((k, v) -> c.addRequestProperty(k, v.toString()));
+        }
+
         return c.getOutputStream();
     }
 
diff --git a/components/camel-stream/src/test/java/org/apache/camel/component/stream/StreamToUrlTest.java b/components/camel-stream/src/test/java/org/apache/camel/component/stream/StreamToUrlTest.java
index 92c2bb6..c1f1bbd 100644
--- a/components/camel-stream/src/test/java/org/apache/camel/component/stream/StreamToUrlTest.java
+++ b/components/camel-stream/src/test/java/org/apache/camel/component/stream/StreamToUrlTest.java
@@ -51,7 +51,7 @@ public class StreamToUrlTest extends CamelTestSupport {
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                from("direct:start").to("stream:url?url=mock:");
+                from("direct:start").to("stream:url?url=mock:&httpHeaders.foo=123&httpHeaders.bar=yes");
             }
         };
     }
@@ -64,6 +64,9 @@ public class StreamToUrlTest extends CamelTestSupport {
         // Then
         String messageReceived = new String(buffer.toByteArray()).trim();
         assertEquals(message, messageReceived);
+
+        assertEquals("123", MockURLConnection.getHeaders().get("foo"));
+        assertEquals("yes", MockURLConnection.getHeaders().get("bar"));
     }
 
 }
diff --git a/components/camel-stream/src/test/java/org/apache/camel/component/stream/mock/MockURLConnection.java b/components/camel-stream/src/test/java/org/apache/camel/component/stream/mock/MockURLConnection.java
index b90d50c..84fcdc1 100644
--- a/components/camel-stream/src/test/java/org/apache/camel/component/stream/mock/MockURLConnection.java
+++ b/components/camel-stream/src/test/java/org/apache/camel/component/stream/mock/MockURLConnection.java
@@ -20,11 +20,15 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.net.URL;
 import java.net.URLConnection;
+import java.util.LinkedHashMap;
+import java.util.Map;
 
 public class MockURLConnection extends URLConnection {
 
     private static final ThreadLocal<OutputStream> THREAD_OUTPUT_STREAM = new ThreadLocal<>();
 
+    private static final Map<String, String> HEADERS = new LinkedHashMap<>();
+
     public MockURLConnection(URL url) {
         super(url);
     }
@@ -42,4 +46,12 @@ public class MockURLConnection extends URLConnection {
         return THREAD_OUTPUT_STREAM.get();
     }
 
+    @Override
+    public void addRequestProperty(String key, String value) {
+        HEADERS.put(key, value);
+    }
+
+    public static Map<String, String> getHeaders() {
+        return HEADERS;
+    }
 }

-- 
To stop receiving notification emails like this one, please contact
davsclaus@apache.org.