Hi I logged a ticket https://issues.apache.org/jira/browse/CAMEL-12010
On Wed, Nov 15, 2017 at 10:18 AM, Claus Ibsen <claus.ib...@gmail.com> wrote: > Hi > > Okay I was building a little test in camel-core to reproduce this, and > its because of the Camel 2.20 optimisations we have done around type > converters. > > So when the data is converted to a String then we hit this optimised > IO converter > https://github.com/apache/camel/blob/master/camel-core/src/main/java/org/apache/camel/converter/IOConverterOptimised.java#L49 > > That ensures the stream cache is reset before any type conversion > attempt, which then ensures we can re-read the payload from the > unmarshal operation of jackson. > > > > On Wed, Nov 15, 2017 at 10:05 AM, Claus Ibsen <claus.ib...@gmail.com> wrote: >> Hi >> >> I guess its a bit expected as the output from jackson is streaming >> based and even so when stream caching is enabled - then when you >> convert the payload the 2nd time in the expectation then the payload >> has not been reset prior and therefore is eol, and the assertion >> fails. >> >> Camel will automatic reset stream caching (when possible) during >> routing, so if you had 2 mock endpoints mock:a and mock:b, and each >> had one assertion like yours, then it would work. >> >> However as Gregor writes it seems we have improved something somewhere >> in 2.20 > 2.19 that mitigates this problem. It could be in >> camel-jackson or Camel data formats, or in some stream caching type >> converter, etc. I haven't looked deeper or tried to run this test / >> debug it etc. >> >> You can just add a .convertBodyTo(String.class) before your mock >> endpoint and your test on 2.19.x would work. >> >> An alternative is to consider making mock endpoint reset the stream >> caching for each expectation it evaluations (which would be like some >> kind of root fix). >> >> On Fri, Nov 10, 2017 at 7:12 PM, Minhtri Tran <mtran7...@gmail.com> wrote: >>> Hello, >>> >>> I am currently having an issue with setting up multiple expectations >>> in a test case when streamCaching is enabled and json marshalling is >>> used. Every expectation except the first one fails. >>> >>> Here’s my test class: >>> >>> @RunWith(CamelSpringBootRunner.class) >>> >>> @SpringBootTest(classes = MyApplication.class) >>> >>> public class MyTest extends CamelTestSupport { >>> >>> >>> >>> @Test >>> >>> public void test() throws Exception { >>> >>> class Hello { >>> >>> Hello(String value) { >>> >>> this.value = value; >>> >>> } >>> >>> >>> >>> private String value; >>> >>> >>> >>> public String getValue() { >>> >>> return value; >>> >>> } >>> >>> >>> >>> public void setValue(String value) { >>> >>> this.value = value; >>> >>> } >>> >>> } >>> >>> >>> >>> MockEndpoint mock = getMockEndpoint("mock:dest"); >>> >>> mock.message(0).body().convertToString().contains("hello"); >>> >>> mock.message(0).body().convertToString().contains("world"); >>> >>> template.sendBody("direct:source", new Hello("hello world")); >>> >>> mock.assertIsSatisfied(); } >>> >>> >>> >>> @Override >>> >>> protected RoutesBuilder createRouteBuilder() throws Exception { >>> >>> return new RouteBuilder() { >>> >>> @Override >>> >>> public void configure() throws Exception { >>> >>> from("direct:source") >>> >>> .streamCaching() >>> >>> .marshal().json(JsonLibrary.Jackson) >>> >>> .to("mock:dest"); >>> >>> } >>> >>> }; >>> >>> } >>> >>> } >>> >>> >>> >>> This is the assertion error that I’m getting: >>> >>> java.lang.AssertionError: Assertion error at index 0 on mock >>> mock://dest with predicate: Simple: body contains world evaluated as: >>> contains world on Exchange[ID-A1504214-60132-1508506055845-1-2] >>> >>> >>> >>> Why is this happening? How can I set multiple expectations on the >>> same message body in this case? >>> >>> >>> >>> Thanks, >>> >>> Minhtri >> >> >> >> -- >> Claus Ibsen >> ----------------- >> http://davsclaus.com @davsclaus >> Camel in Action 2: https://www.manning.com/ibsen2 > > > > -- > Claus Ibsen > ----------------- > http://davsclaus.com @davsclaus > Camel in Action 2: https://www.manning.com/ibsen2 -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2