You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/07/21 10:38:01 UTC
[1/2] camel git commit: CAMEL-8991: rest-dsl to support the toD
Repository: camel
Updated Branches:
refs/heads/master 01dead92e -> 7c23b3103
CAMEL-8991: rest-dsl to support the toD
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/574e699f
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/574e699f
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/574e699f
Branch: refs/heads/master
Commit: 574e699f0f95056bdd6e5bf6421b8bf5e2f290dd
Parents: 01dead9
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jul 21 10:24:49 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jul 21 10:24:49 2015 +0200
----------------------------------------------------------------------
.../apache/camel/model/rest/RestDefinition.java | 29 ++++++++++++-
.../apache/camel/model/rest/VerbDefinition.java | 28 +++++++++++--
.../apache/camel/model/XmlRestParseToDTest.java | 43 ++++++++++++++++++++
.../org/apache/camel/model/simpleRestToD.xml | 27 ++++++++++++
4 files changed, 122 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/574e699f/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 6804ae9..667c289 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
@@ -29,8 +29,11 @@ import javax.xml.bind.annotation.XmlRootElement;
import org.apache.camel.CamelContext;
import org.apache.camel.model.OptionalIdentifiedDefinition;
+import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.model.SendDefinition;
import org.apache.camel.model.ToDefinition;
+import org.apache.camel.model.ToDynamicDefinition;
import org.apache.camel.spi.Metadata;
import org.apache.camel.util.FileUtil;
import org.apache.camel.util.ObjectHelper;
@@ -387,7 +390,7 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
}
/**
- * Routes directly to the given endpoint.
+ * Routes directly to the given static endpoint.
* <p/>
* If you need additional routing capabilities, then use {@link #route()} instead.
*
@@ -407,6 +410,27 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
return this;
}
+ /**
+ * Routes directly to the given dynamic endpoint.
+ * <p/>
+ * If you need additional routing capabilities, then use {@link #route()} instead.
+ *
+ * @param uri the uri of the endpoint
+ * @return this builder
+ */
+ public RestDefinition toD(String uri) {
+ // add to last verb
+ if (getVerbs().isEmpty()) {
+ throw new IllegalArgumentException("Must add verb first, such as get/post/delete");
+ }
+
+ ToDynamicDefinition to = new ToDynamicDefinition(uri);
+
+ VerbDefinition verb = getVerbs().get(getVerbs().size() - 1);
+ verb.setToD(to);
+ return this;
+ }
+
public RouteDefinition route() {
// add to last verb
if (getVerbs().isEmpty()) {
@@ -462,7 +486,8 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
// it was a singular to, so add a new route and add the singular
// to as output to this route
route = new RouteDefinition();
- route.getOutputs().add(verb.getTo());
+ ProcessorDefinition def = verb.getTo() != null ? verb.getTo() : verb.getToD();
+ route.getOutputs().add(def);
}
// add the binding
http://git-wip-us.apache.org/repos/asf/camel/blob/574e699f/camel-core/src/main/java/org/apache/camel/model/rest/VerbDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/VerbDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/VerbDefinition.java
index 9c1fef8..90a32ce 100644
--- a/camel-core/src/main/java/org/apache/camel/model/rest/VerbDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/rest/VerbDefinition.java
@@ -32,6 +32,7 @@ import javax.xml.bind.annotation.XmlTransient;
import org.apache.camel.model.OptionalIdentifiedDefinition;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.model.ToDefinition;
+import org.apache.camel.model.ToDynamicDefinition;
import org.apache.camel.spi.Metadata;
/**
@@ -76,11 +77,13 @@ public class VerbDefinition extends OptionalIdentifiedDefinition<VerbDefinition>
@XmlAttribute
private String outType;
- // used by XML DSL to either select a <to> or <route>
+ // used by XML DSL to either select a <to>, <toD>, or <route>
// so we need to use the common type OptionalIdentifiedDefinition
+ // must select one of them, and hence why they are all set to required = true, but the XSD is set to only allow one of the element
@XmlElements({
- @XmlElement(required = false, name = "to", type = ToDefinition.class),
- @XmlElement(required = false, name = "route", type = RouteDefinition.class)}
+ @XmlElement(required = true, name = "to", type = ToDefinition.class),
+ @XmlElement(required = true, name = "toD", type = ToDynamicDefinition.class),
+ @XmlElement(required = true, name = "route", type = RouteDefinition.class)}
)
private OptionalIdentifiedDefinition<?> toOrRoute;
@@ -88,6 +91,8 @@ public class VerbDefinition extends OptionalIdentifiedDefinition<VerbDefinition>
@XmlTransient
private ToDefinition to;
@XmlTransient
+ private ToDynamicDefinition toD;
+ @XmlTransient
private RouteDefinition route;
@XmlTransient
private RestDefinition rest;
@@ -267,8 +272,25 @@ public class VerbDefinition extends OptionalIdentifiedDefinition<VerbDefinition>
}
}
+ public ToDynamicDefinition getToD() {
+ if (toD != null) {
+ return toD;
+ } else if (toOrRoute instanceof ToDynamicDefinition) {
+ return (ToDynamicDefinition) toOrRoute;
+ } else {
+ return null;
+ }
+ }
+
public void setTo(ToDefinition to) {
this.to = to;
+ this.toD = null;
+ this.toOrRoute = to;
+ }
+
+ public void setToD(ToDynamicDefinition to) {
+ this.to = null;
+ this.toD = to;
this.toOrRoute = to;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/574e699f/camel-core/src/test/java/org/apache/camel/model/XmlRestParseToDTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/model/XmlRestParseToDTest.java b/camel-core/src/test/java/org/apache/camel/model/XmlRestParseToDTest.java
new file mode 100644
index 0000000..277e0ef
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/model/XmlRestParseToDTest.java
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.model;
+
+import javax.xml.bind.JAXBException;
+
+import org.apache.camel.model.rest.GetVerbDefinition;
+import org.apache.camel.model.rest.RestContainer;
+import org.apache.camel.model.rest.RestDefinition;
+
+public class XmlRestParseToDTest extends XmlTestSupport {
+
+ public void testParseSimpleRestXml() throws Exception {
+ RestDefinition rest = assertOneRest("simpleRestToD.xml");
+ assertEquals("/users", rest.getPath());
+
+ assertEquals(1, rest.getVerbs().size());
+ GetVerbDefinition get = (GetVerbDefinition) rest.getVerbs().get(0);
+ assertEquals("/view/{id}", get.getUri());
+ assertEquals("bean:getUser?id=${header.id}", get.getToD().getUri());
+ }
+
+ protected RestDefinition assertOneRest(String uri) throws JAXBException {
+ RestContainer context = assertParseRestAsJaxb(uri);
+ RestDefinition rest = assertOneElement(context.getRests());
+ return rest;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/574e699f/camel-core/src/test/resources/org/apache/camel/model/simpleRestToD.xml
----------------------------------------------------------------------
diff --git a/camel-core/src/test/resources/org/apache/camel/model/simpleRestToD.xml b/camel-core/src/test/resources/org/apache/camel/model/simpleRestToD.xml
new file mode 100644
index 0000000..dc55aa3
--- /dev/null
+++ b/camel-core/src/test/resources/org/apache/camel/model/simpleRestToD.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<rests xmlns="http://camel.apache.org/schema/spring"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <rest path="/users">
+ <get uri="/view/{id}">
+ <toD uri="bean:getUser?id=${header.id}"/>
+ </get>
+ </rest>
+
+</rests>
[2/2] camel git commit: CAMEL-8991: rest-dsl to support the toD
Posted by da...@apache.org.
CAMEL-8991: rest-dsl to support the toD
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7c23b310
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7c23b310
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7c23b310
Branch: refs/heads/master
Commit: 7c23b31031680481ecf684070d2226a5c8100a47
Parents: 574e699
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jul 21 10:32:00 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jul 21 10:32:00 2015 +0200
----------------------------------------------------------------------
.../jetty/rest/RestJettyGetToDTest.java | 67 ++++++++++++++++++++
1 file changed, 67 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/7c23b310/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/rest/RestJettyGetToDTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/rest/RestJettyGetToDTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/rest/RestJettyGetToDTest.java
new file mode 100644
index 0000000..29139c1
--- /dev/null
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/rest/RestJettyGetToDTest.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jetty.rest;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jetty.BaseJettyTest;
+import org.apache.camel.component.jetty.JettyRestHttpBinding;
+import org.apache.camel.impl.JndiRegistry;
+import org.junit.Test;
+
+public class RestJettyGetToDTest extends BaseJettyTest {
+
+ @Override
+ protected JndiRegistry createRegistry() throws Exception {
+ JndiRegistry jndi = super.createRegistry();
+ jndi.bind("mybinding", new JettyRestHttpBinding());
+ return jndi;
+ }
+
+ @Test
+ public void testJettyProducerGet() throws Exception {
+ String out = template.requestBody("http://localhost:" + getPort() + "/users/123/basic", null, String.class);
+ assertEquals("123;Donald Duck", out);
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ // configure to use jetty on localhost with the given port
+ restConfiguration().component("jetty").host("localhost").port(getPort()).endpointProperty("httpBindingRef", "#mybinding");
+
+ // use the rest DSL to define the rest services
+ rest("/users/")
+ .get("{id}/basic")
+ .toD("seda:${header.id}");
+
+ from("seda:123")
+ .to("mock:input")
+ .process(new Processor() {
+ public void process(Exchange exchange) throws Exception {
+ String id = exchange.getIn().getHeader("id", String.class);
+ exchange.getOut().setBody(id + ";Donald Duck");
+ }
+ });
+ }
+ };
+ }
+
+}