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 edc118171..5da3cceac 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 @@ -48,6 +48,35 @@ public abstract class AbstractStepParser { private StepListenerParser stepListenerParser = new StepListenerParser(); + /** + * @param element + * @param parserContext + * @return a BeanDefinition if possible + */ + protected AbstractBeanDefinition parseTasklet(Element element, ParserContext parserContext) { + + String jobRepositoryRef = element.getAttribute("job-repository"); + String taskletRef = element.getAttribute("tasklet"); + @SuppressWarnings("unchecked") + List taskletElements = (List) DomUtils.getChildElementsByTagName(element, "tasklet"); + AbstractBeanDefinition bd = null; + if (StringUtils.hasText(taskletRef)) { + if (taskletElements.size() > 0) { + parserContext.getReaderContext().error( + "The <" + taskletElements.get(0).getNodeName() + + "> element can't be combined with the 'tasklet=\"" + taskletRef + + "\"' attribute specification for <" + element.getNodeName() + ">", element); + } + bd = parseTaskletRef(element, taskletRef, parserContext, jobRepositoryRef); + } + else if (taskletElements.size() > 0) { + Element taskElement = taskletElements.get(0); + bd = parseTaskletElement(element, taskElement, parserContext, jobRepositoryRef); + } + return bd; + + } + /** * @param stepElement * @param taskletRef 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 a5bc77afd..ddf961a0c 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 @@ -15,13 +15,9 @@ */ package org.springframework.batch.core.configuration.xml; -import java.util.List; - import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.GenericBeanDefinition; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.util.StringUtils; -import org.springframework.util.xml.DomUtils; import org.w3c.dom.Element; /** @@ -42,28 +38,14 @@ public class StandaloneStepParser extends AbstractStepParser { * @param parserContext the parser context for the bean factory */ public AbstractBeanDefinition parse(Element element, ParserContext parserContext) { - - String taskletRef = element.getAttribute("tasklet"); - String jobRepositoryRef = element.getAttribute("job-repository"); - - @SuppressWarnings("unchecked") - List processTaskElements = (List) DomUtils.getChildElementsByTagName(element, "tasklet"); - AbstractBeanDefinition bd = null; - if (StringUtils.hasText(taskletRef)) { - bd = parseTaskletRef(element, taskletRef, parserContext, jobRepositoryRef); - } - else if (processTaskElements.size() > 0) { - Element taskElement = processTaskElements.get(0); - bd = parseTaskletElement(element, taskElement, parserContext, jobRepositoryRef); - } - else { + AbstractBeanDefinition bd = parseTasklet(element, parserContext); + if (bd == null) { bd = new GenericBeanDefinition(); - setUpBeanDefinition(element, bd, parserContext, jobRepositoryRef); + setUpBeanDefinition(element, bd, parserContext, element.getAttribute("job-repository")); } bd.setAbstract(Boolean.valueOf(element.getAttribute("abstract"))); return bd; - } } 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 071b53b8f..7268ee0af 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,9 +19,7 @@ - - - +