You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2020/09/08 07:13:37 UTC

[camel] 01/02: CAMEL-15495: Ensure DefaultVertxHttpBinding sets the Content-Type header when present on the exchange

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

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

commit 078899be82a5a561c66c8703caf264d111a99add
Author: James Netherton <ja...@gmail.com>
AuthorDate: Tue Sep 8 07:43:05 2020 +0100

    CAMEL-15495: Ensure DefaultVertxHttpBinding sets the Content-Type header when present on the exchange
---
 .../vertx/http/DefaultVertxHttpBinding.java         |  7 +++++++
 .../component/vertx/http/VertxHttpProducerTest.java | 21 ++++++++++++++++++---
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/components/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/DefaultVertxHttpBinding.java b/components/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/DefaultVertxHttpBinding.java
index ea84206..5ac652a 100644
--- a/components/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/DefaultVertxHttpBinding.java
+++ b/components/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/DefaultVertxHttpBinding.java
@@ -34,6 +34,7 @@ import org.apache.camel.Message;
 import org.apache.camel.http.base.HttpHelper;
 import org.apache.camel.http.base.HttpOperationFailedException;
 import org.apache.camel.spi.HeaderFilterStrategy;
+import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
@@ -107,6 +108,12 @@ public class DefaultVertxHttpBinding implements VertxHttpBinding {
 
     @Override
     public void populateRequestHeaders(Exchange exchange, HttpRequest<Buffer> request, HeaderFilterStrategy strategy) {
+        // Ensure the Content-Type header is always added if the corresponding exchange header is present
+        String contentType = ExchangeHelper.getContentType(exchange);
+        if (ObjectHelper.isNotEmpty(contentType)) {
+            request.putHeader(Exchange.CONTENT_TYPE, contentType);
+        }
+
         // Transfer exchange headers to the HTTP request while applying the filter strategy
         Message message = exchange.getMessage();
         for (Map.Entry<String, Object> entry : message.getHeaders().entrySet()) {
diff --git a/components/camel-vertx-http/src/test/java/org/apache/camel/component/vertx/http/VertxHttpProducerTest.java b/components/camel-vertx-http/src/test/java/org/apache/camel/component/vertx/http/VertxHttpProducerTest.java
index e5e5086..9e3f406 100644
--- a/components/camel-vertx-http/src/test/java/org/apache/camel/component/vertx/http/VertxHttpProducerTest.java
+++ b/components/camel-vertx-http/src/test/java/org/apache/camel/component/vertx/http/VertxHttpProducerTest.java
@@ -23,6 +23,7 @@ import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.support.ExchangeHelper;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -49,12 +50,12 @@ public class VertxHttpProducerTest extends VertxHttpTestSupport {
 
     @Test
     public void testVertxHttpProducerWithContentType() {
-        String expectedBody = "Hello World";
+        String expectedBody = "{\"foo\": \"bar\"}";
 
-        Exchange exchange = template.request(getProducerUri(), new Processor() {
+        Exchange exchange = template.request(getProducerUri() + "/content/type", new Processor() {
             @Override
             public void process(Exchange exchange) throws Exception {
-                exchange.getMessage().setHeader(Exchange.CONTENT_TYPE, "text/html; charset=iso-8859-4");
+                exchange.getMessage().setHeader(Exchange.CONTENT_TYPE, "application/json; charset=iso-8859-4");
             }
         });
 
@@ -76,6 +77,20 @@ public class VertxHttpProducerTest extends VertxHttpTestSupport {
             public void configure() throws Exception {
                 from(getTestServerUri())
                         .setBody(constant("Hello World"));
+
+                from(getTestServerUri() + "/content/type")
+                        .process(new Processor() {
+                            @Override
+                            public void process(Exchange exchange) throws Exception {
+                                String contentType = ExchangeHelper.getContentType(exchange);
+                                if (!contentType.startsWith("application/json")) {
+                                    throw new IllegalStateException("Unexpected Content-Type header");
+                                }
+
+                                Message message = exchange.getMessage();
+                                message.setBody("{\"foo\": \"bar\"}");
+                            }
+                        });
             }
         };
     }