找不到XML架构命名空间的Spring NamespaceHandler[http://www.springframework.org/schema/data/mongo]
我正在尝试构建一个示例Spring+MongoDB框架,我得到了下面的运行时错误找不到XML架构命名空间的Spring NamespaceHandler[http://www.springframework.org/schema/data/mongo],spring,mongodb,maven,configuration,Spring,Mongodb,Maven,Configuration,我正在尝试构建一个示例Spring+MongoDB框架,我得到了下面的运行时错误 SEVERE: Context initialization failed org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://
SEVERE: Context initialization failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/data/mongo]
Offending resource: ServletContext resource [/WEB-INF/spring-servlet.xml]
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:284)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1332)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1325)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
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.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:93)
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.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
Apr 23, 2013 7:14:57 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/data/mongo]
Offending resource: ServletContext resource [/WEB-INF/spring-servlet.xml]
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:284)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1332)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1325)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
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.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:93)
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.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
<bean id="mongoAddress" class="com.mongodb.ServerAddress">
<constructor-arg name="host" value="${MONGO_HOST}" />
<constructor-arg name="port" value="${MONGO_PORT}" />
</bean>
<bean id="mongo" class="com.mongodb.Mongo">
<constructor-arg name="addr" ref="mongoAddress" />
<constructor-arg name="options" ref="mongoOptions"/>
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg index="0" ref="mongo" />
<constructor-arg index="1" value="mydb" />
</bean>
供您参考,我的代码在github中:<bean id="mongoAddress" class="com.mongodb.ServerAddress">
<constructor-arg name="host" value="${MONGO_HOST}" />
<constructor-arg name="port" value="${MONGO_PORT}" />
</bean>
<bean id="mongo" class="com.mongodb.Mongo">
<constructor-arg name="addr" ref="mongoAddress" />
<constructor-arg name="options" ref="mongoOptions"/>
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg index="0" ref="mongo" />
<constructor-arg index="1" value="mydb" />
</bean>
你知道怎么解决这个问题吗?谢谢你的时间
<bean id="mongoAddress" class="com.mongodb.ServerAddress">
<constructor-arg name="host" value="${MONGO_HOST}" />
<constructor-arg name="port" value="${MONGO_PORT}" />
</bean>
<bean id="mongo" class="com.mongodb.Mongo">
<constructor-arg name="addr" ref="mongoAddress" />
<constructor-arg name="options" ref="mongoOptions"/>
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg index="0" ref="mongo" />
<constructor-arg index="1" value="mydb" />
</bean>
编辑:我检查了jar,在那里找到了springmongodbxsd文件
james@james-Inspiron-1525:~/.m2/repository/org/springframework/data/spring-data-mongodb/1.2.0.RELEASE$ ls
_maven.repositories spring-data-mongodb-1.2.0.RELEASE.pom
spring-data-mongodb-1.2.0.RELEASE.jar spring-data-mongodb-1.2.0.RELEASE.pom.sha1
spring-data-mongodb-1.2.0.RELEASE.jar.sha1 spring-data-mongodb-1.2.0.RELEASE-sources.jar
spring-data-mongodb-1.2.0.RELEASE-javadoc.jar spring-data-mongodb-1.2.0.RELEASE-sources.jar.sha1
spring-data-mongodb-1.2.0.RELEASE-javadoc.jar.sha1
james@james-Inspiron-1525:~/.m2/repository/org/springframework/data/spring-data-mongodb/1.2.0.RELEASE$ jar -tf spring-data-mongodb-1.2.0.RELEASE.jar | grep xsd
org/springframework/data/mongodb/config/spring-mongo-1.2.xsd
org/springframework/data/mongodb/config/spring-mongo-1.1.xsd
org/springframework/data/mongodb/config/spring-mongo-1.0.xsd
james@james-Inspiron-1525:~/.m2/repository/org/springframework/data/spring-data-mongodb/1.2.0.RELEASE$
<bean id="mongoAddress" class="com.mongodb.ServerAddress">
<constructor-arg name="host" value="${MONGO_HOST}" />
<constructor-arg name="port" value="${MONGO_PORT}" />
</bean>
<bean id="mongo" class="com.mongodb.Mongo">
<constructor-arg name="addr" ref="mongoAddress" />
<constructor-arg name="options" ref="mongoOptions"/>
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg index="0" ref="mongo" />
<constructor-arg index="1" value="mydb" />
</bean>
您必须确保WEB-INF/libs目录中有一个spring-data-mongodb-1.2.0.RELEASE.jar。请检查一下 我已经找到了这个问题的解决方案
<bean id="mongoAddress" class="com.mongodb.ServerAddress">
<constructor-arg name="host" value="${MONGO_HOST}" />
<constructor-arg name="port" value="${MONGO_PORT}" />
</bean>
<bean id="mongo" class="com.mongodb.Mongo">
<constructor-arg name="addr" ref="mongoAddress" />
<constructor-arg name="options" ref="mongoOptions"/>
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg index="0" ref="mongo" />
<constructor-arg index="1" value="mydb" />
</bean>
尝试直接删除架构和定义的mongo bean,如下所示:
<bean id="mongoAddress" class="com.mongodb.ServerAddress">
<constructor-arg name="host" value="${MONGO_HOST}" />
<constructor-arg name="port" value="${MONGO_PORT}" />
</bean>
<bean id="mongo" class="com.mongodb.Mongo">
<constructor-arg name="addr" ref="mongoAddress" />
<constructor-arg name="options" ref="mongoOptions"/>
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg index="0" ref="mongo" />
<constructor-arg index="1" value="mydb" />
</bean>
<bean id="mongoAddress" class="com.mongodb.ServerAddress">
<constructor-arg name="host" value="${MONGO_HOST}" />
<constructor-arg name="port" value="${MONGO_PORT}" />
</bean>
<bean id="mongo" class="com.mongodb.Mongo">
<constructor-arg name="addr" ref="mongoAddress" />
<constructor-arg name="options" ref="mongoOptions"/>
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg index="0" ref="mongo" />
<constructor-arg index="1" value="mydb" />
</bean>
这个解决方案对我来说很好。看起来您是在运行时而不是编译时得到的。我无法在Github中编译您的项目;但是,如果包含XSD的JAR不在组装的WAR文件中,通常会发生此类错误。您是否验证了Spring MongoDB JAR是否在您的WEB-INF/lib目录中?是的,您向我们展示了JAR在您的Maven存储库中,但它们需要在运行时位于WEB应用程序的类路径上,这通常意味着WEB-INF/lib。您的pom与github中的pom不同吗?我找不到您引用spring数据jar的位置。可能与有关?这不是spring数据连接样式@user1944413写出了正确的答案
<bean id="mongoAddress" class="com.mongodb.ServerAddress">
<constructor-arg name="host" value="${MONGO_HOST}" />
<constructor-arg name="port" value="${MONGO_PORT}" />
</bean>
<bean id="mongo" class="com.mongodb.Mongo">
<constructor-arg name="addr" ref="mongoAddress" />
<constructor-arg name="options" ref="mongoOptions"/>
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg index="0" ref="mongo" />
<constructor-arg index="1" value="mydb" />
</bean>