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

Reply via email to