From d9e1584a80bf103c9e335fcf9b9161331508c9ef Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Mon, 28 Nov 2016 17:23:30 -0500 Subject: [PATCH] Additional DSL LambdaMessageProcesses Fixes Fix CheckStyle violations and one more `isLambda()`` in the `RecipientListRouterSpec` Add `Assert` for method ambiguity to the `LambdaMessageProcessor` to be sure that we get deal only with the Function Interface impl --- .../dsl/RecipientListRouterSpec.java | 12 ++++++++---- .../handler/LambdaMessageProcessor.java | 19 ++++++++++++------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/dsl/RecipientListRouterSpec.java b/spring-integration-core/src/main/java/org/springframework/integration/dsl/RecipientListRouterSpec.java index c217e4b239..222867317f 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/dsl/RecipientListRouterSpec.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/dsl/RecipientListRouterSpec.java @@ -102,9 +102,10 @@ public class RecipientListRouterSpec extends AbstractRouterSpec, BeanFac final AtomicReference methodValue = new AtomicReference<>(); ReflectionUtils.doWithMethods(target.getClass(), methodValue::set, - methodCandidate -> - !methodCandidate.isBridge() - && !methodCandidate.isDefault() - && methodCandidate.getDeclaringClass() != Object.class - && Modifier.isPublic(methodCandidate.getModifiers()) - && !Modifier.isStatic(methodCandidate.getModifiers())); + methodCandidate -> { + boolean isCandidate = !methodCandidate.isBridge() + && !methodCandidate.isDefault() + && methodCandidate.getDeclaringClass() != Object.class + && Modifier.isPublic(methodCandidate.getModifiers()) + && !Modifier.isStatic(methodCandidate.getModifiers()); + if (isCandidate) { + Assert.isNull(methodValue.get(), "LambdaMessageProcessor is applicable for inline or lambda " + + "classes with single method - functional interface implementations."); + } + return isCandidate; + }); Assert.notNull(methodValue.get(), "LambdaMessageProcessor is applicable for inline or lambda " + "classes with single method - functional interface implementations."); this.method = methodValue.get(); - this.method.setAccessible(true); this.parameterTypes = this.method.getParameterTypes(); this.payloadType = payloadType != null ? TypeDescriptor.valueOf(payloadType) : null; }