Add support for 'trigger' attribute.
This commit is contained in:
@@ -42,6 +42,7 @@ import org.springframework.util.xml.DomUtils;
|
||||
* Parser for the <poller> element.
|
||||
*
|
||||
* @author Mark Fisher
|
||||
* @author Marius Bogoevici
|
||||
*/
|
||||
public class PollerParser extends AbstractBeanDefinitionParser {
|
||||
|
||||
@@ -91,18 +92,31 @@ public class PollerParser extends AbstractBeanDefinitionParser {
|
||||
|
||||
private void configureTrigger(Element pollerElement, BeanDefinitionBuilder targetBuilder, ParserContext parserContext) {
|
||||
String triggerBeanName = null;
|
||||
if (pollerElement.hasAttribute("trigger")) {
|
||||
triggerBeanName = pollerElement.getAttribute("trigger");
|
||||
}
|
||||
Element intervalElement = DomUtils.getChildElementByTagName(pollerElement, "interval-trigger");
|
||||
if (intervalElement != null) {
|
||||
if (triggerBeanName != null) {
|
||||
parserContext.getReaderContext().error(
|
||||
"A <poller> element with the 'trigger' attribute cannot have <interval-trigger/> or <cron-trigger/> child elements. ", pollerElement);
|
||||
}
|
||||
triggerBeanName = parseIntervalTrigger(intervalElement, parserContext);
|
||||
}
|
||||
else {
|
||||
Element cronElement = DomUtils.getChildElementByTagName(pollerElement, "cron-trigger");
|
||||
if (cronElement == null) {
|
||||
parserContext.getReaderContext().error(
|
||||
"A <poller> element must include either an <interval-trigger/> or <cron-trigger/> child element.", pollerElement);
|
||||
}
|
||||
triggerBeanName = parseCronTrigger(cronElement, parserContext);
|
||||
if (cronElement != null) {
|
||||
if (triggerBeanName != null) {
|
||||
parserContext.getReaderContext().error(
|
||||
"A <poller> element with the 'trigger' attribute cannot have <interval-trigger/> or <cron-trigger/> child elements. ", pollerElement);
|
||||
}
|
||||
triggerBeanName = parseCronTrigger(cronElement, parserContext);
|
||||
}
|
||||
}
|
||||
if (triggerBeanName == null) {
|
||||
parserContext.getReaderContext().error(
|
||||
"A <poller> element must include a trigger definition, either as a 'trigger' attribute, or as an <interval-trigger/> or <cron-trigger/> child element.", pollerElement);
|
||||
}
|
||||
targetBuilder.addPropertyReference("trigger", triggerBeanName);
|
||||
}
|
||||
|
||||
|
||||
@@ -1099,6 +1099,15 @@
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="trigger" type="xsd:string">
|
||||
<xsd:annotation>
|
||||
<xsd:appinfo>
|
||||
<tool:annotation kind="ref">
|
||||
<tool:expected-type type="org.springframework.scheduling.Trigger" />
|
||||
</tool:annotation>
|
||||
</xsd:appinfo>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
<xsd:attribute name="receive-timeout" type="xsd:string" />
|
||||
<xsd:attribute name="send-timeout" type="xsd:string" />
|
||||
<xsd:attribute name="max-messages-per-poll" type="xsd:string" />
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package org.springframework.integration.config;
|
||||
|
||||
import org.springframework.scheduling.Trigger;
|
||||
import org.springframework.scheduling.TriggerContext;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author Marius Bogoevici
|
||||
*/
|
||||
public class TestTrigger implements Trigger {
|
||||
|
||||
public Date nextExecutionTime(TriggerContext triggerContext) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -18,12 +18,14 @@ package org.springframework.integration.config.xml;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.beans.factory.parsing.BeanDefinitionParsingException;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
import org.springframework.integration.config.TestTrigger;
|
||||
import org.springframework.integration.context.IntegrationContextUtils;
|
||||
import org.springframework.integration.scheduling.PollerMetadata;
|
||||
|
||||
@@ -88,4 +90,14 @@ public class PollerParserTests {
|
||||
assertEquals(1234, metadata.getReceiveTimeout());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pollerWithTriggerReference() {
|
||||
ApplicationContext context = new ClassPathXmlApplicationContext(
|
||||
"pollerWithTriggerReference.xml", PollerParserTests.class);
|
||||
Object poller = context.getBean("poller");
|
||||
assertNotNull(poller);
|
||||
PollerMetadata metadata = (PollerMetadata) poller;
|
||||
assertTrue(metadata.getTrigger() instanceof TestTrigger);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans:beans xmlns="http://www.springframework.org/schema/integration"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:beans="http://www.springframework.org/schema/beans"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/integration
|
||||
http://www.springframework.org/schema/integration/spring-integration.xsd">
|
||||
|
||||
<poller id="poller" receive-timeout="1234" default="true" trigger="trigger"/>
|
||||
|
||||
<beans:bean id="trigger" class="org.springframework.integration.config.TestTrigger"/>
|
||||
|
||||
</beans:beans>
|
||||
Reference in New Issue
Block a user