Spring AOP: "no declaration can be found for element 'aop:config' "

19,305

The order of xsi:schemaLocation items is wrong, each namespace URI should be followed by its XSD location:

xsi:schemaLocation="
     http://www.springframework.org/schema/beans             
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd         
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-3.0.xsd          
     http://www.springframework.org/schema/aop         
     http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
Share:
19,305
HellishHeat
Author by

HellishHeat

Full stack developer with 10+ years experience in Financial services, Pharma and Energy.

Updated on June 12, 2022

Comments

  • HellishHeat
    HellishHeat almost 2 years

    I've seen that a few instances of this problem have been raised already. However, I am confident that I satisfy the criteria that has been outlined in those solutions. i.e. I'm pretty sure I have the desired jars on my class path + my schemalocation addresses look in order.

    One solution mentioned that the issue can be caused by having another XML parser on the classpath. I do have dom4j on my classpath but I have removed it to test, and the problem persists.

    Here's my classpath:

    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
        <classpathentry kind="src" path="src"/>
        <classpathentry kind="src" path="test"/>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/mysql-connector-java-5.1.18-bin.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/jaxen-1.1.3.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.aop-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.asm-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.aspects-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.beans-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.context.support-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.context-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.core-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.expression-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.instrument.tomcat-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.instrument-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.jdbc-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.jms-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.orm-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.oxm-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.test-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.transaction-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.web.portlet-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.web.servlet-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.web.struts-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/org.springframework.web-3.1.0.RC1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/log4j-1.2.16.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/commons-logging-1.1.1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/spring-mvc-airline/WebContent/WEB-INF/lib/junit-4.9b2.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/mybatis-3.1.0-SNAPSHOT.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/mybatis-spring-1.1.0.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/lambdaj-2.4.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/cglib-2.2.2.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/aspectj-1.6.12.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/aspectjrt-1.5.4.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/dom4j-1.6.1.jar"/>
        <classpathentry kind="lib" path="C:/Users/user/workspace/rugby-project/lib/spring-aop-3.0.3.RELEASE.jar"/>
        <classpathentry kind="output" path="bin"/>
    </classpath>
    

    And here's my xml:

    <?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:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
        <bean id="timer" class="ie.ucd.dec.al.rugby.aop.Timer" />
    
        <aop:config>
            <aop:aspect ref="timer">
                <aop:pointcut id="migrationManager_migrate"
                    expression="execution(* ie.ucd.dec.al.rugby.data.migrate.MigrationManager.migrateAllXmlFilesInDirectory())" />
    
                <aop:around pointcut-ref="migrationManager_migrate"
                    method="timeJob()" />
            </aop:aspect>
    
        </aop:config>
    
    </beans>
    

    Finally, here is my stacktrace:

    Exception in thread "main"
    org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 15 in XML document from class path resource [spring-aop.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 'aop:config'.
        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.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243)
        at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
        at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
        at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
        at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
        at ie.ucd.dec.al.rugby.data.migrate.MigrationRunner.main(MigrationRunner.java:10)
    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 'aop:config'.
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(UnknownSource)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
        at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
        at 
    

    Hope someone can help.

    Thanks!

  • HellishHeat
    HellishHeat over 10 years
    I am a good bit more Spring aware these days, and would like to advise people to use the 'Namespaces' tab within STS (Spring perspective) when adding namespaces. Removes the potential for such rookie errors.
  • Sagar
    Sagar over 10 years
    Thanks @HellishHeat, for pro tip
  • herau
    herau almost 10 years
    does the version is mandatory in the declaration of the namespace ? for exemple can i put http://www.springframework.org/schema/beans/spring-beans.xsd instead of http://www.springframework.org/schema/beans/spring-beans-3.0‌​.xsd