From 6600deefe8b787fe37ee084e925251e88d668fe9 Mon Sep 17 00:00:00 2001 From: dsyer Date: Fri, 9 Jul 2010 11:29:52 +0000 Subject: [PATCH] BATCH-1593: decorate nested bean definitions as well as parsing them --- .../xml/AbstractListenerParser.java | 7 ++++++- .../configuration/xml/ChunkElementParser.java | 18 +++++++++++------- .../core/configuration/xml/JobParser.java | 6 +++++- .../core/configuration/xml/TaskletParser.java | 6 +++++- .../xml/TaskletParserBeanPropertiesTests.java | 3 +-- 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractListenerParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractListenerParser.java index 9d185a28b..6a15dbb33 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractListenerParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/AbstractListenerParser.java @@ -6,6 +6,7 @@ import java.util.List; import org.springframework.batch.core.listener.AbstractListenerFactoryBean; import org.springframework.batch.core.listener.ListenerMetaData; import org.springframework.beans.BeanMetadataElement; +import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; @@ -63,7 +64,11 @@ public abstract class AbstractListenerParser { return new RuntimeBeanReference(listenerRef); } else if (beanElements.size() == 1) { - return parserContext.getDelegate().parseBeanDefinitionElement(beanElements.get(0)); + Element beanElement = beanElements.get(0); + BeanDefinitionHolder beanDefinitionHolder = parserContext.getDelegate().parseBeanDefinitionElement( + beanElement); + parserContext.getDelegate().decorateBeanDefinitionIfRequired(beanElement, beanDefinitionHolder); + return beanDefinitionHolder; } else { return (BeanMetadataElement) parserContext.getDelegate().parsePropertySubElement(refElements.get(0), null); 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 c588eed38..a70431269 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 @@ -18,6 +18,7 @@ package org.springframework.batch.core.configuration.xml; import java.util.List; import org.springframework.beans.MutablePropertyValues; +import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.config.TypedStringValue; import org.springframework.beans.factory.parsing.CompositeComponentDefinition; @@ -104,11 +105,11 @@ public class ChunkElementParser { propertyValues.addPropertyValue("skipLimit", skipLimit); } - handleItemHandler("skip-policy", "skipPolicy", null, false, element, parserContext, - propertyValues, underspecified); + handleItemHandler("skip-policy", "skipPolicy", null, false, element, parserContext, propertyValues, + underspecified); - handleItemHandler("retry-policy", "retryPolicy", null, false, element, parserContext, - propertyValues, underspecified); + handleItemHandler("retry-policy", "retryPolicy", null, false, element, parserContext, propertyValues, + underspecified); String retryLimit = element.getAttribute("retry-limit"); if (StringUtils.hasText(retryLimit)) { @@ -188,8 +189,11 @@ public class ChunkElementParser { + "/> element or a <" + REF_ELE + "/> element.", element); } else if (beanElements.size() == 1) { - propertyValues.addPropertyValue(propertyName, parserContext.getDelegate().parseBeanDefinitionElement( - beanElements.get(0))); + Element beanElement = beanElements.get(0); + BeanDefinitionHolder beanDefinitionHolder = parserContext.getDelegate().parseBeanDefinitionElement( + beanElement); + parserContext.getDelegate().decorateBeanDefinitionIfRequired(beanElement, beanDefinitionHolder); + propertyValues.addPropertyValue(propertyName, beanDefinitionHolder); } else if (refElements.size() == 1) { propertyValues.addPropertyValue(propertyName, parserContext.getDelegate().parsePropertySubElement( @@ -299,7 +303,7 @@ public class ChunkElementParser { ManagedMap map, ParserContext parserContext) { for (Element child : (List) DomUtils.getChildElementsByTagName(exceptionClassesElement, elementName)) { String className = child.getAttribute("class"); - map.put(new TypedStringValue(className, Class.class), include); + map.put(new TypedStringValue(className, Class.class), include); } } 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 5fdb39cb3..a89cdf3c0 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 @@ -20,6 +20,7 @@ import java.util.List; import org.springframework.beans.BeanMetadataElement; import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.parsing.CompositeComponentDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; @@ -158,7 +159,10 @@ public class JobParser extends AbstractSingleBeanDefinitionParser { return new RuntimeBeanReference(refAttribute); } else if (beanElement != null) { - return parserContext.getDelegate().parseBeanDefinitionElement(beanElement); + BeanDefinitionHolder beanDefinitionHolder = parserContext.getDelegate().parseBeanDefinitionElement( + beanElement); + parserContext.getDelegate().decorateBeanDefinitionIfRequired(beanElement, beanDefinitionHolder); + return beanDefinitionHolder; } else if (refElement != null) { return (BeanMetadataElement) parserContext.getDelegate().parsePropertySubElement(refElement, null); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/TaskletParser.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/TaskletParser.java index 04aaf1977..347760e95 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/TaskletParser.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/xml/TaskletParser.java @@ -21,6 +21,7 @@ import org.springframework.batch.core.step.tasklet.MethodInvokingTaskletAdapter; import org.springframework.beans.BeanMetadataElement; import org.springframework.beans.MutablePropertyValues; import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.config.TypedStringValue; import org.springframework.beans.factory.parsing.CompositeComponentDefinition; @@ -91,7 +92,10 @@ public class TaskletParser { bme = new RuntimeBeanReference(taskletRef); } else if (beanElements.size() == 1) { - bme = parserContext.getDelegate().parseBeanDefinitionElement(beanElements.get(0)); + Element beanElement = beanElements.get(0); + BeanDefinitionHolder beanDefinitionHolder = parserContext.getDelegate().parseBeanDefinitionElement(beanElement); + parserContext.getDelegate().decorateBeanDefinitionIfRequired(beanElement, beanDefinitionHolder); + bme = beanDefinitionHolder; } else if (refElements.size() == 1) { bme = (BeanMetadataElement) parserContext.getDelegate().parsePropertySubElement(refElements.get(0), diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/TaskletParserBeanPropertiesTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/TaskletParserBeanPropertiesTests.java index 81198c22b..f3927611b 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/TaskletParserBeanPropertiesTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/TaskletParserBeanPropertiesTests.java @@ -83,8 +83,7 @@ public class TaskletParserBeanPropertiesTests { job2.execute(jobExecution); Step step = job2.getStep("step2"); tasklet = (TestTasklet) ReflectionTestUtils.getField(step, "tasklet"); - // TODO: BATCH-1593: uncomment this - // assertEquals("foo", tasklet.getName()); + assertEquals("foo", tasklet.getName()); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); } }