Author: wtam
Date: Fri Mar 25 19:56:41 2011
New Revision: 1085543
URL: http://svn.apache.org/viewvc?rev=1085543&view=rev
Log:
[CAMEL-3808] Restlet Producer to add query to request URI based on runtime
information (e.g. Camel header)
Added:
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/AddQueryTest.java
(with props)
Modified:
camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletProducer.java
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletQueryTest.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=1085543&r1=1085542&r2=1085543&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
Fri Mar 25 19:56:41 2011
@@ -111,6 +111,14 @@ public class RestletProducer extends Def
matcher.reset(uri);
}
+ String query = exchange.getIn().getHeader(Exchange.HTTP_QUERY,
String.class);
+ if (query != null) {
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Adding query: " + query + " to uri: " + uri);
+ }
+ uri = addQueryToUri(uri, query);
+ }
+
if (LOG.isDebugEnabled()) {
LOG.debug("Using uri: " + uri);
}
@@ -118,6 +126,33 @@ public class RestletProducer extends Def
return uri;
}
+
+ protected static String addQueryToUri(String uri, String query) {
+ if (uri == null || uri.length() == 0) {
+ return uri;
+ }
+
+ StringBuffer answer = new StringBuffer();
+
+ int index = uri.indexOf('?');
+ if (index < 0) {
+ answer.append(uri);
+ answer.append("?");
+ answer.append(query);
+ } else {
+ answer.append(uri.substring(0, index));
+ answer.append("?");
+ answer.append(query);
+ String remaining = uri.substring(index + 1);
+ if (remaining.length() > 0) {
+ answer.append("&");
+ answer.append(remaining);
+ }
+ }
+ return answer.toString();
+
+ }
+
protected RestletOperationException
populateRestletProducerException(Exchange exchange, Response response, int
responseCode) {
RestletOperationException exception;
String uri = exchange.getFromEndpoint().getEndpointUri();
Added:
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/AddQueryTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/AddQueryTest.java?rev=1085543&view=auto
==============================================================================
---
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/AddQueryTest.java
(added)
+++
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/AddQueryTest.java
Fri Mar 25 19:56:41 2011
@@ -0,0 +1,38 @@
+/**
+ * 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.restlet;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ * @version $Revision$
+ */
+public class AddQueryTest extends Assert {
+
+ @Test
+ public void testAddQuery() throws Exception {
+ assertEquals("http://a/b/c?a=b",
RestletProducer.addQueryToUri("http://a/b/c", "a=b"));
+ assertEquals("http://a/b/c?a=b&c=b",
RestletProducer.addQueryToUri("http://a/b/c", "a=b&c=b"));
+ assertEquals("http://a/b/c?a=b&c=b&l=m",
RestletProducer.addQueryToUri("http://a/b/c?c=b&l=m", "a=b"));
+ assertEquals("http://a/b/c?a=b&i=j&c=b&l=m",
RestletProducer.addQueryToUri("http://a/b/c?c=b&l=m", "a=b&i=j"));
+
+
+ }
+
+}
Propchange:
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/AddQueryTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/AddQueryTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletQueryTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletQueryTest.java?rev=1085543&r1=1085542&r2=1085543&view=diff
==============================================================================
---
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletQueryTest.java
(original)
+++
camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletQueryTest.java
Fri Mar 25 19:56:41 2011
@@ -37,6 +37,9 @@ public class RestletQueryTest extends Re
public void configure() throws Exception {
from("restlet:http://localhost:9080/users/{username}")
.process(new SetUserProcessor());
+
+
from("direct:start").to("restlet:http://localhost:9080/users/{username}");
+
}
};
}
@@ -55,4 +58,19 @@ public class RestletQueryTest extends Re
assertHttpResponse(response, 200, "text/plain");
}
+
+
+ @Test
+ public void testGetBodyByRestletProducer() throws Exception {
+ Exchange ex = template.request("direct:start", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(Exchange.HTTP_QUERY, QUERY_STRING);
+ exchange.getIn().setHeader("username", "homer");
+
+ }
+ });
+ assertEquals(200, ex.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
+
+ }
}
\ No newline at end of file