From 48c97342feb143a98aa697182e95306a31daf696 Mon Sep 17 00:00:00 2001 From: Christian Dupuis Date: Fri, 15 May 2009 13:24:28 +0000 Subject: [PATCH] some minor tweaks to the scheduling namespace parser to make it more tooling friendly; applied new tools:annotation to method attribute in scheduling xsd --- .../ScheduledTasksBeanDefinitionParser.java | 26 +++++++++++++------ .../config/spring-scheduling-3.0.xsd | 8 ++++++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/org.springframework.context/src/main/java/org/springframework/scheduling/config/ScheduledTasksBeanDefinitionParser.java b/org.springframework.context/src/main/java/org/springframework/scheduling/config/ScheduledTasksBeanDefinitionParser.java index c23d501ed46..2551422f76a 100644 --- a/org.springframework.context/src/main/java/org/springframework/scheduling/config/ScheduledTasksBeanDefinitionParser.java +++ b/org.springframework.context/src/main/java/org/springframework/scheduling/config/ScheduledTasksBeanDefinitionParser.java @@ -16,16 +16,15 @@ package org.springframework.scheduling.config; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.ManagedMap; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.util.StringUtils; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; /** * Parser for the 'scheduled-tasks' element of the scheduling namespace. @@ -59,8 +58,16 @@ public class ScheduledTasksBeanDefinitionParser extends AbstractSingleBeanDefini Element taskElement = (Element) child; String ref = taskElement.getAttribute("ref"); String method = taskElement.getAttribute("method"); + + // Check that 'ref' and 'method' are specified + if (!StringUtils.hasText(ref) || !StringUtils.hasText(method)) { + parserContext.getReaderContext().error("Both 'ref' and 'method' are required", taskElement); + // Continue with the possible next task element + continue; + } + RuntimeBeanReference runnableBeanRef = new RuntimeBeanReference( - this.createRunnableBean(ref, method, parserContext)); + this.createRunnableBean(ref, method, taskElement, parserContext)); String cronAttribute = taskElement.getAttribute("cron"); if (StringUtils.hasText(cronAttribute)) { cronTaskMap.put(runnableBeanRef, cronAttribute); @@ -74,8 +81,9 @@ public class ScheduledTasksBeanDefinitionParser extends AbstractSingleBeanDefini String fixedRateAttribute = taskElement.getAttribute("fixed-rate"); if (!StringUtils.hasText(fixedRateAttribute)) { parserContext.getReaderContext().error( - "one of 'cron', 'fixed-delay', or 'fixed-rate' is required", taskElement); - return; + "One of 'cron', 'fixed-delay', or 'fixed-rate' is required", taskElement); + // Continue with the possible next task element + continue; } fixedRateTaskMap.put(runnableBeanRef, fixedRateAttribute); } @@ -90,11 +98,13 @@ public class ScheduledTasksBeanDefinitionParser extends AbstractSingleBeanDefini builder.addPropertyValue("fixedRateTasks", fixedRateTaskMap); } - private String createRunnableBean(String ref, String method, ParserContext parserContext) { + private String createRunnableBean(String ref, String method, Element taskElement, ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( "org.springframework.scheduling.support.MethodInvokingRunnable"); builder.addPropertyReference("targetObject", ref); builder.addPropertyValue("targetMethod", method); + // Extract the source of the current task + builder.getRawBeanDefinition().setSource(parserContext.extractSource(taskElement)); return parserContext.getReaderContext().registerWithGeneratedName(builder.getBeanDefinition()); } diff --git a/org.springframework.context/src/main/resources/org/springframework/scheduling/config/spring-scheduling-3.0.xsd b/org.springframework.context/src/main/resources/org/springframework/scheduling/config/spring-scheduling-3.0.xsd index 70ec070fa35..86fd2bd3160 100644 --- a/org.springframework.context/src/main/resources/org/springframework/scheduling/config/spring-scheduling-3.0.xsd +++ b/org.springframework.context/src/main/resources/org/springframework/scheduling/config/spring-scheduling-3.0.xsd @@ -104,6 +104,9 @@ + + + @@ -111,6 +114,11 @@ + + + + +