[ 
https://issues.apache.org/activemq/browse/CAMEL-772?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=44634#action_44634
 ] 

Claus Ibsen commented on CAMEL-772:
-----------------------------------

Here is a snippet how I have prototyped the constains() predicate (a bit quick 
and dirty) but good for show and tell:

{code}
    public static <E extends Exchange> Predicate<E> contains(final 
Expression<E> left,
                                                             final 
Expression<E> right) {
        return new BinaryPredicateSupport<E>(left, right) {

            protected boolean matches(E exchange, Object leftValue, Object 
rightValue) {
                Object castedValue = 
exchange.getContext().getTypeConverter().convertTo(rightValue.getClass(), 
leftValue);
                if (castedValue != null) {
                    return ObjectHelper.contains(castedValue, rightValue);
                } else {
                    return ObjectHelper.contains(leftValue, rightValue);
                }
            }

            protected String getOperationText() {
                return "contains";
            }
        };
    }
{code}

> Predicates with two types should consider casting to desired type before 
> evaluating
> -----------------------------------------------------------------------------------
>
>                 Key: CAMEL-772
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-772
>             Project: Apache Camel
>          Issue Type: Improvement
>          Components: camel-core
>    Affects Versions: 1.4.0
>            Reporter: Claus Ibsen
>
> I had this unit test where I want to assert that the message body contains 
> this string part
> {code}
>         MockEndpoint error = getMockEndpoint("mock:errorQueue");
>         error.expectedMessageCount(1);
>         
> error.message(0).body().contains("<patientCpr>0101701234</patientCpr>");
> {code}
> But the expression fails because the body is byte array and is not casted to 
> String as the contains type is.
> If I change the code to:
> {code}
>         
> error.message(0).body().convertTo(String.class).contains("<patientCpr>0101701234</patientCpr>");
> {code}
> Then it of course works. But what if there already is a type convert in Camel 
> that could have done the cast for me?
> But is it dangerous to add such automatic type casting behind the end-users 
> back? Any thoughts?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to