Reputation: 22516
I'm trying to write a simple Spring AOP app, but I have problem with the xml configuration.
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/aop">
<bean id="audience" class="springaop.Audience">
</bean>
<bean id="sam" class="springaop.Singer">
<property name="id" value="1"></property>
</bean>
<aop:config>
<aop:aspect ref="audience">
<aop:before pointcut="* springaop.Singer.perform(..)"
method="takeSeats"></aop:before>
</aop:aspect>
</aop:config>
</beans>
I get this warning and exception:
WARNING: Ignored XML validation warning org.xml.sax.SAXParseException: SchemaLocation: schemaLocation value = 'http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop' must have even number of URI's. Exception: Line 18 in XML document from class path resource [aop-conf.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'.
Also, I cant understand the xmlns
Upvotes: 10
Views: 14022
Reputation: 61434
Change the <beans
declaration at the top of the XML to look like this:
<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/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
You're just adding this "http://www.springframework.org/schema/aop/spring-aop-3.0.xsd". The xsi:schemaLocation
attribute is just a bunch of pairs. The first of each pair is a schema URI, the second is the URL where the schema can be found. You can think of it as a map: key, then value.
Upvotes: 22
Reputation: 86774
The xsi:schemaLocation
attribute must have an even number of URIs. Each pair associates a namespace URI with the location of the XSD. Your xsi:schemaLocation
contains three URIs, so it is invalid. This is what the message is telling you.
You need to provide the location of the XSD for http://www.springframework.org/schema/aop
Upvotes: 6