ActiveMQ
  1. ActiveMQ
  2. AMQ-1638

XmlBeanDefinitionStoreException : activemq.xsd URL broken in spring.schemas

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 5.0.0
    • Fix Version/s: 5.9.0
    • Component/s: Broker
    • Labels:
      None
    • Environment:

      activemq-core-5.0.0 and spring-jms-2.5.2 .

    • Regression:
      Regression

      Description

      Problem description

      activemq-core's spring.schemas file targets broken activemq xsd urls. When beans.xml targets the correct activemq-core-5.0.0.xsd url in xsi:schemaLocation attribute, Spring fails to start if an internet connection to activemq.apache.org does not work.

      Sample of currently failing spring configuration file

      beans.xml with "activemq-core-5.0.0.xsd" in "xsi:schemaLocation" attribute
      <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lang="http://www.springframework.org/schema/lang"
         xmlns:amq="http://activemq.org/config/1.0" xmlns:jms="http://www.springframework.org/schema/jms"
         xsi:schemaLocation="
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
      http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd
      http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-2.5.xsd
      http://activemq.org/config/1.0 http://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd">
         ...
         <amq:queue id="requestDestination" physicalName="requestDestination" />
         <amq:queue id="replyToDestination" physicalName="replyToDestination" />
         <amq:connectionFactory id="activeMqConnectionFactory" brokerURL="vm://localhost?broker.persistent=false&amp;broker.useJmx=false" />
         ...
      </beans>
      

      Spring loading failure stacktrace

      42907 [main] WARN  org.springframework.beans.factory.xml.XmlBeanDefinitionReader  - Ignored XML validation warning
      org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
      	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
      ...
      	at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
      	at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
      ...
      	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:44)
      ...
      	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
      42969 [main] ERROR org.springframework.test.context.TestContextManager  - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@1be8711] to prepare test instance [fr.xebia.sample.springframework.jms.requestreply.RequestReplySpringFrameworkTest@1958cc2]
      org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 24 in XML document from class path resource [fr/xebia/sample/springframework/jms/requestreply/beans.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'amq:queue'.
      	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
      ...
      	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:44)
      ...
      	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
      Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'amq:queue'.
      	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
      ...
      	at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
      	at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
      	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:382)
      	... 26 more
      
      1. AMQ-1638.patch
        0.7 kB
        Cyrille Le Clerc

        Issue Links

          Activity

          Hide
          Claus Ibsen added a comment -

          All the schema versions is included in activemq-all in the 5.9 release.

          Show
          Claus Ibsen added a comment - All the schema versions is included in activemq-all in the 5.9 release.
          Hide
          Stevo Slavic added a comment -

          Seems like resource filtering hasn't been configured (properly). http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

          Show
          Stevo Slavic added a comment - Seems like resource filtering hasn't been configured (properly). http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
          Hide
          Roland T. Lichti added a comment -

          In activemq-all-5.4.1.jar the spring.schemas list is broken:

          http\://activemq.org/config/1.0=activemq.xsd
          http\://activemq.org/config/1.0/1.0.xsd=activemq.xsd
          http\://activemq.apache.org/schema/core=activemq.xsd
          http\://activemq.apache.org/schema/core/activemq-core.xsd=activemq.xsd
          http\://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd=activemq.xsd
          http\://activemq.apache.org/schema/core/activemq-core-5.1.0.xsd=activemq.xsd
          http\://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd=activemq.xsd
          http\://activemq.apache.org/schema/core/activemq-core-5.3.0.xsd=activemq.xsd
          http\://activemq.apache.org/schema/core/activemq-core-${pom.version}.xsd=activemq.xsd
          

          The pom.version can't be interpreted by spring ...

          Show
          Roland T. Lichti added a comment - In activemq-all-5.4.1.jar the spring.schemas list is broken: http\: //activemq.org/config/1.0=activemq.xsd http\: //activemq.org/config/1.0/1.0.xsd=activemq.xsd http\: //activemq.apache.org/schema/core=activemq.xsd http\: //activemq.apache.org/schema/core/activemq-core.xsd=activemq.xsd http\: //activemq.apache.org/schema/core/activemq-core-5.0.0.xsd=activemq.xsd http\: //activemq.apache.org/schema/core/activemq-core-5.1.0.xsd=activemq.xsd http\: //activemq.apache.org/schema/core/activemq-core-5.2.0.xsd=activemq.xsd http\: //activemq.apache.org/schema/core/activemq-core-5.3.0.xsd=activemq.xsd http\: //activemq.apache.org/schema/core/activemq-core-${pom.version}.xsd=activemq.xsd The pom.version can't be interpreted by spring ...
          Hide
          Lachezar Dobrev added a comment -

          I would like to comment negatively on the decision to change the URLs for the schema files.

          Using the no-version XSD files breaks many tools, including, but not limited to XML validation tools.
          Using the with-version XSD files fixes the problems with any other tools, however since the URL is not mapped within the spring.schemas file it breaks application start up when no Internet connection is available.
          There is also the compatibility issue. If the no-version URL is used it will break, or work, depending on whether the correct version of the JAR is in the class path, which leads to a number of obscure XML validation errors at runtime.

          The simplest thing is to include the no-version AND the with-current-version URLs in the spring.schemas file.

          Please reopen this issue.

          Show
          Lachezar Dobrev added a comment - I would like to comment negatively on the decision to change the URLs for the schema files. Using the no-version XSD files breaks many tools, including, but not limited to XML validation tools. Using the with-version XSD files fixes the problems with any other tools, however since the URL is not mapped within the spring.schemas file it breaks application start up when no Internet connection is available. There is also the compatibility issue. If the no-version URL is used it will break, or work, depending on whether the correct version of the JAR is in the class path, which leads to a number of obscure XML validation errors at runtime. The simplest thing is to include the no-version AND the with-current-version URLs in the spring.schemas file. Please reopen this issue.
          Hide
          Hiram Chirino added a comment -

          AMQ-1673 basically changes how name spaces need to be setup and declared in 5.1.0.

          Switch to the following xmlns configuration and it should work with 5.1.0

          <beans
            xmlns="http://www.springframework.org/schema/beans"
            xmlns:amq="http://activemq.apache.org/schema/core"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
            http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
          
          Show
          Hiram Chirino added a comment - AMQ-1673 basically changes how name spaces need to be setup and declared in 5.1.0. Switch to the following xmlns configuration and it should work with 5.1.0 <beans xmlns= "http: //www.springframework.org/schema/beans" xmlns:amq= "http: //activemq.apache.org/schema/core" xmlns:xsi= "http: //www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http: //www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http: //activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
          Hide
          Glen Mazza added a comment -

          Our company has also stumbled upon this problem--it was rather time-consuming to root out. It would nice if the patch could be applied to save others the headache.

          Show
          Glen Mazza added a comment - Our company has also stumbled upon this problem--it was rather time-consuming to root out. It would nice if the patch could be applied to save others the headache.
          Hide
          Cyrille Le Clerc added a comment -

          Patch for AMQ-1638 : add correct activemq-core-5.0.0.xsd URL in spring.schemas file.

          Added line in spring.schemas file:

          http\://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd = activemq.xsd
          
          Show
          Cyrille Le Clerc added a comment - Patch for AMQ-1638 : add correct activemq-core-5.0.0.xsd URL in spring.schemas file. Added line in spring.schemas file: http\://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd = activemq.xsd

            People

            • Assignee:
              Hiram Chirino
              Reporter:
              Cyrille Le Clerc
            • Votes:
              4 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development