Spring 3.0 -- 无法为 XML 模式命名空间上下文找到 Spring NamespaceHandler

Posted

技术标签:

【中文标题】Spring 3.0 -- 无法为 XML 模式命名空间上下文找到 Spring NamespaceHandler【英文标题】:Spring 3.0 -- Unable to locate Spring NamespaceHandler for XML schema namespace context 【发布时间】:2015-06-09 23:25:23 【问题描述】:

找不到 Spring XML 模式的 NamespaceHandler 命名空间 [http://www.springframework.org/schema/context]

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 NamespaceHandler for namespace
[http://www.springframework.org/schema/context]
Offending resource: ServletContext resource [/WEB-INF/HelloWorld-service.xml]

这是我的 HelloWorld-service.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"
xmlns:util="http://www.springframework.org/schema/util"
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/util
    http://www.springframework.org/schema/util/spring-util-3.0.xsd"
     default-autowire="byName">

<context:component-scan base-package="com.test.service">
    <context:include-filter type="annotation"
        expression="org.springframework.stereotype.Service"/>
</context:component-scan>   

在我的 pom.xml 我有:

<properties>
    <spring.version>3.0.5.RELEASE</spring.version>
</properties>
........
<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>$spring.version</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>$spring.version</version>
    </dependency>

项目树结构: 任何想法可能是什么原因?

【问题讨论】:

尝试删除 org.springframeworkspring-context$spring.version 来自 pom.xml @Arpit。我试过了兄弟。但没有运气:( 您在类路径上是否有任何其他 spring jar,即在某处的应用服务器 lib 文件夹中? 我在 maven 文件夹 (.m2) 中有弹簧罐(不同版本)。这会是个问题吗? m2 文件夹应该没有问题,但如果它在您的本地计算机上,我建议清理它并只解决这个项目。其次,你是把你的 jars 打包到 WEB-INF/lib 文件夹还是 WEB-INF/lib/srping/[子文件夹]? 【参考方案1】:

这通常发生在我在 Eclipse 下启动 WebApp 时;我不知道为什么,似乎 Eclipse 找不到包含 spring XSD 模式的 spring jar 通常我通过在 WEB-INF/lib 目录下添加 spring jar 来解决它(通过使用 pom.xml 中声明的相同名称)

【讨论】:

【参考方案2】:

如果您正在使用 eclipse,请尝试以下步骤:

右键项目->属性->部署程序集->Java构建路径条目->Maven依赖

这意味着在部署程序集中添加 maven 依赖项

【讨论】:

【参考方案3】:

我在项目的 POM 中成功使用了 spring BOM(“材料清单”):

<dependencyManagement>
    <dependencies>
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-framework-bom</artifactId>
         <version>3.2.6.RELEASE</version>
         <scope>import</scope>
         <type>pom</type>
      </dependency>
    </dependencies>
</dependencyManagement>

但是earliest version of spring-framework-bom in maven central repository is 3.2.6.RELEASE,您必须迁移到不同的版本才能使用 BOM。 BOM 确保按版本一致地解决工件。这还允许您从依赖项中删除所有 &lt;version&gt;$spring.version&lt;/version&gt;

还有"versionless" xsd参考:

xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd">

【讨论】:

以上是关于Spring 3.0 -- 无法为 XML 模式命名空间上下文找到 Spring NamespaceHandler的主要内容,如果未能解决你的问题,请参考以下文章

Spring 3.0 - 无法找到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/securit

spring boot1.3.0版本及以上版本profile指定参数无法被打入

XSLT 3.0 - 无法在 XSLT 3.0 xml-to-json() 中获取对象数组

Spring,JMS - 无法找到 XML 模式命名空间的 Spring NamespaceHandler

错误“无法找到 XML 模式命名空间的 Spring NamespaceHandler”

错误“无法找到 XML 模式命名空间的 Spring NamespaceHandler”