CAMEL-10164: swagger component for making rest calls with swagger schema validation and facade to actual HTTP client in use
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6012ddc4 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6012ddc4 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6012ddc4 Branch: refs/heads/master Commit: 6012ddc44aae2c8db4de331da2835d6c1fadd6bf Parents: 6b3f6f61 Author: Claus Ibsen <[email protected]> Authored: Fri Aug 26 13:29:57 2016 +0200 Committer: Claus Ibsen <[email protected]> Committed: Fri Aug 26 16:53:31 2016 +0200 ---------------------------------------------------------------------- .../src/main/java/org/apache/camel/Exchange.java | 2 ++ .../org/apache/camel/component/rest/RestProducer.java | 6 ++++-- .../java/org/apache/camel/http/common/HttpHelper.java | 12 +++++++++--- .../camel/component/jetty/JettyHttpComponent.java | 4 ++++ .../camel/component/netty4/http/NettyHttpHelper.java | 13 +++++++++++-- .../netty4/http/rest/RestNettyProducerGetTest.java | 2 +- .../camel/component/restlet/RestletProducer.java | 13 +++++++++++-- .../camel/component/undertow/UndertowHelper.java | 13 +++++++------ 8 files changed, 49 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/6012ddc4/camel-core/src/main/java/org/apache/camel/Exchange.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/Exchange.java b/camel-core/src/main/java/org/apache/camel/Exchange.java index 80b3b92..0a00d18 100644 --- a/camel-core/src/main/java/org/apache/camel/Exchange.java +++ b/camel-core/src/main/java/org/apache/camel/Exchange.java @@ -184,6 +184,8 @@ public interface Exchange { String REDELIVERY_MAX_COUNTER = "CamelRedeliveryMaxCounter"; String REDELIVERY_EXHAUSTED = "CamelRedeliveryExhausted"; String REDELIVERY_DELAY = "CamelRedeliveryDelay"; + String REST_HTTP_URI = "CamelRestHttpUri"; + String REST_HTTP_QUERY = "CamelRestHttpQuery"; String ROLLBACK_ONLY = "CamelRollbackOnly"; String ROLLBACK_ONLY_LAST = "CamelRollbackOnlyLast"; String ROUTE_STOP = "CamelRouteStop"; http://git-wip-us.apache.org/repos/asf/camel/blob/6012ddc4/camel-core/src/main/java/org/apache/camel/component/rest/RestProducer.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/component/rest/RestProducer.java b/camel-core/src/main/java/org/apache/camel/component/rest/RestProducer.java index 13fed37..87475d6 100644 --- a/camel-core/src/main/java/org/apache/camel/component/rest/RestProducer.java +++ b/camel-core/src/main/java/org/apache/camel/component/rest/RestProducer.java @@ -136,7 +136,8 @@ public class RestProducer extends DefaultAsyncProducer { } if (query != null) { - exchange.getIn().setHeader(Exchange.HTTP_QUERY, query); + // the query parameters for the rest call to be used + exchange.getIn().setHeader(Exchange.REST_HTTP_QUERY, query); } if (hasPath) { @@ -151,7 +152,8 @@ public class RestProducer extends DefaultAsyncProducer { } else { overrideUri = String.format("%s/%s", host, resolvedUriTemplate); } - exchange.getIn().setHeader(Exchange.HTTP_URI, overrideUri); + // the http uri for the rest call to be used + exchange.getIn().setHeader(Exchange.REST_HTTP_URI, overrideUri); } } http://git-wip-us.apache.org/repos/asf/camel/blob/6012ddc4/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java ---------------------------------------------------------------------- diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java index 9749b97..8d64351 100644 --- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java +++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java @@ -254,8 +254,10 @@ public final class HttpHelper { * @return the URL to invoke */ public static String createURL(Exchange exchange, HttpCommonEndpoint endpoint) { - String uri = null; - if (!(endpoint.isBridgeEndpoint())) { + // rest producer may provide an override url to be used which we should discard if using (hence the remove) + String uri = (String) exchange.getIn().removeHeader(Exchange.REST_HTTP_URI); + + if (uri == null && !(endpoint.isBridgeEndpoint())) { uri = exchange.getIn().getHeader(Exchange.HTTP_URI, String.class); } if (uri == null) { @@ -311,9 +313,13 @@ public final class HttpHelper { */ public static URI createURI(Exchange exchange, String url, HttpCommonEndpoint endpoint) throws URISyntaxException { URI uri = new URI(url); + // rest producer may provide an override query string to be used which we should discard if using (hence the remove) + String queryString = (String) exchange.getIn().removeHeader(Exchange.REST_HTTP_QUERY); // is a query string provided in the endpoint URI or in a header // (header overrules endpoint, raw query header overrules query header) - String queryString = exchange.getIn().getHeader(Exchange.HTTP_RAW_QUERY, String.class); + if (queryString == null) { + queryString = exchange.getIn().getHeader(Exchange.HTTP_RAW_QUERY, String.class); + } if (queryString == null) { queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class); } http://git-wip-us.apache.org/repos/asf/camel/blob/6012ddc4/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java index adc28f1..3f1ea94 100644 --- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java +++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java @@ -62,6 +62,7 @@ import org.apache.camel.util.FileUtil; import org.apache.camel.util.HostUtils; import org.apache.camel.util.IntrospectionSupport; import org.apache.camel.util.ObjectHelper; +import org.apache.camel.util.ServiceHelper; import org.apache.camel.util.StringHelper; import org.apache.camel.util.URISupport; import org.apache.camel.util.UnsafeUriCharactersEncoder; @@ -1147,6 +1148,9 @@ public abstract class JettyHttpComponent extends HttpCommonComponent implements setProperties(camelContext, consumer, config.getConsumerProperties()); } + // the endpoint must be started before creating the producer + ServiceHelper.startService(endpoint); + return consumer; } http://git-wip-us.apache.org/repos/asf/camel/blob/6012ddc4/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java ---------------------------------------------------------------------- diff --git a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java index cfdc4b4..3dc8d7e 100644 --- a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java +++ b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpHelper.java @@ -184,7 +184,11 @@ public final class NettyHttpHelper { * @return the URL to invoke */ public static String createURL(Exchange exchange, NettyHttpEndpoint endpoint) throws URISyntaxException { - String uri = endpoint.getEndpointUri(); + // rest producer may provide an override url to be used which we should discard if using (hence the remove) + String uri = (String) exchange.getIn().removeHeader(Exchange.REST_HTTP_URI); + if (uri == null) { + uri = endpoint.getEndpointUri(); + } // resolve placeholders in uri try { @@ -236,9 +240,14 @@ public final class NettyHttpHelper { */ public static URI createURI(Exchange exchange, String url, NettyHttpEndpoint endpoint) throws URISyntaxException { URI uri = new URI(url); + + // rest producer may provide an override query string to be used which we should discard if using (hence the remove) + String queryString = (String) exchange.getIn().removeHeader(Exchange.REST_HTTP_QUERY); // is a query string provided in the endpoint URI or in a header // (header overrules endpoint, raw query header overrules query header) - String queryString = exchange.getIn().getHeader(Exchange.HTTP_RAW_QUERY, String.class); + if (queryString == null) { + queryString = exchange.getIn().getHeader(Exchange.HTTP_RAW_QUERY, String.class); + } if (queryString == null) { queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class); } http://git-wip-us.apache.org/repos/asf/camel/blob/6012ddc4/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/rest/RestNettyProducerGetTest.java ---------------------------------------------------------------------- diff --git a/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/rest/RestNettyProducerGetTest.java b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/rest/RestNettyProducerGetTest.java index afbc912..bcef723 100644 --- a/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/rest/RestNettyProducerGetTest.java +++ b/components/camel-netty4-http/src/test/java/org/apache/camel/component/netty4/http/rest/RestNettyProducerGetTest.java @@ -28,7 +28,7 @@ public class RestNettyProducerGetTest extends BaseNettyTest { public void testNettyProducerGet() throws Exception { String out = fluentTemplate.withHeader("id", "123").to("direct:start").request(String.class); assertNotNull(out); - // TODO: [123, {id}];Donald Duck + // TODO: [123, 123];Donald Duck // assertEquals("123;Donald Duck", out); } http://git-wip-us.apache.org/repos/asf/camel/blob/6012ddc4/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java index a33b9e6..97116fb 100644 --- a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java +++ b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java @@ -154,7 +154,12 @@ public class RestletProducer extends DefaultAsyncProducer { } private static String buildUri(RestletEndpoint endpoint, Exchange exchange) throws CamelExchangeException { - String uri = endpoint.getProtocol() + "://" + endpoint.getHost() + ":" + endpoint.getPort() + endpoint.getUriPattern(); + // rest producer may provide an override url to be used which we should discard if using (hence the remove) + String uri = (String) exchange.getIn().removeHeader(Exchange.REST_HTTP_URI); + + if (uri == null) { + uri = endpoint.getProtocol() + "://" + endpoint.getHost() + ":" + endpoint.getPort() + endpoint.getUriPattern(); + } // substitute { } placeholders in uri and use mandatory headers LOG.trace("Substituting '(value)' placeholders in uri: {}", uri); @@ -176,7 +181,11 @@ public class RestletProducer extends DefaultAsyncProducer { matcher.reset(uri); } - String query = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class); + // rest producer may provide an override query string to be used which we should discard if using (hence the remove) + String query = (String) exchange.getIn().removeHeader(Exchange.REST_HTTP_QUERY); + if (query == null) { + query = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class); + } if (query != null) { LOG.trace("Adding query: {} to uri: {}", query, uri); uri = addQueryToUri(uri, query); http://git-wip-us.apache.org/repos/asf/camel/blob/6012ddc4/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHelper.java ---------------------------------------------------------------------- diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHelper.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHelper.java index f9eda6f..3500cae 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHelper.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowHelper.java @@ -45,7 +45,8 @@ public final class UndertowHelper { * @return the URL to invoke */ public static String createURL(Exchange exchange, UndertowEndpoint endpoint) { - String uri = exchange.getIn().getHeader(Exchange.HTTP_URI, String.class); + // rest producer may provide an override url to be used which we should discard if using (hence the remove) + String uri = (String) exchange.getIn().removeHeader(Exchange.REST_HTTP_URI); if (uri == null) { uri = endpoint.getHttpURI().toASCIIString(); } @@ -90,8 +91,12 @@ public final class UndertowHelper { */ public static URI createURI(Exchange exchange, String url, UndertowEndpoint endpoint) throws URISyntaxException { URI uri = new URI(url); + // rest producer may provide an override query string to be used which we should discard if using (hence the remove) + String queryString = (String) exchange.getIn().removeHeader(Exchange.REST_HTTP_QUERY); // is a query string provided in the endpoint URI or in a header (header overrules endpoint) - String queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class); + if (queryString == null) { + queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class); + } if (queryString == null) { queryString = endpoint.getHttpURI().getRawQuery(); } @@ -126,10 +131,6 @@ public final class UndertowHelper { /** * Creates the HttpMethod to use to call the remote server, often either its GET or POST. - * - * @param exchange the exchange - * @return the created method - * @throws URISyntaxException */ public static HttpString createMethod(Exchange exchange, UndertowEndpoint endpoint, boolean hasPayload) throws URISyntaxException { // is a query string provided in the endpoint URI or in a header (header
