diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/aggregator/CompletionStrategyAdapter.java b/org.springframework.integration/src/main/java/org/springframework/integration/aggregator/CompletionStrategyAdapter.java index d48a911e9e..edd88eb99a 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/aggregator/CompletionStrategyAdapter.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/aggregator/CompletionStrategyAdapter.java @@ -19,11 +19,12 @@ package org.springframework.integration.aggregator; import java.lang.reflect.Method; import java.util.List; -import org.springframework.integration.ConfigurationException; import org.springframework.integration.message.Message; +import org.springframework.util.Assert; /** - * Adapter for methods annotated with {@link org.springframework.integration.annotation.CompletionStrategy @CompletionStrategy} + * Adapter for methods annotated with + * {@link org.springframework.integration.annotation.CompletionStrategy @CompletionStrategy} * and for 'completion-strategy' elements that include a 'method' * attribute (e.g. <completion-strategy ref="beanReference" method="methodName"/>). * @@ -42,16 +43,14 @@ public class CompletionStrategyAdapter extends MessageListMethodAdapter implemen } - private void assertMethodReturnsBoolean() { - if (!Boolean.class.equals(this.getMethod().getReturnType()) - && !boolean.class.equals(this.getMethod().getReturnType())) { - throw new ConfigurationException("Method '" + getMethod().getName() - + "' does not return a boolean value"); - } - } - public boolean isComplete(List> messages) { return ((Boolean) executeMethod(messages)).booleanValue(); } + private void assertMethodReturnsBoolean() { + Assert.isTrue(Boolean.class.equals(this.getMethod().getReturnType()) + || boolean.class.equals(this.getMethod().getReturnType()), + "Method '" + getMethod().getName() + "' does not return a boolean value"); + } + } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/aggregator/MessageListMethodAdapter.java b/org.springframework.integration/src/main/java/org/springframework/integration/aggregator/MessageListMethodAdapter.java index e816a88ca6..7f765b17d3 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/aggregator/MessageListMethodAdapter.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/aggregator/MessageListMethodAdapter.java @@ -23,7 +23,6 @@ import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import org.springframework.integration.ConfigurationException; import org.springframework.integration.message.Message; import org.springframework.integration.message.MessagingException; import org.springframework.integration.util.DefaultMethodInvoker; @@ -40,31 +39,33 @@ public abstract class MessageListMethodAdapter { private final DefaultMethodInvoker invoker; - protected volatile Method method; + protected final Method method; public MessageListMethodAdapter(Object object, String methodName) { Assert.notNull(object, "'object' must not be null"); Assert.notNull(methodName, "'methodName' must not be null"); this.method = ReflectionUtils.findMethod(object.getClass(), methodName, new Class[] { List.class }); - if (this.method == null) { - throw new ConfigurationException("Method '" + methodName + - "(List args)' not found on '" + object.getClass().getName() + "'."); - } + Assert.notNull(this.method, "Method '" + methodName + + "(List args)' not found on '" + object.getClass().getName() + "'."); this.invoker = new DefaultMethodInvoker(object, this.method); } public MessageListMethodAdapter(Object object, Method method) { Assert.notNull(object, "'object' must not be null"); Assert.notNull(method, "'method' must not be null"); - if (method.getParameterTypes().length != 1 || !method.getParameterTypes()[0].equals(List.class)) { - throw new ConfigurationException("Method must accept exactly one parameter, and it must be a List."); - } + Assert.isTrue(method.getParameterTypes().length == 1 + && method.getParameterTypes()[0].equals(List.class), + "Method must accept exactly one parameter, and it must be a List."); this.method = method; this.invoker = new DefaultMethodInvoker(object, this.method); } + protected Method getMethod() { + return method; + } + private static boolean isActualTypeParameterizedMessage(Method method) { return (getCollectionActualType(method) instanceof ParameterizedType) && Message.class.isAssignableFrom((Class) ((ParameterizedType) getCollectionActualType(method)).getRawType()); @@ -77,11 +78,12 @@ public abstract class MessageListMethodAdapter { return this.invoker.invokeMethod(messages); } return this.invoker.invokeMethod(extractPayloadsFromMessages(messages)); - } catch (InvocationTargetException e) { + } + catch (InvocationTargetException e) { throw new MessagingException( "Method '" + this.method + "' threw an Exception.", e.getTargetException()); } - catch (Throwable e) { + catch (Exception e) { throw new MessagingException("Failed to invoke method '" + this.method + "'."); } } @@ -111,12 +113,4 @@ public abstract class MessageListMethodAdapter { && method.getGenericParameterTypes()[0] instanceof ParameterizedType; } - public Method getMethod() { - return method; - } - - public void setMethod(Method method) { - this.method = method; - } - } diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/aggregator/CompletionStrategyAdapterTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/aggregator/CompletionStrategyAdapterTests.java index ee51b363d4..47225f0f2c 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/aggregator/CompletionStrategyAdapterTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/aggregator/CompletionStrategyAdapterTests.java @@ -24,10 +24,7 @@ import java.util.List; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.springframework.integration.ConfigurationException; -import org.springframework.integration.aggregator.MethodInvokingAggregator; -import org.springframework.integration.aggregator.CompletionStrategy; -import org.springframework.integration.aggregator.CompletionStrategyAdapter; + import org.springframework.integration.message.GenericMessage; import org.springframework.integration.message.Message; @@ -38,11 +35,13 @@ public class CompletionStrategyAdapterTests { private SimpleCompletionStrategy simpleCompletionStrategy; + @Before public void setUp() { simpleCompletionStrategy = new SimpleCompletionStrategy(); } + @Test public void testTrueConvertedProperly() { CompletionStrategyAdapter adapter = new CompletionStrategyAdapter(new AlwaysTrueCompletionStrategy(), @@ -97,62 +96,62 @@ public class CompletionStrategyAdapterTests { Assert.assertTrue(adapter.isComplete(messages)); } - @Test(expected = ConfigurationException.class) + @Test(expected = IllegalArgumentException.class) public void testAdapterWithWrongMethodName() { new CompletionStrategyAdapter(simpleCompletionStrategy, "methodThatDoesNotExist"); } - @Test(expected = ConfigurationException.class) + @Test(expected = IllegalArgumentException.class) public void testInvalidParameterTypeUsingMethodName() { new CompletionStrategyAdapter(simpleCompletionStrategy, "invalidParameterType"); } - @Test(expected = ConfigurationException.class) + @Test(expected = IllegalArgumentException.class) public void testTooManyParametersUsingMethodName() { new CompletionStrategyAdapter(simpleCompletionStrategy, "tooManyParameters"); } - @Test(expected = ConfigurationException.class) + @Test(expected = IllegalArgumentException.class) public void testNotEnoughParametersUsingMethodName() { new CompletionStrategyAdapter(simpleCompletionStrategy, "notEnoughParameters"); } - @Test(expected = ConfigurationException.class) + @Test(expected = IllegalArgumentException.class) public void testListSubclassParameterUsingMethodName() { new CompletionStrategyAdapter(simpleCompletionStrategy, "ListSubclassParameter"); } - @Test(expected = ConfigurationException.class) + @Test(expected = IllegalArgumentException.class) public void testWrongReturnType() throws SecurityException, NoSuchMethodError { new CompletionStrategyAdapter(simpleCompletionStrategy, "wrongReturnType"); } - @Test(expected = ConfigurationException.class) + @Test(expected = IllegalArgumentException.class) public void testInvalidParameterTypeUsingMethodObject() throws SecurityException, NoSuchMethodException { new MethodInvokingAggregator(simpleCompletionStrategy, simpleCompletionStrategy.getClass().getMethod( "invalidParameterType", String.class)); } - @Test(expected = ConfigurationException.class) + @Test(expected = IllegalArgumentException.class) public void testTooManyParametersUsingMethodObject() throws SecurityException, NoSuchMethodException { new CompletionStrategyAdapter(simpleCompletionStrategy, simpleCompletionStrategy.getClass().getMethod( "tooManyParameters", List.class, List.class)); } - @Test(expected = ConfigurationException.class) + @Test(expected = IllegalArgumentException.class) public void testNotEnoughParametersUsingMethodObject() throws SecurityException, NoSuchMethodException { new CompletionStrategyAdapter(simpleCompletionStrategy, simpleCompletionStrategy.getClass().getMethod( "notEnoughParameters", new Class[] {})); } - @Test(expected = ConfigurationException.class) + @Test(expected = IllegalArgumentException.class) public void testListSubclassParameterUsingMethodObject() throws SecurityException, NoSuchMethodException { new CompletionStrategyAdapter(simpleCompletionStrategy, simpleCompletionStrategy.getClass().getMethod( "ListSubclassParameter", new Class[] { LinkedList.class })); } - @Test(expected = ConfigurationException.class) + @Test(expected = IllegalArgumentException.class) public void testWrongReturnTypeUsingMethodObject() throws SecurityException, NoSuchMethodException { new CompletionStrategyAdapter(simpleCompletionStrategy, simpleCompletionStrategy.getClass().getMethod( "wrongReturnType", new Class[] { List.class })); @@ -175,6 +174,7 @@ public class CompletionStrategyAdapterTests { new MethodInvokingAggregator(simpleCompletionStrategy, method); } + private static List> createListOfMessages() { List> messages = new ArrayList>(); messages.add(new GenericMessage("123")); @@ -213,8 +213,7 @@ public class CompletionStrategyAdapterTests { return messages.size() > messages.iterator().next().getHeaders().getSequenceSize(); } - // Example for the case when completeness is checked on the structure of - // the data + // Example for the case when completeness is checked on the structure of the data public boolean checkCompletenessOnListOfStrings(List messages) { StringBuffer buffer = new StringBuffer(); for (String content : messages) { diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/aggregator/MethodInvokingAggregatorTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/aggregator/MethodInvokingAggregatorTests.java index 16be9fd187..7506201a18 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/aggregator/MethodInvokingAggregatorTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/aggregator/MethodInvokingAggregatorTests.java @@ -24,9 +24,7 @@ import java.util.List; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.springframework.integration.ConfigurationException; -import org.springframework.integration.aggregator.Aggregator; -import org.springframework.integration.aggregator.MethodInvokingAggregator; + import org.springframework.integration.message.GenericMessage; import org.springframework.integration.message.Message; @@ -44,8 +42,9 @@ public class MethodInvokingAggregatorTests { simpleAggregator = new SimpleAggregator(); } + @Test - public void testAdapterWithNonParameterizedMessageListBasedMethod() { + public void adapterWithNonParameterizedMessageListBasedMethod() { Aggregator aggregator = new MethodInvokingAggregator(simpleAggregator, "doAggregationOnNonParameterizedListOfMessages"); List> messages = createListOfMessages(); Message returnedMessge = aggregator.aggregate(messages); @@ -54,7 +53,7 @@ public class MethodInvokingAggregatorTests { } @Test - public void testAdapterWithWildcardParametrizedMessageBasedMethod() { + public void adapterWithWildcardParameterizedMessageBasedMethod() { Aggregator aggregator = new MethodInvokingAggregator(simpleAggregator, "doAggregationOnListOfMessagesParametrizedWithWildcard"); List> messages = createListOfMessages(); Message returnedMessge = aggregator.aggregate(messages); @@ -63,16 +62,16 @@ public class MethodInvokingAggregatorTests { } @Test - public void testAdapterWithTypeParametrizedMessageBasedMethod() { + public void adapterWithTypeParameterizedMessageBasedMethod() { Aggregator aggregator = new MethodInvokingAggregator(simpleAggregator, "doAggregationOnListOfMessagesParametrizedWithString"); List> messages = createListOfMessages(); Message returnedMessge = aggregator.aggregate(messages); Assert.assertTrue(simpleAggregator.isAggregationPerformed()); Assert.assertEquals("123456789", returnedMessge.getPayload()); } - + @Test - public void testAdapterWithPojoBasedMethod() { + public void adapterWithPojoBasedMethod() { Aggregator aggregator = new MethodInvokingAggregator(simpleAggregator, "doAggregationOnListOfStrings"); List> messages = createListOfMessages(); Message returnedMessge = aggregator.aggregate(messages); @@ -81,16 +80,16 @@ public class MethodInvokingAggregatorTests { } @Test - public void testAdapterWithPojoBasedMethodReturningObject() { + public void adapterWithPojoBasedMethodReturningObject() { Aggregator aggregator = new MethodInvokingAggregator(simpleAggregator, "doAggregationOnListOfStringsReturningLong"); List> messages = createListOfMessages(); Message returnedMessge = aggregator.aggregate(messages); Assert.assertTrue(simpleAggregator.isAggregationPerformed()); Assert.assertEquals(123456789l, returnedMessge.getPayload()); } - + @Test - public void testAdapterWithVoidReturnType() { + public void adapterWithVoidReturnType() { Aggregator aggregator = new MethodInvokingAggregator(simpleAggregator, "doAggregationWithNoReturn"); List> messages = createListOfMessages(); Message returnedMessage = aggregator.aggregate(messages); @@ -99,7 +98,7 @@ public class MethodInvokingAggregatorTests { } @Test - public void testAdapterWithNullReturn() { + public void adapterWithNullReturn() { Aggregator aggregator = new MethodInvokingAggregator(simpleAggregator, "doAggregationWithNullReturn"); List> messages = createListOfMessages(); Message returnedMessage = aggregator.aggregate(messages); @@ -107,68 +106,68 @@ public class MethodInvokingAggregatorTests { Assert.assertNull(returnedMessage); } - @Test(expected=ConfigurationException.class) - public void testAdapterWithWrongMethodName() { + @Test(expected = IllegalArgumentException.class) + public void adapterWithWrongMethodName() { new MethodInvokingAggregator(simpleAggregator, "methodThatDoesNotExist"); } - @Test(expected=ConfigurationException.class) - public void testInvalidParameterTypeUsingMethodName() { + @Test(expected = IllegalArgumentException.class) + public void invalidParameterTypeUsingMethodName() { new MethodInvokingAggregator(simpleAggregator, "invalidParameterType"); } - @Test(expected=ConfigurationException.class) - public void testTooManyParametersUsingMethodName() { + @Test(expected = IllegalArgumentException.class) + public void tooManyParametersUsingMethodName() { new MethodInvokingAggregator(simpleAggregator, "tooManyParameters"); } - @Test(expected=ConfigurationException.class) - public void testNotEnoughParametersUsingMethodName() { + @Test(expected = IllegalArgumentException.class) + public void notEnoughParametersUsingMethodName() { new MethodInvokingAggregator(simpleAggregator, "notEnoughParameters"); } - @Test(expected=ConfigurationException.class) - public void testListSubclassParameterUsingMethodName() { + @Test(expected = IllegalArgumentException.class) + public void listSubclassParameterUsingMethodName() { new MethodInvokingAggregator(simpleAggregator, "ListSubclassParameter"); } - @Test(expected=ConfigurationException.class) - public void testInvalidParameterTypeUsingMethodObject() throws SecurityException, NoSuchMethodException { + @Test(expected = IllegalArgumentException.class) + public void invalidParameterTypeUsingMethodObject() throws SecurityException, NoSuchMethodException { new MethodInvokingAggregator(simpleAggregator, simpleAggregator.getClass().getMethod( "invalidParameterType", String.class)); } - @Test(expected=ConfigurationException.class) - public void testTooManyParametersUsingMethodObject() throws SecurityException, NoSuchMethodException { + @Test(expected = IllegalArgumentException.class) + public void tooManyParametersUsingMethodObject() throws SecurityException, NoSuchMethodException { new MethodInvokingAggregator(simpleAggregator, simpleAggregator.getClass().getMethod( "tooManyParameters", List.class, List.class)); } - @Test(expected=ConfigurationException.class) - public void testNotEnoughParametersUsingMethodObject() throws SecurityException, NoSuchMethodException { + @Test(expected = IllegalArgumentException.class) + public void notEnoughParametersUsingMethodObject() throws SecurityException, NoSuchMethodException { new MethodInvokingAggregator(simpleAggregator, simpleAggregator.getClass().getMethod( "notEnoughParameters", new Class[] {} )); } - @Test(expected= ConfigurationException.class) - public void testListSubclassParameterUsingMethodObject() throws SecurityException, NoSuchMethodException { + @Test(expected = IllegalArgumentException.class) + public void listSubclassParameterUsingMethodObject() throws SecurityException, NoSuchMethodException { new MethodInvokingAggregator(simpleAggregator, simpleAggregator.getClass().getMethod( "listSubclassParameter", new Class[] {LinkedList.class} )); } - @Test(expected=IllegalArgumentException.class) - public void testNullObject() { + @Test(expected = IllegalArgumentException.class) + public void nullObject() { new MethodInvokingAggregator(null, "doesNotMatter"); } - @Test(expected=IllegalArgumentException.class) - public void testNullMethodName() { + @Test(expected = IllegalArgumentException.class) + public void nullMethodName() { String methodName = null; new MethodInvokingAggregator(simpleAggregator, methodName); } - @Test(expected=IllegalArgumentException.class) - public void testNullMethodObject() { + @Test(expected = IllegalArgumentException.class) + public void nullMethodObject() { Method method = null; new MethodInvokingAggregator(simpleAggregator, method); }