diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttParserUtils.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttParserUtils.java index 41388831b8..ef28cc8122 100644 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttParserUtils.java +++ b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/config/xml/MqttParserUtils.java @@ -18,14 +18,17 @@ package org.springframework.integration.mqtt.config.xml; import org.w3c.dom.Element; import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.ConstructorArgumentValues.ValueHolder; import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.integration.config.xml.IntegrationNamespaceUtils; +import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory; import org.springframework.util.StringUtils; /** * Contains various utility methods for parsing Mqtt Adapter - * specific namesspace elements as well as for the generation of the the + * specific namespace elements as well as for the generation of the the * respective {@link BeanDefinition}s. * * @author Gary Russell @@ -41,11 +44,17 @@ public final class MqttParserUtils { public static void parseCommon(Element element, BeanDefinitionBuilder builder, ParserContext parserContext) { + ValueHolder holder; + int n = 0; String url = element.getAttribute("url"); if (StringUtils.hasText(url)) { builder.addConstructorArgValue(url); + holder = builder.getRawBeanDefinition().getConstructorArgumentValues().getIndexedArgumentValues().get(n++); + holder.setType("java.lang.String"); } builder.addConstructorArgValue(element.getAttribute("client-id")); + holder = builder.getRawBeanDefinition().getConstructorArgumentValues().getIndexedArgumentValues().get(n++); + holder.setType("java.lang.String"); String clientFactory = element.getAttribute("client-factory"); if (StringUtils.hasText(clientFactory)) { builder.addConstructorArgReference(clientFactory); @@ -55,6 +64,7 @@ public final class MqttParserUtils { parserContext.getReaderContext().error("If no 'url' attribute is provided, a 'client-factory' " + "(with serverURIs) is required", element); } + builder.addConstructorArgValue(new RootBeanDefinition(DefaultMqttPahoClientFactory.class)); } IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "converter"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "send-timeout"); diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParserTests-context.xml b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParserTests-context.xml index d1f5ce060d..48553f1538 100644 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParserTests-context.xml +++ b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/config/xml/MqttMessageDrivenChannelAdapterParserTests-context.xml @@ -17,6 +17,12 @@ client-factory="clientFactory" channel="out" /> + +