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 e6e02a1e7..e5e364813 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 @@ -207,7 +207,8 @@ public abstract class AbstractStepParser { String[] exceptionArray = StringUtils.tokenizeToStringArray(exceptions, ",\n"); if (exceptionArray.length > 0) { ManagedList managedList = new ManagedList(); - managedList.setMergeEnabled(Boolean.valueOf(child.getAttribute(MERGE_ATTR))); + managedList.setMergeEnabled(child.hasAttribute(MERGE_ATTR) + && Boolean.valueOf(child.getAttribute(MERGE_ATTR))); managedList.addAll(Arrays.asList(exceptionArray)); propertyValues.addPropertyValue(propertyName, managedList); } @@ -242,7 +243,8 @@ public abstract class AbstractStepParser { parserContext.extractSource(stepElement)); parserContext.pushContainingComponent(compositeDef); ManagedList listenerBeans = new ManagedList(); - listenerBeans.setMergeEnabled(Boolean.valueOf(listenersElement.getAttribute(MERGE_ATTR))); + listenerBeans.setMergeEnabled(listenersElement.hasAttribute(MERGE_ATTR) + && Boolean.valueOf(listenersElement.getAttribute(MERGE_ATTR))); List listenerElements = DomUtils.getChildElementsByTagName(listenersElement, "listener"); if (listenerElements != null) { for (Element listenerElement : listenerElements) { diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/ChunkElementParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/ChunkElementParser.java index 3e3f1db15..af809350b 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/ChunkElementParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/ChunkElementParser.java @@ -155,7 +155,8 @@ public class ChunkElementParser { parserContext.extractSource(element)); parserContext.pushContainingComponent(compositeDef); ManagedList retryListenerBeans = new ManagedList(); - retryListenerBeans.setMergeEnabled(Boolean.valueOf(listenersElement.getAttribute(MERGE_ATTR))); + retryListenerBeans.setMergeEnabled(listenersElement.hasAttribute(MERGE_ATTR) + && Boolean.valueOf(listenersElement.getAttribute(MERGE_ATTR))); handleRetryListenerElements(parserContext, listenersElement, retryListenerBeans); propertyValues.addPropertyValue("retryListeners", retryListenerBeans); parserContext.popAndRegisterContainingComponent(); @@ -215,7 +216,8 @@ public class ChunkElementParser { Element streamsElement = DomUtils.getChildElementByTagName(element, "streams"); if (streamsElement != null) { ManagedList streamBeans = new ManagedList(); - streamBeans.setMergeEnabled(Boolean.valueOf(streamsElement.getAttribute(MERGE_ATTR))); + streamBeans.setMergeEnabled(streamsElement.hasAttribute(MERGE_ATTR) + && Boolean.valueOf(streamsElement.getAttribute(MERGE_ATTR))); List streamElements = DomUtils.getChildElementsByTagName(streamsElement, "stream"); if (streamElements != null) { for (Element streamElement : streamElements) { diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobParser.java index 3c3b43640..317aceeb7 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/JobParser.java @@ -36,6 +36,8 @@ import org.w3c.dom.Element; */ public class JobParser extends AbstractSingleBeanDefinitionParser { + private static final String MERGE_ATTR = "merge"; + private static final JobExecutionListenerParser jobListenerParser = new JobExecutionListenerParser(); @Override @@ -96,7 +98,8 @@ public class JobParser extends AbstractSingleBeanDefinitionParser { parserContext.extractSource(element)); parserContext.pushContainingComponent(compositeDef); ManagedList listeners = new ManagedList(); - listeners.setMergeEnabled(Boolean.valueOf(listenersElement.getAttribute("merge"))); + listeners.setMergeEnabled(listenersElement.hasAttribute(MERGE_ATTR) + && Boolean.valueOf(listenersElement.getAttribute(MERGE_ATTR))); List listenerElements = (List) DomUtils.getChildElementsByTagName(listenersElement, "listener"); for (Element listenerElement : listenerElements) { diff --git a/spring-batch-core/src/main/resources/org/springframework/batch/core/configuration/xml/spring-batch-2.0.xsd b/spring-batch-core/src/main/resources/org/springframework/batch/core/configuration/xml/spring-batch-2.0.xsd index 81307ed1e..5b2b00f0a 100644 --- a/spring-batch-core/src/main/resources/org/springframework/batch/core/configuration/xml/spring-batch-2.0.xsd +++ b/spring-batch-core/src/main/resources/org/springframework/batch/core/configuration/xml/spring-batch-2.0.xsd @@ -811,7 +811,7 @@ - + Should this list be merged with the corresponding list provided