INT-1932 added support for 'delimiters' attribute on the <splitter> element (when not using a 'ref', 'expression', or inner bean)

This commit is contained in:
Mark Fisher
2011-07-12 14:14:15 -04:00
parent af7bc5ac74
commit 5bffa91a1b
8 changed files with 171 additions and 52 deletions

View File

@@ -19,13 +19,14 @@
<splitter input-channel="inDefault" output-channel="out" />
<splitter input-channel="inDelimiters" output-channel="out" delimiters=",;/ " />
<beans:bean id="splitterBeanXmlConfig"
class="org.springframework.integration.splitter.SplitterIntegrationTests$TestSplitter" />
<beans:bean id="splitterBeanAnnotationConfig"
class="org.springframework.integration.splitter.SplitterIntegrationTests$TestSplitter" />
<beans:bean
class="org.springframework.integration.splitter.SplitterIntegrationTests$Receiver" />
<beans:bean class="org.springframework.integration.splitter.SplitterIntegrationTests$Receiver" />
</beans:beans>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration.xsd">
<channel id="out">
<queue/>
</channel>
<splitter input-channel="in" output-channel="out" delimiters="," expression="'foo,bar'"/>
</beans:beans>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration.xsd">
<channel id="out">
<queue/>
</channel>
<splitter input-channel="in" output-channel="out" delimiters=",;/ ">
<beans:bean id="bean" class="org.springframework.integration.splitter.SplitterIntegrationTests$Receiver"/>
</splitter>
</beans:beans>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration.xsd">
<channel id="out">
<queue/>
</channel>
<splitter input-channel="in" output-channel="out" delimiters=",;/ " ref="bean"/>
<beans:bean id="bean" class="org.springframework.integration.splitter.SplitterIntegrationTests$Receiver"/>
</beans:beans>

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2011 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,17 +16,20 @@
package org.springframework.integration.splitter;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.Message;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.annotation.MessageEndpoint;
@@ -40,23 +43,24 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author Iwein Fuld
* @author Alexander Peters
* @author Mark Fisher
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class SplitterIntegrationTests {
@Autowired
@Qualifier("inAnnotated")
MessageChannel inAnnotated;
@Autowired
@Qualifier("inMethodInvoking")
MessageChannel inMethodInvoking;
@Autowired
@Qualifier("inDefault")
MessageChannel inDefault;
@Autowired
MessageChannel inDelimiters;
@Autowired
MethodInvokingSplitter splitter;
@@ -67,9 +71,13 @@ public class SplitterIntegrationTests {
@Autowired
Receiver receiver;
@Before
public void clearWords() {
receiver.receivedWords.clear();
}
@MessageEndpoint
public static class Receiver {
private List<String> receivedWords = new ArrayList<String>();
@ServiceActivator(inputChannel = "out")
@@ -113,7 +121,55 @@ public class SplitterIntegrationTests {
assertTrue(receiver.receivedWords.containsAll(words));
assertTrue(words.containsAll(receiver.receivedWords));
}
@Test
public void delimiterSplitter() throws Exception {
inDelimiters.send(new GenericMessage<String>("one,two, three; four/five"));
assertTrue(receiver.receivedWords.containsAll(Arrays.asList("one", "two", "three", "four", "five")));
}
@Test(expected = IllegalArgumentException.class)
public void delimitersNotAllowedWithRef() throws Throwable {
try {
new ClassPathXmlApplicationContext("SplitterIntegrationTests-invalidRef.xml", SplitterIntegrationTests.class);
}
catch (BeanCreationException e) {
Throwable cause = e.getMostSpecificCause();
assertNotNull(cause);
assertTrue(cause instanceof IllegalArgumentException);
assertTrue(cause.getMessage().contains("'delimiters' property is only available"));
throw cause;
}
}
@Test(expected = IllegalArgumentException.class)
public void delimitersNotAllowedWithInnerBean() throws Throwable {
try {
new ClassPathXmlApplicationContext("SplitterIntegrationTests-invalidInnerBean.xml", SplitterIntegrationTests.class);
}
catch (BeanCreationException e) {
Throwable cause = e.getMostSpecificCause();
assertNotNull(cause);
assertTrue(cause instanceof IllegalArgumentException);
assertTrue(cause.getMessage().contains("'delimiters' property is only available"));
throw cause;
}
}
@Test(expected = IllegalArgumentException.class)
public void delimitersNotAllowedWithExpression() throws Throwable {
try {
new ClassPathXmlApplicationContext("SplitterIntegrationTests-invalidExpression.xml", SplitterIntegrationTests.class);
}
catch (BeanCreationException e) {
Throwable cause = e.getMostSpecificCause();
assertNotNull(cause);
assertTrue(cause instanceof IllegalArgumentException);
assertTrue(cause.getMessage().contains("'delimiters' property is only available"));
throw cause;
}
}
@Test
public void channelResolver_isNotNull() throws Exception {
splitter.setOutputChannel(null);