diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractStepParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractStepParser.java
index ad7ec6111..c2eb133e2 100644
--- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractStepParser.java
+++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractStepParser.java
@@ -64,7 +64,7 @@ public abstract class AbstractStepParser {
bd.getPropertyValues().addPropertyValue("tasklet", taskletBeanRef);
}
- setUpBeanDefinition(stepElement, bd, parserContext, jobRepositoryRef, "stepExecutionListeners");
+ setUpBeanDefinition(stepElement, bd, parserContext, jobRepositoryRef);
return bd;
@@ -78,13 +78,13 @@ public abstract class AbstractStepParser {
ParserContext parserContext, String jobRepositoryRef) {
AbstractBeanDefinition bd = taskletElementParser.parseTaskletElement(element, parserContext);
- setUpBeanDefinition(stepElement, bd, parserContext, jobRepositoryRef, "listeners");
+ setUpBeanDefinition(stepElement, bd, parserContext, jobRepositoryRef);
return bd;
}
protected void setUpBeanDefinition(Element stepElement, AbstractBeanDefinition bd, ParserContext parserContext,
- String jobRepositoryRef, String listenersPropertyNames) {
+ String jobRepositoryRef) {
checkStepAttributes(stepElement, bd);
RuntimeBeanReference jobRepositoryBeanRef = new RuntimeBeanReference(jobRepositoryRef);
@@ -94,7 +94,7 @@ public abstract class AbstractStepParser {
RuntimeBeanReference transactionManagerBeanRef = new RuntimeBeanReference(transactionManagerRef);
bd.getPropertyValues().addPropertyValue("transactionManager", transactionManagerBeanRef);
- handleListenersElement(stepElement, bd, parserContext, listenersPropertyNames);
+ handleListenersElement(stepElement, bd, parserContext);
bd.setRole(BeanDefinition.ROLE_SUPPORT);
@@ -117,8 +117,7 @@ public abstract class AbstractStepParser {
}
@SuppressWarnings("unchecked")
- private void handleListenersElement(Element element, BeanDefinition bd, ParserContext parserContext,
- String propertyName) {
+ private void handleListenersElement(Element element, BeanDefinition bd, ParserContext parserContext) {
Element listenersElement = DomUtils.getChildElementByTagName(element, "listeners");
if (listenersElement != null) {
CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(listenersElement.getTagName(),
@@ -132,7 +131,7 @@ public abstract class AbstractStepParser {
listenerBeans.add(stepListenerParser.parse(listenerElement, parserContext));
}
}
- bd.getPropertyValues().addPropertyValue(propertyName, listenerBeans);
+ bd.getPropertyValues().addPropertyValue("listeners", listenerBeans);
parserContext.popAndRegisterContainingComponent();
}
}
diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StandaloneStepParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StandaloneStepParser.java
index 162b8598e..a5bc77afd 100644
--- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StandaloneStepParser.java
+++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/StandaloneStepParser.java
@@ -58,7 +58,7 @@ public class StandaloneStepParser extends AbstractStepParser {
}
else {
bd = new GenericBeanDefinition();
- setUpBeanDefinition(element, bd, parserContext, jobRepositoryRef, "listeners");
+ setUpBeanDefinition(element, bd, parserContext, jobRepositoryRef);
}
bd.setAbstract(Boolean.valueOf(element.getAttribute("abstract")));
diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java
index 6083be1df..9d7f54a03 100644
--- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java
+++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java
@@ -32,6 +32,7 @@ import org.springframework.batch.core.scope.context.StepContextRepeatCallback;
import org.springframework.batch.core.step.AbstractStep;
import org.springframework.batch.core.step.StepInterruptionPolicy;
import org.springframework.batch.core.step.ThreadStepInterruptionPolicy;
+import org.springframework.batch.core.step.item.SimpleStepFactoryBean;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemStream;
@@ -216,6 +217,20 @@ public class TaskletStep extends AbstractStep {
this.interruptionPolicy = interruptionPolicy;
}
+ /**
+ * Variation on
+ * {@link AbstractStep#setStepExecutionListeners(StepExecutionListener[])}.
+ * This method exists because the parser requires a "listeners" property
+ * setter to match the one on {@link SimpleStepFactoryBean}.
+ *
+ * @param listeners
+ * @see AbstractStep#setStepExecutionListeners(StepExecutionListener[])
+ * @see SimpleStepFactoryBean#setListeners(org.springframework.batch.core.StepListener[])
+ */
+ public void setListeners(StepExecutionListener[] listeners) {
+ this.setStepExecutionListeners(listeners);
+ }
+
/**
* Process the step and update its context so that progress can be monitored
* by the caller. The step is broken down into chunks, each one executing in
diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserNoMergeTests-context.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserNoMergeTests-context.xml
index 2fdf1476c..c5b6662df 100644
--- a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserNoMergeTests-context.xml
+++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserNoMergeTests-context.xml
@@ -18,7 +18,7 @@
-
+
diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserTests-context.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserTests-context.xml
index b42e8e44d..1fdd89c24 100644
--- a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserTests-context.xml
+++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepListenerParserTests-context.xml
@@ -18,7 +18,7 @@
-
+
diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepParserParentAttributeTests-context.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepParserParentAttributeTests-context.xml
index 8b0486a64..071b53b8f 100644
--- a/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepParserParentAttributeTests-context.xml
+++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/configuration/xml/StepParserParentAttributeTests-context.xml
@@ -11,7 +11,7 @@
-
+
@@ -19,7 +19,7 @@
-
+
@@ -28,12 +28,5 @@
-
-
-
-
-
-
-
\ No newline at end of file