BATCH-1135: Create TopLevelStepListenerHandler specifically for use in the CoreNamespaceHandler
This commit is contained in:
@@ -5,11 +5,10 @@ import java.util.List;
|
||||
|
||||
import org.springframework.batch.core.listener.AbstractListenerFactoryBean;
|
||||
import org.springframework.batch.core.listener.ListenerMetaData;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.beans.factory.support.ManagedMap;
|
||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
|
||||
import org.springframework.beans.factory.xml.ParserContext;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.w3c.dom.Element;
|
||||
@@ -19,16 +18,11 @@ import org.w3c.dom.NamedNodeMap;
|
||||
* @author Dan Garrette
|
||||
* @since 2.0
|
||||
*/
|
||||
public abstract class AbstractListenerParser extends AbstractSingleBeanDefinitionParser {
|
||||
|
||||
public BeanDefinition internalParse(Element element, ParserContext parserContext) {
|
||||
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(getBeanClass(null));
|
||||
this.doParse(element, parserContext, builder);
|
||||
return builder.getBeanDefinition();
|
||||
}
|
||||
public abstract class AbstractListenerParser {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
|
||||
public AbstractBeanDefinition parse(Element element, ParserContext parserContext) {
|
||||
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(getBeanClass(null));
|
||||
String id = element.getAttribute("id");
|
||||
String listenerRef = element.getAttribute("ref");
|
||||
String className = element.getAttribute("class");
|
||||
@@ -54,6 +48,7 @@ public abstract class AbstractListenerParser extends AbstractSingleBeanDefinitio
|
||||
}
|
||||
}
|
||||
builder.addPropertyValue("metaDataMap", metaDataMap);
|
||||
return builder.getBeanDefinition();
|
||||
}
|
||||
|
||||
private void checkListenerElementAttributes(ParserContext parserContext, Element element, String id,
|
||||
|
||||
@@ -119,6 +119,10 @@ public abstract class AbstractStepParser {
|
||||
if (StringUtils.hasText(allowStartIfComplete)) {
|
||||
bd.getPropertyValues().addPropertyValue("allowStartIfComplete", allowStartIfComplete);
|
||||
}
|
||||
setParent(stepElement, bd);
|
||||
}
|
||||
|
||||
protected void setParent(Element stepElement, AbstractBeanDefinition bd) {
|
||||
String parentRef = stepElement.getAttribute("parent");
|
||||
if (StringUtils.hasText(parentRef)) {
|
||||
bd.setParentName(parentRef);
|
||||
@@ -138,7 +142,7 @@ public abstract class AbstractStepParser {
|
||||
DomUtils.getChildElementsByTagName(listenersElement, "listener");
|
||||
if (listenerElements != null) {
|
||||
for (Element listenerElement : listenerElements) {
|
||||
listenerBeans.add(stepListenerParser.internalParse(listenerElement, parserContext));
|
||||
listenerBeans.add(stepListenerParser.parse(listenerElement, parserContext));
|
||||
}
|
||||
}
|
||||
ManagedList arguments = new ManagedList();
|
||||
|
||||
@@ -33,6 +33,6 @@ public class CoreNamespaceHandler extends NamespaceHandlerSupport {
|
||||
this.registerBeanDefinitionParser("job", new JobParser());
|
||||
this.registerBeanDefinitionParser("step", new TopLevelStepParser());
|
||||
this.registerBeanDefinitionParser("job-repository", new JobRepositoryParser());
|
||||
this.registerBeanDefinitionParser("step-listener", new StepListenerParser());
|
||||
this.registerBeanDefinitionParser("step-listener", new TopLevelStepListenerParser());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@ public class JobParser extends AbstractSingleBeanDefinitionParser {
|
||||
List<BeanDefinition> listeners = new ArrayList<BeanDefinition>();
|
||||
List<Element> listenerElements = (List<Element>) DomUtils.getChildElementsByTagName(listenersElement, "listener");
|
||||
for (Element listenerElement : listenerElements) {
|
||||
listeners.add(listenerParser.internalParse(listenerElement, parserContext));
|
||||
listeners.add(listenerParser.parse(listenerElement, parserContext));
|
||||
}
|
||||
ManagedList managedList = new ManagedList();
|
||||
managedList.addAll(listeners);
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package org.springframework.batch.core.configuration.xml;
|
||||
|
||||
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
||||
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
|
||||
import org.springframework.beans.factory.xml.ParserContext;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
* @author Dan Garrette
|
||||
* @since 2.0
|
||||
*/
|
||||
public class TopLevelStepListenerParser extends AbstractBeanDefinitionParser {
|
||||
|
||||
@Override
|
||||
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
|
||||
|
||||
StepListenerParser stepListenerParser = new StepListenerParser();
|
||||
return stepListenerParser.parse(element, parserContext);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user