Reputation: 1687
I am learning spring 3 from a book and I get an exception in the first example itself. It is given below. My project can be downloaded as a zip file from the link - https://github.com/double-whammy/prospring3.git
My environment - Eclipse STS (Eclipse for Spring)
Exception:
INFO t.support.ClassPathXmlApplicationContext: 456 - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@497e4b: startup date [Wed Jul 23 10:05:47 PDT 2014];
root of context hierarchy
INFO eans.factory.xml.XmlBeanDefinitionReader: 315 - Loading XML bean definitions from class path resource [META-INF/spring/app-context.xml]
Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 13 in XML document from class path resource [META-INF/spring/app-context.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 13; columnNumber: 38; The prefix "p" for attribute "p:messageProvider-ref" associated with an element type "bean" is not bound.
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:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:126)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:92)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.apress.prospring3.ch2.HelloWorldSpringDI.main(HelloWorldSpringDI.java:9)
Caused by: org.xml.sax.SAXParseException; lineNumber: 13; columnNumber: 38; The prefix "p" for attribute "p:messageProvider-ref" associated with an element type "bean" is not bound.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
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.XMLErrorReporter.reportError(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 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388)
... 14 more
Spring XML Application Configuration xml file:
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
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">
<bean id="provider" class="com.apress.prospring3.ch2.HelloWorldMessageProvider"/>
<bean id="renderer" class="com.apress.prospring3.ch2.StandardOutMessageRenderer"
p:messageProvider-ref="provider"/>
</beans>
Upvotes: 3
Views: 2363
Reputation: 31
You can not use: p:messageProvider-ref="provider"
, it was in spring 2.5
use this:
<bean id="renderer" class="com.appress.prospring3.ch2.StandardOutMessageRenderer">
<property name="messageProvider" ref="provider"></property>
</bean>
Upvotes: 1
Reputation: 455
The problem you have is related to the fact that maven only picks one of the spring.handlers files from all the different spring jars.
To solve this use the following link: http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#Merging_Content_of_Specific_Files_with_AppendingTransformer_and_XmlAppendingTransformer
Note that you have to use the maven Assembly Plugin.
Similar problems as yours are explained here: http://blog.idm.fr/2009/09/maven-assembly-plugin-and-spring-namespace-handlers.html
Upvotes: 0
Reputation: 1687
The error is because there are no quotes around the value of xmlns:xsi. Correction - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Pro spring 3 book sucks.
full 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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
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">
<bean id="provider" class="com.apress.prospring3.ch2.HelloWorldMessageProvider" />
<bean id="renderer" class="com.apress.prospring3.ch2.StandardOutMessageRenderer"
p:messageProvider-ref="provider" />
Upvotes: 0
Reputation: 120871
It is because your xml is a invalid:
the header has a mistake: there the xsi
attribute value needs its double quotes!
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<bean id="renderer" class="com.apress.prospring3.ch2.StandardOutMessageRenderer"
p:messageProvider-ref="provider"/>
I do not know what you want to configure, but a p:messageProvider-ref
as an attribute is invalid xml.
I thing you wanted to express something like a bean renderer
of type StandardOutMessageRenderer
that use the bean provider
for its MessageProvider
.
<bean id="provider" class="com.apress.prospring3.ch2.HelloWorldMessageProvider"/> <bean id="renderer" class="com.apress.prospring3.ch2.StandardOutMessageRenderer"><property name="messageProvider" ref="provider"/></bean>
Upvotes: 1