配置问题:无法找到XML模式名称空间的Spring NamespaceHandler

时间:2019-04-09 12:46:49

标签: java spring maven

我一个接一个地面临很多问题。让我正确记录下来-

我正在实现Springframework缓存,这是我最初的SpringCacheConfig.xml-

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:cache="http://www.springframework.org/schema/cache"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:c="http://www.springframework.org/schema/c"
   xmlns:p="http://www.springframework.org/schema/p"
   xmlns:hz="http://www.hazelcast.com/schema/spring"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                       http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd
                       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
                       http://www.hazelcast.com/schema/spring http://www.hazelcast.com/schema/spring/hazelcast-spring.xsd"> 

这在我的笔记本电脑上运行正常,但是在测试VM中,我们无法从Internet下载XSD架构文件。

所以我将架构位置更改为类路径-

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:cache="http://www.springframework.org/schema/cache"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:c="http://www.springframework.org/schema/c"
   xmlns:p="http://www.springframework.org/schema/p"
   xmlns:hz="http://www.hazelcast.com/schema/spring"
   xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:spring-beans.xsd
                       http://www.springframework.org/schema/cache classpath:spring-cache.xsd
                       http://www.springframework.org/schema/context classpath:spring-context.xsd
                       http://www.hazelcast.com/schema/spring classpath:hazelcast-spring.xsd">

因此,现在拾取了XSD文件。但是下载的spring-context.xsd文件具有以下内容-

<xsd:import namespace="http://www.springframework.org/schema/beans" schemaLocation="https://www.springframework.org/schema/beans/spring-beans-4.3.xsd"/>
<xsd:import namespace="http://www.springframework.org/schema/tool" schemaLocation="https://www.springframework.org/schema/tool/spring-tool-4.3.xsd"/>

所以我再次将它们移至类路径。

完成这些更改后,如果现在执行我们的代码,则会收到以下错误-

Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: 
Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]
    Offending resource: class path resource [SpringCacheConfig.xml]

我曾尝试通过许多以前的文章解决此问题,但未能解决。

pom已经包含与春季相关的jar-

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${springframework.version}</version>
</dependency>

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${springframework.version}</version>
</dependency>

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${springframework.version}</version>
</dependency>

这些罐子没有包装在主罐子中,但可以通过

获得。
  

modules / system / layers / thirdparty / org / springframework / main / spring-context-4.3.1.RELEASE.jar。

但是为什么找不到该罐子?

我也尝试了阴影插件,但是仍然不包括依赖罐- How to create spring-based executable jar with maven?

我还要考虑什么?

我在jar中没有META-INF / spring.handlers等与Spring相关的文件。可能是问题吗?

1 个答案:

答案 0 :(得分:0)

我通过创建一个META-INF目录并将spring.handlers和spring.schemas文件放入其中来解决了这个问题。我提取了所有的弹簧罐,其中一些具有这些spring.handlers和spring.schemas文件。我将这些文件的内容串联起来,并将它们放在META-INF中。

但是令人惊讶的是,该项目在Eclipse中工作,但在VM中工作。在eclipse项目中,我不需要复制jar的META-INF目录中的spring.handlers和spring.schemas文件-它可以在没有它们的情况下工作。但是在VM中,我需要复制文件!这些文件可能是在Eclipse中从.m2引用的,因为这些jar位于类路径中?有想法吗?

谢谢