You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by ramrubio <ra...@yahoo.com> on 2013/08/01 03:25:17 UTC
stream caching to HTTP end point
Attempting to implement a proxy service to route requests dynamically using
DynamicRouter pattern suggested by
http://camel.apache.org/dynamic-router.html.
I'm unsuccessful though in getting streamcaching to work. I've enabled
streamcaching on the CamelContext but when the proxysvc forwards the POST
request to my endpoint the body is always empty.
<camelContext id="camel" streamCache="true"
xmlns="http://camel.apache.org/schema/spring">
<routeBuilder ref="CamelRouteBeanId"/>
</camelContext>
Below is my code that perform the slip functionality.
public void configure() throws Exception {
Processor processor = new MyProcessor();
this.from("servlet:///?matchOnUriPrefix=true")
.removeHeader(Exchange.HTTP_PATH)
.dynamicRouter(method(CamelRoute.class, "slip"));
}
public static String slip(String body_p, @Properties Map<String, Object>
propertiesMap_p,
@Headers Map<String, Object>headersMap_p) {
String serviceEndPoint = null;
String publicUri = (String)headersMap_p.get(Exchange.HTTP_URI);
//byte []bodyByteArray = body_p.getBytes();
if(publicUri != null)
{
// get the state from the exchange properties and keep track how many
times
// we have been invoked
int invoked = 0;
Object current = propertiesMap_p.get("invoked");
if (current != null) {
invoked = Integer.valueOf(current.toString());
}
invoked++;
// and store the state back on the properties
propertiesMap_p.put("invoked", invoked);
if(invoked == 1)
{
serviceEndPoint = CamelRoute.constructUri();
}
}
return serviceEndPoint;
}
private static String constructUri()
{
String serviceEndPoint = null;
String server = "http://localhost:8080";
serviceEndPoint = server
+"/sample.restsvc/rest/testresource"
+"?bridgeEndpoint=true&throwExceptionOnFailure=false";
return serviceEndPoint;
}
The Request is forwarded to my http end point but the body is always empty.
Can someone provide information as to whether streamCache works for http end
point? If i add a processor to route that sets body as string in request
this code works but this work around loads the entire body to memory which
causes issues for large requests.
/Ramon
--
View this message in context: http://camel.465427.n5.nabble.com/stream-caching-to-HTTP-end-point-tp5736608.html
Sent from the Camel - Users mailing list archive at Nabble.com.
Re: stream caching to HTTP end point
Posted by ramrubio <ra...@yahoo.com>.
Thanks Claus.
--
View this message in context: http://camel.465427.n5.nabble.com/stream-caching-to-HTTP-end-point-tp5736608p5737181.html
Sent from the Camel - Users mailing list archive at Nabble.com.
Re: stream caching to HTTP end point
Posted by Claus Ibsen <cl...@gmail.com>.
Hi
Yeah this is a bug. I have logged a ticket
https://issues.apache.org/jira/browse/CAMEL-6604
On Thu, Aug 1, 2013 at 3:25 AM, ramrubio <ra...@yahoo.com> wrote:
> Attempting to implement a proxy service to route requests dynamically using
> DynamicRouter pattern suggested by
> http://camel.apache.org/dynamic-router.html.
>
> I'm unsuccessful though in getting streamcaching to work. I've enabled
> streamcaching on the CamelContext but when the proxysvc forwards the POST
> request to my endpoint the body is always empty.
>
> <camelContext id="camel" streamCache="true"
> xmlns="http://camel.apache.org/schema/spring">
> <routeBuilder ref="CamelRouteBeanId"/>
> </camelContext>
>
> Below is my code that perform the slip functionality.
>
> public void configure() throws Exception {
>
> Processor processor = new MyProcessor();
>
> this.from("servlet:///?matchOnUriPrefix=true")
> .removeHeader(Exchange.HTTP_PATH)
> .dynamicRouter(method(CamelRoute.class, "slip"));
> }
>
> public static String slip(String body_p, @Properties Map<String, Object>
> propertiesMap_p,
> @Headers Map<String, Object>headersMap_p) {
>
> String serviceEndPoint = null;
> String publicUri = (String)headersMap_p.get(Exchange.HTTP_URI);
> //byte []bodyByteArray = body_p.getBytes();
> if(publicUri != null)
> {
> // get the state from the exchange properties and keep track how many
> times
> // we have been invoked
> int invoked = 0;
> Object current = propertiesMap_p.get("invoked");
> if (current != null) {
> invoked = Integer.valueOf(current.toString());
> }
> invoked++;
> // and store the state back on the properties
> propertiesMap_p.put("invoked", invoked);
>
> if(invoked == 1)
> {
> serviceEndPoint = CamelRoute.constructUri();
> }
> }
>
> return serviceEndPoint;
> }
>
> private static String constructUri()
> {
> String serviceEndPoint = null;
> String server = "http://localhost:8080";
> serviceEndPoint = server
> +"/sample.restsvc/rest/testresource"
> +"?bridgeEndpoint=true&throwExceptionOnFailure=false";
>
> return serviceEndPoint;
> }
>
> The Request is forwarded to my http end point but the body is always empty.
>
> Can someone provide information as to whether streamCache works for http end
> point? If i add a processor to route that sets body as string in request
> this code works but this work around loads the entire body to memory which
> causes issues for large requests.
>
> /Ramon
>
>
>
> --
> View this message in context: http://camel.465427.n5.nabble.com/stream-caching-to-HTTP-end-point-tp5736608.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
--
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen