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" />
+
+