Question

I want to use the MQTT support of Spring Integration 4.0.0M3, until now, I have configured the application-context and defined some integrations. It's all green in my IDE and all required dependencies are here. If I now try to start my application, I get the following exception during startup:

/mqtt-application-context.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 24; columnNumber: 67; cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'int-mqtt:message-driven-channel-adapter'.
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:266)
... 62 more
Caused by: org.xml.sax.SAXParseException; lineNumber: 24; columnNumber: 67; cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'int-mqtt:message-driven-channel-adapter'.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437)

My spring-integration related context configuration:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:int="http://www.springframework.org/schema/integration"
   xmlns:int-mqtt="http://www.springframework.org/schema/integration/mqtt"
   xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
    http://www.springframework.org/schema/integration/mqtt http://www.springframework.org/schema/integration/mqtt/spring-integration-mqtt.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    ">
<import resource="customer-propertyPlaceholder-config.xml" />
<bean id="clientFactory"
      class="org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory">
    <property name="userName" value="${mqtt.username}"/>
    <property name="password" value="${mqtt.password}"/>
</bean>
<int-mqtt:message-driven-channel-adapter id="twoTopicsAdapter"
                                         client-id="${mqtt.clientId}"
                                         url="${mqtt.url}"
                                         topics="bar, baz"
                                         channel="startCase"/>
<int:service-activator id="startCase" input-channel="startCaseAdapter" ref="mqttCaseService" method="startCase" />
<bean id="mqttCaseService" class="foo.bar.mqtt.MqttCaseService" />

I also tried to specify the schema location by classpath:

http://www.springframework.org/schema/integration/mqtt classpath:/org/springframework/integration/mqtt/config/xml/spring-integration-mqtt-4.0.xsd

But this does not solve my issue, even the mentioned element is declared in the schema on the classpath:

<xsd:element name="message-driven-channel-adapter">
    <xsd:annotation>
        <xsd:documentation>
            The definition for the Spring Integration MqttAdapter
            Inbound Channel Adapter.
        </xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
        <xsd:attributeGroup ref="coreMqttComponentAttributes"/>
        <xsd:attribute name="channel" type="xsd:string">
            <xsd:annotation>
                <xsd:appinfo>
                    <tool:annotation kind="ref">
                        <tool:expected-type type="org.springframework.integration.core.MessageChannel" />
                    </tool:annotation>
                </xsd:appinfo>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="topics">
            <xsd:annotation>
                <xsd:documentation>
                    Specifies one or more (comma-delimited) topics on which to listen for messages.
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="send-timeout" type="xsd:string">
            <xsd:annotation>
                <xsd:documentation><![CDATA[
                    Allows you to specify how long this inbound-channel-adapter
                    will wait for the message (containing the retrieved entities)
                    to be sent successfully to the message channel, before throwing
                    an exception.

                    Keep in mind that when sending to a DirectChannel, the
                    invocation will occur in the sender's thread so the failing
                    of the send operation may be caused by other components
                    further downstream. By default the Inbound Channel Adapter
                    will wait indefinitely. The value is specified in milliseconds.
                ]]>
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:complexType>
</xsd:element>

Has anybody a hint on what I'm doing wrong here?

Kind regards, michael

Was it helpful?

Solution

Ok, I think I managed to avoid this. There was a version conflict for spring-integration-core.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top