Author: davsclaus
Date: Thu Aug 26 09:22:28 2010
New Revision: 989557
URL: http://svn.apache.org/viewvc?rev=989557&view=rev
Log:
CAMEL-3021: restlet component now supports using {} placeholders in uri, which
gets replaced with headers from Exchange.
Added:
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerGet2Test.java
- copied, changed from r989520,
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerTest.java
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerGetTest.java
- copied, changed from r989520,
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerTest.java
Removed:
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerTest.java
Modified:
camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java
Modified:
camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java?rev=989557&r1=989556&r2=989557&view=diff
==============================================================================
---
camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java
(original)
+++
camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java
Thu Aug 26 09:22:28 2010
@@ -16,6 +16,10 @@
*/
package org.apache.camel.component.restlet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.camel.CamelExchangeException;
import org.apache.camel.Exchange;
import org.apache.camel.impl.DefaultProducer;
import org.apache.commons.logging.Log;
@@ -32,6 +36,7 @@ import org.restlet.data.Response;
*/
public class RestletProducer extends DefaultProducer {
private static final Log LOG = LogFactory.getLog(RestletProducer.class);
+ private static final Pattern PATTERN =
Pattern.compile("\\{([\\w\\.]*)\\}");
private Client client;
public RestletProducer(RestletEndpoint endpoint) throws Exception {
@@ -55,7 +60,7 @@ public class RestletProducer extends Def
public void process(Exchange exchange) throws Exception {
RestletEndpoint endpoint = (RestletEndpoint)getEndpoint();
- String resourceUri = buildUri(endpoint);
+ String resourceUri = buildUri(endpoint, exchange);
Request request = new Request(endpoint.getRestletMethod(),
resourceUri);
RestletBinding binding = endpoint.getRestletBinding();
@@ -70,9 +75,37 @@ public class RestletProducer extends Def
binding.populateExchangeFromRestletResponse(exchange, response);
}
- private static String buildUri(RestletEndpoint endpoint) {
- return endpoint.getProtocol() + "://" + endpoint.getHost() + ":"
+ private static String buildUri(RestletEndpoint endpoint, Exchange
exchange) throws CamelExchangeException {
+ String uri = endpoint.getProtocol() + "://" + endpoint.getHost() + ":"
+ endpoint.getPort() + endpoint.getUriPattern();
+
+ // substitute { } placeholders in uri and use mandatory headers
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Substituting { } placeholders in uri: " + uri);
+ }
+ Matcher matcher = PATTERN.matcher(uri);
+ while (matcher.find()) {
+ String key = matcher.group(1);
+ String header = exchange.getIn().getHeader(key, String.class);
+ // header should be mandatory
+ if (header == null) {
+ throw new CamelExchangeException("Header with key: " + key + "
not found in Exchange", exchange);
+ }
+
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Replacing: " + matcher.group(0) + " with header
value: " + header);
+ }
+
+ uri = matcher.replaceFirst(header);
+ // we replaced uri so reset and go again
+ matcher.reset(uri);
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Using uri: " + uri);
+ }
+
+ return uri;
}
}
Copied:
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerGet2Test.java
(from r989520,
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerTest.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerGet2Test.java?p2=camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerGet2Test.java&p1=camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerTest.java&r1=989520&r2=989557&rev=989557&view=diff
==============================================================================
---
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerTest.java
(original)
+++
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerGet2Test.java
Thu Aug 26 09:22:28 2010
@@ -16,6 +16,9 @@
*/
package org.apache.camel.component.restlet;
+import java.util.HashMap;
+import java.util.Map;
+
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
@@ -25,12 +28,16 @@ import org.junit.Test;
/**
* @version $Revision$
*/
-public class RestletProducerTest extends CamelTestSupport {
+public class RestletProducerGet2Test extends CamelTestSupport {
@Test
- public void testRestletProducer() throws Exception {
- String out = template.requestBodyAndHeader("direct:start", "Hello
World", "id", 123, String.class);
- assertEquals("123;Donald Duck;Hello World", out);
+ public void testRestletProducerGet2() throws Exception {
+ Map headers = new HashMap();
+ headers.put("id", 123);
+ headers.put("beverage.beer", "Carlsberg");
+
+ String out = template.requestBodyAndHeaders("direct:start", null,
headers, String.class);
+ assertEquals("123;Donald Duck;Carlsberg", out);
}
@Override
@@ -38,16 +45,14 @@ public class RestletProducerTest extends
return new RouteBuilder() {
@Override
public void configure() throws Exception {
- // TODO: CAMEL-3021: Should support the {id} uri
- //
from("direct:start").to("restlet:http://localhost:9080/users/{id}/basic?restletMethod=post");
-
from("direct:start").to("restlet:http://localhost:9080/users/123/basic?restletMethod=post");
+
from("direct:start").to("restlet:http://localhost:9080/users/{id}/like/{beverage.beer}");
-
from("restlet:http://localhost:9080/users/{id}/basic?restletMethod=post")
+ from("restlet:http://localhost:9080/users/{id}/like/{beer}")
.process(new Processor() {
public void process(Exchange exchange) throws
Exception {
String id = exchange.getIn().getHeader("id",
String.class);
- String body =
exchange.getIn().getBody(String.class);
- exchange.getOut().setBody(id + ";Donald Duck;" +
body);
+ String beer = exchange.getIn().getHeader("beer",
String.class);
+ exchange.getOut().setBody(id + ";Donald Duck;" +
beer);
}
});
}
Copied:
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerGetTest.java
(from r989520,
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerTest.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerGetTest.java?p2=camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerGetTest.java&p1=camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerTest.java&r1=989520&r2=989557&rev=989557&view=diff
==============================================================================
---
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerTest.java
(original)
+++
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerGetTest.java
Thu Aug 26 09:22:28 2010
@@ -25,12 +25,12 @@ import org.junit.Test;
/**
* @version $Revision$
*/
-public class RestletProducerTest extends CamelTestSupport {
+public class RestletProducerGetTest extends CamelTestSupport {
@Test
- public void testRestletProducer() throws Exception {
- String out = template.requestBodyAndHeader("direct:start", "Hello
World", "id", 123, String.class);
- assertEquals("123;Donald Duck;Hello World", out);
+ public void testRestletProducerGet() throws Exception {
+ String out = template.requestBodyAndHeader("direct:start", null, "id",
123, String.class);
+ assertEquals("123;Donald Duck", out);
}
@Override
@@ -38,16 +38,13 @@ public class RestletProducerTest extends
return new RouteBuilder() {
@Override
public void configure() throws Exception {
- // TODO: CAMEL-3021: Should support the {id} uri
- //
from("direct:start").to("restlet:http://localhost:9080/users/{id}/basic?restletMethod=post");
-
from("direct:start").to("restlet:http://localhost:9080/users/123/basic?restletMethod=post");
+
from("direct:start").to("restlet:http://localhost:9080/users/123/basic");
-
from("restlet:http://localhost:9080/users/{id}/basic?restletMethod=post")
+ from("restlet:http://localhost:9080/users/{id}/basic")
.process(new Processor() {
public void process(Exchange exchange) throws
Exception {
String id = exchange.getIn().getHeader("id",
String.class);
- String body =
exchange.getIn().getBody(String.class);
- exchange.getOut().setBody(id + ";Donald Duck;" +
body);
+ exchange.getOut().setBody(id + ";Donald Duck");
}
});
}