From a104981f613fcc6de9707a781e5d58e3e7378cb1 Mon Sep 17 00:00:00 2001 From: cpandey Date: Wed, 6 Dec 2017 15:12:34 +0530 Subject: [PATCH 1/4] Enable http2 for undertow component --- .../src/main/docs/undertow-component.adoc | 4 +++- .../component/undertow/DefaultUndertowHost.java | 14 ++++++++++++-- .../component/undertow/UndertowComponent.java | 6 +++--- .../camel/component/undertow/UndertowEndpoint.java | 10 ++++++++++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/components/camel-undertow/src/main/docs/undertow-component.adoc b/components/camel-undertow/src/main/docs/undertow-component.adoc index b81aeab7e77bc..ddadb1f713822 100644 --- a/components/camel-undertow/src/main/docs/undertow-component.adoc +++ b/components/camel-undertow/src/main/docs/undertow-component.adoc @@ -76,12 +76,13 @@ with the following path and query parameters: | *httpURI* | *Required* The url of the HTTP endpoint to use. | | URI |=== -==== Query Parameters (17 parameters): +==== Query Parameters (18 parameters): [width="100%",cols="2,5,^1,2",options="header"] |=== | Name | Description | Default | Type | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler which mean any exceptions occurred while the consumer is trying to pickup incoming messages or the likes will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions that will be logged at WARN or ERROR level and ignored. | false | boolean +| *http2Enabled* (consumer) | Specifies whether to enable HTTP2 for embedded undertow. By default http2Enabled is turned off. | false | boolean | *httpMethodRestrict* (consumer) | Used to only allow consuming if the HttpMethod matches such as GET/POST/PUT etc. Multiple methods can be specified separated by comma. | | String | *matchOnUriPrefix* (consumer) | Whether or not the consumer should try to find a target consumer by matching the URI prefix if no exact match is found. | false | Boolean | *optionsEnabled* (consumer) | Specifies whether to enable HTTP OPTIONS for this Servlet consumer. By default OPTIONS is turned off. | false | boolean @@ -98,6 +99,7 @@ with the following path and query parameters: | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported). | false | boolean | *undertowHttpBinding* (advanced) | To use a custom UndertowHttpBinding to control the mapping between Camel message and undertow. | | UndertowHttpBinding | *sslContextParameters* (security) | To configure security using SSLContextParameters | | SSLContextParameters +| *http2Enabled* (consumer) | Specifies whether to enable HTTP2 for embedded undertow. By default http2Enabled is turned off. | false | boolean |=== // endpoint options: END diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHost.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHost.java index 89447efbd941a..362799a2ba017 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHost.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHost.java @@ -19,6 +19,7 @@ import java.net.URI; import io.undertow.Undertow; +import io.undertow.UndertowOptions; import io.undertow.server.HttpHandler; import org.apache.camel.component.undertow.handlers.CamelRootHandler; @@ -37,6 +38,7 @@ public class DefaultUndertowHost implements UndertowHost { private CamelRootHandler rootHandler; private Undertow undertow; private String hostString; + private boolean http2Enabled; public DefaultUndertowHost(UndertowHostKey key) { this(key, null); @@ -47,6 +49,13 @@ public DefaultUndertowHost(UndertowHostKey key, UndertowHostOptions options) { this.options = options; rootHandler = new CamelRootHandler(new NotFoundHandler()); } + + public DefaultUndertowHost(UndertowHostKey key, UndertowHostOptions options, boolean http2Enabled) { + this.key = key; + this.options = options; + rootHandler = new CamelRootHandler(new NotFoundHandler()); + this.http2Enabled = http2Enabled; + } @Override public void validateEndpointURI(URI httpURI) { @@ -78,7 +87,8 @@ public synchronized void registerHandler(HttpHandlerRegistrationInfo registratio } } - undertow = builder.setHandler(rootHandler).build(); + + undertow = builder.setServerOption(UndertowOptions.ENABLE_HTTP2, http2Enabled).setHandler(rootHandler).build(); LOG.info("Starting Undertow server on {}://{}:{}", key.getSslContext() != null ? "https" : "http", key.getHost(), key.getPort()); try { @@ -130,4 +140,4 @@ public String toString() { } return hostString; } -} \ No newline at end of file +} diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java index 8fa093e616741..1b9c732b65d43 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java @@ -304,7 +304,7 @@ public void registerConsumer(UndertowConsumer consumer) { UndertowHostKey key = new UndertowHostKey(uri.getHost(), uri.getPort(), consumer.getEndpoint().getSslContext()); UndertowHost host = undertowRegistry.get(key); if (host == null) { - host = createUndertowHost(key); + host = createUndertowHost(key, consumer.getEndpoint().isHttp2Enabled()); undertowRegistry.put(key, host); } host.validateEndpointURI(uri); @@ -318,8 +318,8 @@ public void unregisterConsumer(UndertowConsumer consumer) { host.unregisterHandler(consumer.getHttpHandlerRegistrationInfo()); } - protected UndertowHost createUndertowHost(UndertowHostKey key) { - return new DefaultUndertowHost(key, hostOptions); + protected UndertowHost createUndertowHost(UndertowHostKey key, boolean http2Enabled) { + return new DefaultUndertowHost(key, hostOptions, http2Enabled); } public UndertowHttpBinding getUndertowHttpBinding() { diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java index 35ba81a49d3e1..b64beff764213 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java @@ -87,6 +87,8 @@ public class UndertowEndpoint extends DefaultEndpoint implements AsyncEndpoint, private boolean optionsEnabled; @UriParam(label = "producer") private CookieHandler cookieHandler; + @UriParam(label = "consumer", defaultValue = "false", description = "Specifies whether to enable HTTP2 for embedded undertow. By default http2Enabled is turned off.") + private boolean http2Enabled; public UndertowEndpoint(String uri, UndertowComponent component) throws URISyntaxException { super(uri, component); @@ -307,6 +309,14 @@ public CookieHandler getCookieHandler() { public void setCookieHandler(CookieHandler cookieHandler) { this.cookieHandler = cookieHandler; } + + public boolean isHttp2Enabled() { + return http2Enabled; + } + + public void setHttp2Enabled(boolean http2Enabled) { + this.http2Enabled = http2Enabled; + } @Override protected void doStart() throws Exception { From ffdb9ab9013e5d7f35cd41cdb1d85443af9143d2 Mon Sep 17 00:00:00 2001 From: cpandey Date: Wed, 6 Dec 2017 15:30:26 +0530 Subject: [PATCH 2/4] Enable http2 for undertow component --- components/camel-undertow/src/main/docs/undertow-component.adoc | 1 - 1 file changed, 1 deletion(-) diff --git a/components/camel-undertow/src/main/docs/undertow-component.adoc b/components/camel-undertow/src/main/docs/undertow-component.adoc index ddadb1f713822..d23603e71f828 100644 --- a/components/camel-undertow/src/main/docs/undertow-component.adoc +++ b/components/camel-undertow/src/main/docs/undertow-component.adoc @@ -99,7 +99,6 @@ with the following path and query parameters: | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported). | false | boolean | *undertowHttpBinding* (advanced) | To use a custom UndertowHttpBinding to control the mapping between Camel message and undertow. | | UndertowHttpBinding | *sslContextParameters* (security) | To configure security using SSLContextParameters | | SSLContextParameters -| *http2Enabled* (consumer) | Specifies whether to enable HTTP2 for embedded undertow. By default http2Enabled is turned off. | false | boolean |=== // endpoint options: END From 605c8e39eca17d8cc4920b3bb2d741b4687ccad9 Mon Sep 17 00:00:00 2001 From: cpandey Date: Wed, 6 Dec 2017 19:23:20 +0530 Subject: [PATCH 3/4] Enable http2 for undertow component --- .../src/main/docs/undertow-component.adoc | 3 +-- .../component/undertow/DefaultUndertowHost.java | 15 +++++---------- .../component/undertow/UndertowComponent.java | 6 +++--- .../component/undertow/UndertowEndpoint.java | 10 ---------- .../component/undertow/UndertowHostOptions.java | 14 ++++++++++++++ 5 files changed, 23 insertions(+), 25 deletions(-) diff --git a/components/camel-undertow/src/main/docs/undertow-component.adoc b/components/camel-undertow/src/main/docs/undertow-component.adoc index d23603e71f828..b81aeab7e77bc 100644 --- a/components/camel-undertow/src/main/docs/undertow-component.adoc +++ b/components/camel-undertow/src/main/docs/undertow-component.adoc @@ -76,13 +76,12 @@ with the following path and query parameters: | *httpURI* | *Required* The url of the HTTP endpoint to use. | | URI |=== -==== Query Parameters (18 parameters): +==== Query Parameters (17 parameters): [width="100%",cols="2,5,^1,2",options="header"] |=== | Name | Description | Default | Type | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler which mean any exceptions occurred while the consumer is trying to pickup incoming messages or the likes will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions that will be logged at WARN or ERROR level and ignored. | false | boolean -| *http2Enabled* (consumer) | Specifies whether to enable HTTP2 for embedded undertow. By default http2Enabled is turned off. | false | boolean | *httpMethodRestrict* (consumer) | Used to only allow consuming if the HttpMethod matches such as GET/POST/PUT etc. Multiple methods can be specified separated by comma. | | String | *matchOnUriPrefix* (consumer) | Whether or not the consumer should try to find a target consumer by matching the URI prefix if no exact match is found. | false | Boolean | *optionsEnabled* (consumer) | Specifies whether to enable HTTP OPTIONS for this Servlet consumer. By default OPTIONS is turned off. | false | boolean diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHost.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHost.java index 362799a2ba017..6b7b3c1579222 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHost.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHost.java @@ -38,7 +38,6 @@ public class DefaultUndertowHost implements UndertowHost { private CamelRootHandler rootHandler; private Undertow undertow; private String hostString; - private boolean http2Enabled; public DefaultUndertowHost(UndertowHostKey key) { this(key, null); @@ -49,13 +48,6 @@ public DefaultUndertowHost(UndertowHostKey key, UndertowHostOptions options) { this.options = options; rootHandler = new CamelRootHandler(new NotFoundHandler()); } - - public DefaultUndertowHost(UndertowHostKey key, UndertowHostOptions options, boolean http2Enabled) { - this.key = key; - this.options = options; - rootHandler = new CamelRootHandler(new NotFoundHandler()); - this.http2Enabled = http2Enabled; - } @Override public void validateEndpointURI(URI httpURI) { @@ -85,10 +77,13 @@ public synchronized void registerHandler(HttpHandlerRegistrationInfo registratio if (options.getDirectBuffers() != null) { builder.setDirectBuffers(options.getDirectBuffers()); } + if (options.getHttp2Enabled() != null) { + builder.setServerOption(UndertowOptions.ENABLE_HTTP2, options.getHttp2Enabled()); + } } - undertow = builder.setServerOption(UndertowOptions.ENABLE_HTTP2, http2Enabled).setHandler(rootHandler).build(); + undertow = builder.setHandler(rootHandler).build(); LOG.info("Starting Undertow server on {}://{}:{}", key.getSslContext() != null ? "https" : "http", key.getHost(), key.getPort()); try { @@ -140,4 +135,4 @@ public String toString() { } return hostString; } -} +} \ No newline at end of file diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java index 1b9c732b65d43..8fa093e616741 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java @@ -304,7 +304,7 @@ public void registerConsumer(UndertowConsumer consumer) { UndertowHostKey key = new UndertowHostKey(uri.getHost(), uri.getPort(), consumer.getEndpoint().getSslContext()); UndertowHost host = undertowRegistry.get(key); if (host == null) { - host = createUndertowHost(key, consumer.getEndpoint().isHttp2Enabled()); + host = createUndertowHost(key); undertowRegistry.put(key, host); } host.validateEndpointURI(uri); @@ -318,8 +318,8 @@ public void unregisterConsumer(UndertowConsumer consumer) { host.unregisterHandler(consumer.getHttpHandlerRegistrationInfo()); } - protected UndertowHost createUndertowHost(UndertowHostKey key, boolean http2Enabled) { - return new DefaultUndertowHost(key, hostOptions, http2Enabled); + protected UndertowHost createUndertowHost(UndertowHostKey key) { + return new DefaultUndertowHost(key, hostOptions); } public UndertowHttpBinding getUndertowHttpBinding() { diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java index b64beff764213..35ba81a49d3e1 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java @@ -87,8 +87,6 @@ public class UndertowEndpoint extends DefaultEndpoint implements AsyncEndpoint, private boolean optionsEnabled; @UriParam(label = "producer") private CookieHandler cookieHandler; - @UriParam(label = "consumer", defaultValue = "false", description = "Specifies whether to enable HTTP2 for embedded undertow. By default http2Enabled is turned off.") - private boolean http2Enabled; public UndertowEndpoint(String uri, UndertowComponent component) throws URISyntaxException { super(uri, component); @@ -309,14 +307,6 @@ public CookieHandler getCookieHandler() { public void setCookieHandler(CookieHandler cookieHandler) { this.cookieHandler = cookieHandler; } - - public boolean isHttp2Enabled() { - return http2Enabled; - } - - public void setHttp2Enabled(boolean http2Enabled) { - this.http2Enabled = http2Enabled; - } @Override protected void doStart() throws Exception { diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHostOptions.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHostOptions.java index fb50ba945e1a0..ba2a0da04a8cb 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHostOptions.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHostOptions.java @@ -40,6 +40,11 @@ public final class UndertowHostOptions { * Set if the Undertow host should use direct buffers. */ private Boolean directBuffers; + + /** + * Set if the Undertow host should use http2 protocol. + */ + private Boolean http2Enabled; public UndertowHostOptions() { } @@ -76,6 +81,14 @@ public void setDirectBuffers(Boolean directBuffers) { this.directBuffers = directBuffers; } + public Boolean getHttp2Enabled() { + return http2Enabled; + } + + public void setHttp2Enabled(Boolean http2Enabled) { + this.http2Enabled = http2Enabled; + } + @Override public String toString() { final StringBuilder sb = new StringBuilder("UndertowHostOptions{"); @@ -83,6 +96,7 @@ public String toString() { sb.append(", ioThreads=").append(ioThreads); sb.append(", bufferSize=").append(bufferSize); sb.append(", directBuffers=").append(directBuffers); + sb.append(", http2Enabled=").append(http2Enabled); sb.append('}'); return sb.toString(); } From 4ab37993f4fe5babd7f6431e825d56e9f8e5a028 Mon Sep 17 00:00:00 2001 From: cpandey Date: Wed, 6 Dec 2017 19:33:28 +0530 Subject: [PATCH 4/4] Enable http2 for undertow component --- .../springboot/UndertowComponentConfiguration.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/platforms/spring-boot/components-starter/camel-undertow-starter/src/main/java/org/apache/camel/component/undertow/springboot/UndertowComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-undertow-starter/src/main/java/org/apache/camel/component/undertow/springboot/UndertowComponentConfiguration.java index ce3df2dead159..8a179c3e95175 100644 --- a/platforms/spring-boot/components-starter/camel-undertow-starter/src/main/java/org/apache/camel/component/undertow/springboot/UndertowComponentConfiguration.java +++ b/platforms/spring-boot/components-starter/camel-undertow-starter/src/main/java/org/apache/camel/component/undertow/springboot/UndertowComponentConfiguration.java @@ -123,6 +123,10 @@ public static class UndertowHostOptionsNestedConfiguration { * Set if the Undertow host should use direct buffers. */ private Boolean directBuffers; + /** + * Set if the Undertow host should use http2 protocol. + */ + private Boolean http2Enabled; public Integer getWorkerThreads() { return workerThreads; @@ -155,5 +159,13 @@ public Boolean getDirectBuffers() { public void setDirectBuffers(Boolean directBuffers) { this.directBuffers = directBuffers; } + + public Boolean getHttp2Enabled() { + return http2Enabled; + } + + public void setHttp2Enabled(Boolean http2Enabled) { + this.http2Enabled = http2Enabled; + } } } \ No newline at end of file