Thanks Gregor and Claus. I will use version 2.20. -Minhtri
On Wed, Nov 15, 2017 at 4:26 AM, Claus Ibsen <claus.ib...@gmail.com> wrote: > 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