RESOLVED - BATCH-1143: Standalone <step/> should not be allowed to have "tasklet" attribute and <tasklet/> together

This commit is contained in:
dhgarrette
2009-03-13 05:22:43 +00:00
parent 1ffd28d0f6
commit 1ddfe49191
3 changed files with 34 additions and 25 deletions

View File

@@ -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<Element> taskletElements = (List<Element>) 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

View File

@@ -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<Element> processTaskElements = (List<Element>) 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;
}
}

View File

@@ -11,7 +11,7 @@
<tasklet reader="reader" writer="writer" commit-interval="5"/>
</step>
<step id="s2" ref="standalone2" next="s3"/>
<step id="s3" parent="baseStep" tasklet="dummyTasklet" next="s4"/>
<step id="s3" tasklet="dummyTasklet" parent="baseStep" next="s4"/>
<step id="s4" ref="standalone4"/>
</job>
@@ -19,9 +19,7 @@
<tasklet reader="reader" writer="writer" commit-interval="5"/>
</step>
<step id="standalone4" tasklet="dummyTasklet" parent="baseStep">
<tasklet reader="reader" writer="writer" commit-interval="5"/>
</step>
<step id="standalone4" tasklet="dummyTasklet" parent="baseStep"/>
<step id="baseStep" abstract="true">
<listeners>