Hi Looks like you're trying to read the stream twice, try again after enabling stream-caching[1]
[1] http://camel.apache.org/stream-caching.html Taariq 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. >