This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch CAMEL-13788 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 30dd06d358febe817106c90d0653007a9d2f8fc5 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Jul 25 16:15:42 2019 +0200 CAMEL-13788: Deprecate OUT in favour of getMessage on Message API. --- .../camel-bean/src/main/docs/bean-language.adoc | 21 ++++++++++++++++++--- .../bean/AbstractCamelInvocationHandler.java | 15 +++------------ .../apache/camel/language/bean/BeanExpression.java | 3 ++- .../apache/camel/component/seda/SedaProducer.java | 2 +- .../org/apache/camel/language/spel/RootObject.java | 5 +++++ .../apache/camel/language/spel/SpelRouteTest.java | 2 +- .../org/apache/camel/language/spel/SpelTest.java | 2 ++ .../processor/SpringComplexBlockWithEndTest.java | 2 +- .../org/apache/camel/converter/CamelConverter.java | 11 ++++++++--- 9 files changed, 41 insertions(+), 22 deletions(-) diff --git a/components/camel-bean/src/main/docs/bean-language.adoc b/components/camel-bean/src/main/docs/bean-language.adoc index ce5a1c4..08023f6 100644 --- a/components/camel-bean/src/main/docs/bean-language.adoc +++ b/components/camel-bean/src/main/docs/bean-language.adoc @@ -3,9 +3,6 @@ == Bean Language *Available as of Camel version 1.3* - -*Available as of Camel version 1.3* - The purpose of the Bean Language is to be able to implement an xref:manual::expression.adoc[Expression] or xref:manual::predicate.adoc[Predicate] using a simple method on a bean. The bean name is resolved using a xref:manual::registry.adoc[Registry], such as the @@ -21,6 +18,24 @@ xref:manual::message.adoc[Message] Exchange to the method parameters; so you can annotate the bean to extract headers or other expressions such as xref:components::xpath-language.adoc[XPath] or xref:components::xquery-language.adoc[XQuery] from the message. +=== Bean Language options + +// language options: START +The Bean method language supports 4 options, which are listed below. + + + +[width="100%",cols="2,1m,1m,6",options="header"] +|=== +| Name | Default | Java Type | Description +| ref | | String | Reference to bean to lookup in the registry +| method | | String | Name of method to call +| beanType | | String | Class name of the bean to use +| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks +|=== +// language options: END + + [[BeanLanguage-UsingBeanExpressionsinJava]] === Using Bean Expressions in Java diff --git a/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractCamelInvocationHandler.java b/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractCamelInvocationHandler.java index ec92342..3ab758a 100644 --- a/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractCamelInvocationHandler.java +++ b/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractCamelInvocationHandler.java @@ -68,19 +68,10 @@ public abstract class AbstractCamelInvocationHandler implements InvocationHandle } private static Object getBody(Exchange exchange, Class<?> type) throws InvalidPayloadException { - // get the body from the Exchange from either OUT or IN - if (exchange.hasOut()) { - if (exchange.getOut().getBody() != null) { - return exchange.getOut().getMandatoryBody(type); - } else { - return null; - } + if (exchange.getMessage().getBody() != null) { + return exchange.getMessage().getMandatoryBody(type); } else { - if (exchange.getIn().getBody() != null) { - return exchange.getIn().getMandatoryBody(type); - } else { - return null; - } + return null; } } diff --git a/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanExpression.java b/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanExpression.java index c38c3f2..b39ca6f 100644 --- a/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanExpression.java +++ b/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanExpression.java @@ -293,7 +293,8 @@ public class BeanExpression implements Expression, Predicate, AfterPropertiesCon // force to use InOut to retrieve the result on the OUT message resultExchange.setPattern(ExchangePattern.InOut); processor.process(resultExchange); - result = resultExchange.getOut().getBody(); + // the response is always stored in OUT + result = resultExchange.hasOut() ? resultExchange.getOut().getBody() : null; // propagate properties and headers from result if (resultExchange.hasProperties()) { diff --git a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaProducer.java b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaProducer.java index 8f9cde3..a43abae 100644 --- a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaProducer.java +++ b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaProducer.java @@ -70,7 +70,7 @@ public class SedaProducer extends DefaultAsyncProducer { // check for timeout, which then already would have invoked the latch if (latch.getCount() == 0) { if (log.isTraceEnabled()) { - log.trace("{}. Timeout occurred so response will be ignored: {}", this, response.hasOut() ? response.getOut() : response.getIn()); + log.trace("{}. Timeout occurred so response will be ignored: {}", this, response.getMessage()); } return; } else { diff --git a/components/camel-spring/src/main/java/org/apache/camel/language/spel/RootObject.java b/components/camel-spring/src/main/java/org/apache/camel/language/spel/RootObject.java index 25c6557..7725ae4 100644 --- a/components/camel-spring/src/main/java/org/apache/camel/language/spel/RootObject.java +++ b/components/camel-spring/src/main/java/org/apache/camel/language/spel/RootObject.java @@ -53,6 +53,11 @@ public final class RootObject { return exchange.getIn(); } + public Message getMessage() { + return exchange.getMessage(); + } + + @Deprecated public Message getResponse() { return exchange.getOut(); } diff --git a/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelRouteTest.java b/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelRouteTest.java index 0b02876..03b0d5c 100644 --- a/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelRouteTest.java +++ b/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelRouteTest.java @@ -46,7 +46,7 @@ public class SpelRouteTest extends ContextTestSupport { return new RouteBuilder() { @Override public void configure() { - from("direct:test").setBody(spel("Hello #{request.body}! What a beautiful #{request.headers['dayOrNight']}")).to("mock:result"); + from("direct:test").setBody(spel("Hello #{message.body}! What a beautiful #{request.headers['dayOrNight']}")).to("mock:result"); from("direct:loop").loop(4).setBody(spel("#{body + ':' + properties['CamelLoopIndex']}")).to("mock:loopResult"); } }; diff --git a/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelTest.java b/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelTest.java index 529238e..e8d6880 100644 --- a/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelTest.java +++ b/components/camel-spring/src/test/java/org/apache/camel/language/spel/SpelTest.java @@ -27,6 +27,7 @@ public class SpelTest extends LanguageTestSupport { assertExpression("#{exchange.getIn().body}", "<hello id='m123'>world!</hello>"); assertExpression("#{getRequest().body}", "<hello id='m123'>world!</hello>"); assertExpression("#{request.body}", "<hello id='m123'>world!</hello>"); + assertExpression("#{message.body}", "<hello id='m123'>world!</hello>"); assertExpression("#{request.Headers['foo']}", "abc"); assertExpression("#{getRequest().Headers['foo']}", "abc"); assertExpression("#{request.Headers['foo'] == 'abc'}", true); @@ -48,6 +49,7 @@ public class SpelTest extends LanguageTestSupport { assertPredicate("#{request.headers.foo.startsWith('a')}"); assertPredicate("#{request.headers.foo == 'abc'}"); assertPredicateFails("#{request.headers.foo == 'badString'}"); + assertPredicate("#{message.headers.foo == 'abc'}"); } @Test diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.java index 9b2fcb1..c592aac 100644 --- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.java +++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.java @@ -71,7 +71,7 @@ public class SpringComplexBlockWithEndTest extends ContextTestSupport { public static class SplitAggregate implements AggregationStrategy { public Exchange aggregate(Exchange oldExchange, Exchange newExchange) { - newExchange.getOut().setBody("Cowboys"); + newExchange.getMessage().setBody("Cowboys"); return newExchange; } diff --git a/core/camel-base/src/main/java/org/apache/camel/converter/CamelConverter.java b/core/camel-base/src/main/java/org/apache/camel/converter/CamelConverter.java index 1459406..1dd114b 100644 --- a/core/camel-base/src/main/java/org/apache/camel/converter/CamelConverter.java +++ b/core/camel-base/src/main/java/org/apache/camel/converter/CamelConverter.java @@ -38,17 +38,22 @@ public final class CamelConverter { @Converter public static Processor toProcessor(final Predicate predicate) { return exchange -> { + // the response from a predicate should be set on OUT boolean answer = predicate.matches(exchange); - exchange.getMessage().setBody(answer); + Message out = exchange.getOut(); + out.copyFrom(exchange.getIn()); + out.setBody(answer); }; - } @Converter public static Processor toProcessor(final Expression expression) { return exchange -> { + // the response from a expression should be set on OUT Object answer = expression.evaluate(exchange, Object.class); - exchange.getMessage().setBody(answer); + Message out = exchange.getOut(); + out.copyFrom(exchange.getIn()); + out.setBody(answer); }; }