From d80005a95528391eda616169ef8386ef4c55c6c0 Mon Sep 17 00:00:00 2001 From: Christian Dupuis Date: Fri, 15 May 2009 13:24:59 +0000 Subject: [PATCH] fixed tooling related problem where empty value of an attribute that should take a bean reference would call the RuntimeBeanReference constructor in the namespace parser and throw a IllegalArgumentException although the problem has already been reported using the ProblemReporter API --- .../AbstractListenerContainerParser.java | 21 ++++++++++++------- .../config/JcaListenerContainerParser.java | 9 ++++---- .../config/JmsListenerContainerParser.java | 9 ++++---- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/org.springframework.jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java b/org.springframework.jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java index 573816fd5e..dd5776970b 100644 --- a/org.springframework.jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java +++ b/org.springframework.jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java @@ -18,10 +18,6 @@ package org.springframework.jms.config; import javax.jms.Session; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.parsing.BeanComponentDefinition; @@ -30,6 +26,9 @@ import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.beans.factory.xml.BeanDefinitionParser; 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; /** * Abstract parser for JMS listener container elements, providing support for @@ -116,7 +115,9 @@ abstract class AbstractListenerContainerParser implements BeanDefinitionParser { parserContext.getReaderContext().error( "Listener 'ref' attribute contains empty value.", listenerEle); } - listenerDef.getPropertyValues().addPropertyValue("delegate", new RuntimeBeanReference(ref)); + else { + listenerDef.getPropertyValues().addPropertyValue("delegate", new RuntimeBeanReference(ref)); + } String method = null; if (listenerEle.hasAttribute(METHOD_ATTRIBUTE)) { @@ -130,8 +131,14 @@ abstract class AbstractListenerContainerParser implements BeanDefinitionParser { if (containerEle.hasAttribute(MESSAGE_CONVERTER_ATTRIBUTE)) { String messageConverter = containerEle.getAttribute(MESSAGE_CONVERTER_ATTRIBUTE); - listenerDef.getPropertyValues().addPropertyValue("messageConverter", - new RuntimeBeanReference(messageConverter)); + if (!StringUtils.hasText(messageConverter)) { + parserContext.getReaderContext().error( + "Listener container 'message-converter' attribute contains empty value.", containerEle); + } + else { + listenerDef.getPropertyValues().addPropertyValue("messageConverter", + new RuntimeBeanReference(messageConverter)); + } } BeanDefinition containerDef = parseContainer(listenerEle, containerEle, parserContext); diff --git a/org.springframework.jms/src/main/java/org/springframework/jms/config/JcaListenerContainerParser.java b/org.springframework.jms/src/main/java/org/springframework/jms/config/JcaListenerContainerParser.java index 7865b574b4..b7a173a2f3 100644 --- a/org.springframework.jms/src/main/java/org/springframework/jms/config/JcaListenerContainerParser.java +++ b/org.springframework.jms/src/main/java/org/springframework/jms/config/JcaListenerContainerParser.java @@ -16,13 +16,12 @@ package org.springframework.jms.config; -import org.w3c.dom.Element; - import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.util.StringUtils; +import org.w3c.dom.Element; /** * Parser for the JMS <jca-listener-container> element. @@ -49,9 +48,11 @@ class JcaListenerContainerParser extends AbstractListenerContainerParser { parserContext.getReaderContext().error( "Listener container 'resource-adapter' attribute contains empty value.", containerEle); } + else { + containerDef.getPropertyValues().addPropertyValue("resourceAdapter", + new RuntimeBeanReference(resourceAdapterBeanName)); + } } - containerDef.getPropertyValues().addPropertyValue("resourceAdapter", - new RuntimeBeanReference(resourceAdapterBeanName)); String activationSpecFactoryBeanName = containerEle.getAttribute(ACTIVATION_SPEC_FACTORY_ATTRIBUTE); String destinationResolverBeanName = containerEle.getAttribute(DESTINATION_RESOLVER_ATTRIBUTE); diff --git a/org.springframework.jms/src/main/java/org/springframework/jms/config/JmsListenerContainerParser.java b/org.springframework.jms/src/main/java/org/springframework/jms/config/JmsListenerContainerParser.java index 6d325d550d..c6f6bf2df4 100644 --- a/org.springframework.jms/src/main/java/org/springframework/jms/config/JmsListenerContainerParser.java +++ b/org.springframework.jms/src/main/java/org/springframework/jms/config/JmsListenerContainerParser.java @@ -18,13 +18,12 @@ package org.springframework.jms.config; import javax.jms.Session; -import org.w3c.dom.Element; - import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.util.StringUtils; +import org.w3c.dom.Element; /** * Parser for the JMS <listener-container> element. @@ -83,8 +82,10 @@ class JmsListenerContainerParser extends AbstractListenerContainerParser { "Listener container 'connection-factory' attribute contains empty value.", containerEle); } } - containerDef.getPropertyValues().addPropertyValue("connectionFactory", - new RuntimeBeanReference(connectionFactoryBeanName)); + if (StringUtils.hasText(connectionFactoryBeanName)) { + containerDef.getPropertyValues().addPropertyValue("connectionFactory", + new RuntimeBeanReference(connectionFactoryBeanName)); + } String taskExecutorBeanName = containerEle.getAttribute(TASK_EXECUTOR_ATTRIBUTE); if (StringUtils.hasText(taskExecutorBeanName)) {