You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zr...@apache.org on 2019/09/11 08:21:26 UTC
[camel] branch master updated: CAMEL-13966: Netty-HTTP proxy mode
refactor
This is an automated email from the ASF dual-hosted git repository.
zregvart 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 ee0520c CAMEL-13966: Netty-HTTP proxy mode refactor
ee0520c is described below
commit ee0520caca3c2f8cf5a97446086ef8f35c6aebdd
Author: Zoran Regvart <zr...@apache.org>
AuthorDate: Wed Sep 11 10:21:19 2019 +0200
CAMEL-13966: Netty-HTTP proxy mode refactor
This removes the caching of the origin request in the Exchange property
and instead tries to compare the message and message body to see if the
message still contains the origin request.
---
.../component/netty/http/DefaultNettyHttpBinding.java | 13 +++----------
.../camel/component/netty/http/NettyHttpConstants.java | 1 -
.../netty/http/handlers/HttpServerChannelHandler.java | 2 --
.../camel/component/netty/http/ProxyProtocolTest.java | 18 ++++++++++++++++--
4 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
index 2ef3db5..c4d7601 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
@@ -530,22 +530,15 @@ public class DefaultNettyHttpBinding implements NettyHttpBinding, Cloneable {
httpMethod = HttpMethod.valueOf(headerMethod);
}
- final Exchange exchange = message.getExchange();
- final Object proxyRequest;
- if (exchange != null) {
- proxyRequest = exchange.getProperty(NettyHttpConstants.PROXY_REQUEST);
- } else {
- proxyRequest = null;
- }
-
HttpRequest request = null;
if (message instanceof NettyHttpMessage) {
// if the request is already given we should set the values
// from message headers and pass on the same request
final FullHttpRequest givenRequest = ((NettyHttpMessage) message).getHttpRequest();
// we need to make sure that the givenRequest is the original
- // request received by the proxy
- if (givenRequest != null && proxyRequest == givenRequest) {
+ // request received by the proxy, only when the body wasn't
+ // modified by a processor on route
+ if (givenRequest != null && givenRequest.content() == body) {
request = givenRequest
.setProtocolVersion(protocol)
.setMethod(httpMethod)
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConstants.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConstants.java
index 2ad5784..3dc3a1f 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConstants.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConstants.java
@@ -28,7 +28,6 @@ public final class NettyHttpConstants {
@Deprecated
public static final String HTTP_RESPONSE_TEXT = Exchange.HTTP_RESPONSE_TEXT;
public static final String HTTP_AUTHENTICATION = "CamelHttpAuthentication";
- public static final String PROXY_REQUEST = "NettyHttpProxyRequest";
private NettyHttpConstants() {
}
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
index 20016ee..888bede 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
@@ -41,7 +41,6 @@ import org.apache.camel.component.netty.NettyHelper;
import org.apache.camel.component.netty.handlers.ServerChannelHandler;
import org.apache.camel.component.netty.http.HttpPrincipal;
import org.apache.camel.component.netty.http.NettyHttpConfiguration;
-import org.apache.camel.component.netty.http.NettyHttpConstants;
import org.apache.camel.component.netty.http.NettyHttpConsumer;
import org.apache.camel.component.netty.http.NettyHttpSecurityConfiguration;
import org.apache.camel.component.netty.http.SecurityAuthenticator;
@@ -283,7 +282,6 @@ public class HttpServerChannelHandler extends ServerChannelHandler {
final Message in = exchange.getIn();
if (configuration.isHttpProxy()) {
- exchange.setProperty(NettyHttpConstants.PROXY_REQUEST, request);
in.removeHeader("Proxy-Connection");
}
}
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/ProxyProtocolTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/ProxyProtocolTest.java
index 759e6f3..967b487 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/ProxyProtocolTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/ProxyProtocolTest.java
@@ -31,6 +31,8 @@ import java.util.Locale;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
+import io.netty.buffer.ByteBuf;
+
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.builder.RouteBuilder;
@@ -131,14 +133,17 @@ public class ProxyProtocolTest {
@Parameters
public static Iterable<Object[]> routeOptions() {
final Function<RouteBuilder, RouteDefinition> single = r -> r.from("netty-http:proxy://localhost:" + PROXY_PORT)
+ .process(ProxyProtocolTest::uppercase)
.to("netty-http:http://localhost:" + ORIGIN_PORT)
.process(ProxyProtocolTest::uppercase);
final Function<RouteBuilder, RouteDefinition> dynamicPath = r -> r.from("netty-http:proxy://localhost:" + PROXY_PORT)
+ .process(ProxyProtocolTest::uppercase)
.toD("netty-http:http://localhost:" + ORIGIN_PORT + "/${headers." + Exchange.HTTP_PATH + "}")
.process(ProxyProtocolTest::uppercase);
final Function<RouteBuilder, RouteDefinition> dynamicUrl = r -> r.from("netty-http:proxy://localhost:" + PROXY_PORT)
+ .process(ProxyProtocolTest::uppercase)
.toD("netty-http:"
+ "${headers." + Exchange.HTTP_SCHEME + "}://"
+ "${headers." + Exchange.HTTP_HOST + "}:"
@@ -158,6 +163,12 @@ public class ProxyProtocolTest {
final String q = message.getHeader("q", String.class);
final String body = message.getBody(String.class);
+ if ("text/plain".equals(message.getHeader(Exchange.CONTENT_TYPE))) {
+ // when we send text/plain message we're using the route with
+ // uppercase processor before the netty-http producer
+ assertThat(body).isUpperCase();
+ }
+
if (ObjectHelper.isEmpty(q) && ObjectHelper.isEmpty(body)) {
message.setBody("origin server");
} else if (ObjectHelper.isEmpty(body)) {
@@ -201,8 +212,11 @@ public class ProxyProtocolTest {
private static void uppercase(final Exchange exchange) {
final Message message = exchange.getMessage();
- final String body = message.getBody(String.class);
+ final ByteBuf body = message.getBody(ByteBuf.class);
- message.setBody(body.toUpperCase(Locale.US));
+ if (body.capacity() != 0) {
+ // only if we received a payload we'll uppercase it
+ message.setBody(body.toString(StandardCharsets.US_ASCII).toUpperCase(Locale.US));
+ }
}
}