BATCH-1396: added step scope to skip policy in chunk parser

This commit is contained in:
Dave Syer
2011-03-20 09:32:36 +00:00
parent 63eee035d4
commit eb79b4c2fb
4 changed files with 26 additions and 8 deletions

View File

@@ -18,6 +18,7 @@ package org.springframework.batch.core.configuration.xml;
import java.util.List;
import org.springframework.batch.core.listener.StepListenerMetaData;
import org.springframework.batch.core.step.skip.LimitCheckingItemSkipPolicy;
import org.springframework.batch.repeat.policy.SimpleCompletionPolicy;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.factory.config.BeanDefinition;
@@ -118,8 +119,26 @@ public class ChunkElementParser {
}
String skipLimit = element.getAttribute("skip-limit");
boolean hasSkipPolicy = false;
if (StringUtils.hasText(skipLimit)) {
propertyValues.addPropertyValue("skipLimit", skipLimit);
if (skipLimit.startsWith("#")) {
// It's a late binding expression, so we need step scope...
BeanDefinitionBuilder skipPolicy = BeanDefinitionBuilder
.genericBeanDefinition(LimitCheckingItemSkipPolicy.class);
skipPolicy.setScope("step");
handleExceptionElement(element, parserContext, skipPolicy.getBeanDefinition().getPropertyValues(),
"skippable-exception-classes", "skippableExceptionMap");
skipPolicy.addPropertyValue("skipLimit", skipLimit);
propertyValues.addPropertyValue("skipPolicy", skipPolicy.getBeanDefinition());
hasSkipPolicy = true;
}
else {
propertyValues.addPropertyValue("skipLimit", skipLimit);
}
}
if (!hasSkipPolicy) {
handleExceptionElement(element, parserContext, propertyValues, "skippable-exception-classes",
"skippableExceptionClasses");
}
handleItemHandler("skip-policy", "skipPolicy", null, false, element, parserContext, propertyValues,
@@ -148,9 +167,6 @@ public class ChunkElementParser {
propertyValues.addPropertyValue("processorTransactional", isProcessorTransactional);
}
handleExceptionElement(element, parserContext, propertyValues, "skippable-exception-classes",
"skippableExceptionClasses");
handleExceptionElement(element, parserContext, propertyValues, "retryable-exception-classes",
"retryableExceptionClasses");