CAMEL-7769: Mock - Allow to invoke a method while specifying an assertion
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e28e8ac4 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e28e8ac4 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e28e8ac4 Branch: refs/heads/master Commit: e28e8ac4de10c6d5f89672808847644ad4844982 Parents: eab0618 Author: Claus Ibsen <davscl...@apache.org> Authored: Sat Aug 30 11:20:06 2014 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Sat Aug 30 11:20:06 2014 +0200 ---------------------------------------------------------------------- .../apache/camel/builder/ExpressionBuilder.java | 23 ++++++++++++++++++++ .../org/apache/camel/builder/ValueBuilder.java | 11 ++++++++++ .../issues/TryCatchWithSplitIssueTest.java | 4 ++-- .../onexception/OnExceptionHandledTest.java | 2 +- 4 files changed, 37 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/e28e8ac4/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java index 44624d8..dfb4b99 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java +++ b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java @@ -830,6 +830,29 @@ public final class ExpressionBuilder { } /** + * Returns the expression for invoking a method (support OGNL syntax) on the given expression + * + * @param exp the expression to evaluate and invoke the method on its result + * @param ognl methods to invoke on the evaluated expression in a simple OGNL syntax + */ + public static Expression ognlExpression(final Expression exp, final String ognl) { + return new ExpressionAdapter() { + public Object evaluate(Exchange exchange) { + Object value = exp.evaluate(exchange, Object.class); + if (value == null) { + return null; + } + return new MethodCallExpression(value, ognl).evaluate(exchange); + } + + @Override + public String toString() { + return "ognl(" + exp + ", " + ognl + ")"; + } + }; + } + + /** * Returns the expression for the exchanges camelContext invoking methods defined * in a simple OGNL notation * http://git-wip-us.apache.org/repos/asf/camel/blob/e28e8ac4/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java index 4724ddd..60782c3 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java +++ b/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java @@ -282,6 +282,17 @@ public class ValueBuilder implements Expression, Predicate { } /** + * Invokes the method with the given name (supports OGNL syntax). + * + * @param methodName name of method to invoke. + * @return the current builder + */ + public ValueBuilder method(String methodName) { + Expression newExp = ExpressionBuilder.ognlExpression(expression, methodName); + return onNewValueBuilder(newExp); + } + + /** * Negates the built expression. * * @return the current builder http://git-wip-us.apache.org/repos/asf/camel/blob/e28e8ac4/camel-core/src/test/java/org/apache/camel/issues/TryCatchWithSplitIssueTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/issues/TryCatchWithSplitIssueTest.java b/camel-core/src/test/java/org/apache/camel/issues/TryCatchWithSplitIssueTest.java index 2dd5e3f..043b902 100644 --- a/camel-core/src/test/java/org/apache/camel/issues/TryCatchWithSplitIssueTest.java +++ b/camel-core/src/test/java/org/apache/camel/issues/TryCatchWithSplitIssueTest.java @@ -31,7 +31,7 @@ public class TryCatchWithSplitIssueTest extends ContextTestSupport { MockEndpoint error = getMockEndpoint("mock:error"); error.expectedBodiesReceived("James"); error.message(0).property(Exchange.EXCEPTION_CAUGHT).isNotNull(); - error.message(0).property(Exchange.EXCEPTION_CAUGHT).convertTo(String.class).contains("This is a dummy error James!"); + error.message(0).property(Exchange.EXCEPTION_CAUGHT).method("getMessage").isEqualTo("This is a dummy error James!"); MockEndpoint result = getMockEndpoint("mock:result"); result.expectedBodiesReceived("Hi Claus", "Hi Willem"); @@ -45,7 +45,7 @@ public class TryCatchWithSplitIssueTest extends ContextTestSupport { MockEndpoint error = getMockEndpoint("mock:error"); error.expectedBodiesReceived("James"); error.message(0).property(Exchange.EXCEPTION_CAUGHT).isNotNull(); - error.message(0).property(Exchange.EXCEPTION_CAUGHT).convertTo(String.class).contains("This is a dummy error James!"); + error.message(0).property(Exchange.EXCEPTION_CAUGHT).method("getMessage").isEqualTo("This is a dummy error James!"); template.sendBody("direct:start", "James"); http://git-wip-us.apache.org/repos/asf/camel/blob/e28e8ac4/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionHandledTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionHandledTest.java b/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionHandledTest.java index 3254244..7f9f69f 100644 --- a/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionHandledTest.java +++ b/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionHandledTest.java @@ -31,7 +31,7 @@ public class OnExceptionHandledTest extends ContextTestSupport { mock.expectedBodiesReceived("Hello World"); mock.message(0).property(Exchange.EXCEPTION_CAUGHT).isNotNull(); mock.message(0).property(Exchange.EXCEPTION_CAUGHT).isInstanceOf(IllegalArgumentException.class); - mock.message(0).property(Exchange.EXCEPTION_CAUGHT).convertTo(String.class).contains("Forced"); + mock.message(0).property(Exchange.EXCEPTION_CAUGHT).method("getMessage").isEqualTo("Forced"); template.sendBody("direct:start", "Hello World");