Repository: camel Updated Branches: refs/heads/master 61ccc8215 -> 21ed4aa12
[CAMEL-8969] Support Content-Type in coap component Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/21ed4aa1 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/21ed4aa1 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/21ed4aa1 Branch: refs/heads/master Commit: 21ed4aa120abd61c036299ce64c69a0277d20e02 Parents: 61ccc82 Author: Daniel Kulp <dk...@apache.org> Authored: Fri Jul 24 15:29:07 2015 -0400 Committer: Daniel Kulp <dk...@apache.org> Committed: Fri Jul 24 15:29:32 2015 -0400 ---------------------------------------------------------------------- .../org/apache/camel/builder/RouteBuilder.java | 6 ++-- .../apache/camel/model/rest/RestDefinition.java | 3 ++ .../apache/camel/coap/CamelCoapResource.java | 13 +++++++-- .../org/apache/camel/coap/CoAPComponent.java | 3 +- .../camel/coap/CoAPRestComponentTest.java | 29 ++++++++++++++++---- 5 files changed, 42 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/21ed4aa1/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java index c0ea23f..a5872e9 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java +++ b/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java @@ -424,8 +424,8 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild getRestCollection().setCamelContext(camelContext); // setup rest configuration before adding the rests - if (getRestConfiguration() != null) { - for (Map.Entry<String, RestConfigurationDefinition> entry : getRestConfiguration().entrySet()) { + if (getRestConfigurations() != null) { + for (Map.Entry<String, RestConfigurationDefinition> entry : getRestConfigurations().entrySet()) { RestConfiguration config = entry.getValue().asRestConfiguration(getContext()); if ("".equals(entry.getKey())) { camelContext.setRestConfiguration(config); @@ -449,7 +449,7 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild return restCollection; } - public Map<String, RestConfigurationDefinition> getRestConfiguration() { + public Map<String, RestConfigurationDefinition> getRestConfigurations() { return restConfigurations; } http://git-wip-us.apache.org/repos/asf/camel/blob/21ed4aa1/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java index f1b9d26..ab244cb 100644 --- a/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java @@ -479,6 +479,9 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition> */ public List<RouteDefinition> asRouteDefinition(CamelContext camelContext) { List<RouteDefinition> answer = new ArrayList<RouteDefinition>(); + if (camelContext.getRestConfigurations().isEmpty()) { + camelContext.getRestConfiguration(); + } for (RestConfiguration config : camelContext.getRestConfigurations()) { addRouteDefinition(camelContext, answer, config.getComponent()); } http://git-wip-us.apache.org/repos/asf/camel/blob/21ed4aa1/components/camel-coap/src/main/java/org/apache/camel/coap/CamelCoapResource.java ---------------------------------------------------------------------- diff --git a/components/camel-coap/src/main/java/org/apache/camel/coap/CamelCoapResource.java b/components/camel-coap/src/main/java/org/apache/camel/coap/CamelCoapResource.java index ecd8e10..7c709b6 100644 --- a/components/camel-coap/src/main/java/org/apache/camel/coap/CamelCoapResource.java +++ b/components/camel-coap/src/main/java/org/apache/camel/coap/CamelCoapResource.java @@ -24,6 +24,8 @@ import java.util.concurrent.ConcurrentHashMap; import org.apache.camel.Message; import org.eclipse.californium.core.CoapResource; import org.eclipse.californium.core.coap.CoAP.ResponseCode; +import org.eclipse.californium.core.coap.MediaTypeRegistry; +import org.eclipse.californium.core.coap.OptionSet; import org.eclipse.californium.core.network.Exchange; import org.eclipse.californium.core.server.resources.CoapExchange; import org.eclipse.californium.core.server.resources.Resource; @@ -86,7 +88,8 @@ final class CamelCoapResource extends CoapResource { camelExchange = consumer.getEndpoint().createExchange(); consumer.createUoW(camelExchange); - for (String s : exchange.getRequest().getOptions().getUriQuery()) { + OptionSet options = exchange.getRequest().getOptions(); + for (String s : options.getUriQuery()) { int i = s.indexOf('='); if (i == -1) { camelExchange.getIn().setHeader(s, ""); @@ -95,6 +98,11 @@ final class CamelCoapResource extends CoapResource { } } + if (options.hasContentFormat()) { + String mt = MediaTypeRegistry.toString(options.getContentFormat()); + camelExchange.getIn().setHeader(org.apache.camel.Exchange.CONTENT_TYPE, mt); + } + List<String> path = exchange.getRequest().getOptions().getUriPath(); LinkedList<Resource> resources = new LinkedList<>(); Resource r = this; @@ -121,7 +129,8 @@ final class CamelCoapResource extends CoapResource { consumer.getProcessor().process(camelExchange); Message target = camelExchange.hasOut() ? camelExchange.getOut() : camelExchange.getIn(); - cexchange.respond(ResponseCode.CONTENT, target.getBody(byte[].class)); + int format = MediaTypeRegistry.parse(target.getHeader(org.apache.camel.Exchange.CONTENT_TYPE, String.class)); + cexchange.respond(ResponseCode.CONTENT, target.getBody(byte[].class), format); } catch (Exception e) { cexchange.respond(ResponseCode.INTERNAL_SERVER_ERROR, e.getMessage()); http://git-wip-us.apache.org/repos/asf/camel/blob/21ed4aa1/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPComponent.java b/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPComponent.java index a0f265b..9ad4d42 100644 --- a/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPComponent.java +++ b/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPComponent.java @@ -92,7 +92,8 @@ public class CoAPComponent extends UriEndpointComponent implements RestConsumerF String query = URISupport.createQueryString(map); - String url = config.getScheme() + "://" + config.getHost(); + String url = (config.getScheme() == null ? "coap" : config.getScheme()) + + "://" + config.getHost(); if (config.getPort() != -1) { url += ":" + config.getPort(); } http://git-wip-us.apache.org/repos/asf/camel/blob/21ed4aa1/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTest.java ---------------------------------------------------------------------- diff --git a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTest.java b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTest.java index 2ac3137..d201578 100644 --- a/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTest.java +++ b/components/camel-coap/src/test/java/org/apache/camel/coap/CoAPRestComponentTest.java @@ -19,6 +19,7 @@ package org.apache.camel.coap; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; +import java.net.URLConnection; import org.apache.camel.Exchange; import org.apache.camel.Processor; @@ -33,8 +34,15 @@ import org.eclipse.californium.core.network.config.NetworkConfig; import org.junit.Test; public class CoAPRestComponentTest extends CamelTestSupport { - int coapport = AvailablePortFinder.getNextAvailable(); - int jettyport = AvailablePortFinder.getNextAvailable(); + static int coapport = AvailablePortFinder.getNextAvailable(); + static int jettyport = AvailablePortFinder.getNextAvailable(); + + + /* + public boolean isCreateCamelContextPerClass() { + return true; + } + */ @Test public void testCoAP() throws Exception { @@ -42,6 +50,13 @@ public class CoAPRestComponentTest extends CamelTestSupport { CoapClient client; CoapResponse rsp; + + URL url = new URL("http://localhost:" + jettyport + "/TestResource/Ducky"); + URLConnection connect = url.openConnection(); + InputStream ins = connect.getInputStream(); + assertEquals("Hello Ducky", IOConverter.toString(new InputStreamReader(ins))); + + client = new CoapClient("coap://localhost:" + coapport + "/TestResource/Ducky"); client.setTimeout(1000000); rsp = client.get(); @@ -55,11 +70,8 @@ public class CoAPRestComponentTest extends CamelTestSupport { assertEquals("Hello Ducky", rsp.getResponseText()); rsp = client.post("data", MediaTypeRegistry.TEXT_PLAIN); assertEquals("Hello Ducky: data", rsp.getResponseText()); + assertEquals(MediaTypeRegistry.TEXT_PLAIN, rsp.getOptions().getContentFormat()); - - URL url = new URL("http://localhost:" + jettyport + "/TestResource/Ducky"); - InputStream ins = url.openConnection().getInputStream(); - assertEquals("Hello Ducky", IOConverter.toString(new InputStreamReader(ins))); } @Override @@ -85,7 +97,12 @@ public class CoAPRestComponentTest extends CamelTestSupport { from("direct:post1").process(new Processor() { public void process(Exchange exchange) throws Exception { String id = exchange.getIn().getHeader("id", String.class); + String ct = exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class); + if (!"text/plain".equals(ct)) { + throw new Exception("No content type"); + } exchange.getOut().setBody("Hello " + id + ": " + exchange.getIn().getBody(String.class)); + exchange.getOut().setHeader(Exchange.CONTENT_TYPE, ct); } }); }