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.