Hi

Yeah sounds like a bug. Do you mind logging a JIRA ticket?

On Tue, Oct 1, 2013 at 11:25 AM,  <radek_kr...@centrum.cz> wrote:
> Hello,
> I am playing with "bean binding" on bean component. I know, that I can solve 
> my requirements by another way.
> But anyway I think, that my "syntetic" example doesn't work how I expect (I 
> tested it with Camel 2.11.2, 2.12.1).
>
> I have a "streamBodyBindingBean" bean with this method:
>
> public void bodyBinding(InputStream in) throws IOException {
>   int byteCount = 0;
>   int c;
>   while((c = in.read()) != -1)
>     byteCount++;
>   System.out.println("ByteCount: " + byteCount);
> }
>
> And this route:
>
> <route id="" trace="true">
>   <from uri="direct://body-input-stream-binding-in"/>
>   <to uri="bean://streamBodyBindingBean?method=bodyBinding(${body})"/>
>   <!-- to uri="bean://isBodyBindingBean"/-->
>   <to uri="mock://body-input-stream-binding-out"/>
> </route>
>
> Here is a way how I send exchange from test stuff:
>
> ByteArrayInputStream in = new ByteArrayInputStream(
>   "Small body, which I want to bind as InputStream".getBytes("UTF-8")
> );
> Exchange exchange = createExchangeWithBody(in);
> exchange.getIn().setHeader("testHeader", "testHeader");
> exchange.setPattern(ExchangePattern.InOnly);
> template.send("direct://body-input-stream-binding-in", exchange);
>
> In this case I got a sysout message: "ByteCount: 0".
> When I used the commented variant in route, I got expected result: 
> "ByteCount: 47",  => is it an ${body} evaluation problem?
>
> I think that the reason is MethodInfo class, line 526 (with strange comment 
> for me):
>
> // the parameter value was not already valid, but since the simple language 
> have evaluated the expression
> // which may change the parameterValue, so we have to check it again to see 
> if its now valid
> exp = exchange.getContext().getTypeConverter().convertTo(String.class, 
> parameterValue);
> // String values from the simple language is always valid
> if (!valid) {
>   ...
> }
>
> The line after "strange" comment caused that my "InputStream" is transformed 
> into String (what can be a problem in case of "big" InputStream).
> The question is, why this line isn't in "if(!valid)" block? I am unable to 
> decide, if it is a problem, which should be reported to JIRA or
> I only don't understand how bean binding should work or if I have only 
> "stupid/incorrect" example.
>
> This i a reason, why I ask first here.
>
> Thank you for any feedback.
> Radek Kraus.



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cib...@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen

Reply via email to