无法找到Spring NamespaceHandler以解决XML模式名称空间问题

时间:2012-07-11 20:11:58

标签: java spring xsd gate

我遇到了“无法找到XML架构名称空间的Spring NamespaceHandler”这个奇怪的问题。我在我的spring应用程序上下文中引用了GATE命名空间。它是一个可执行jar,java类实例化spring应用程序上下文。当我通过eclipse在我的本地机器上测试时,它工作正常。但是,当我尝试将其作为带有java主类的可执行jar运行时,会出现问题。

这是例外。


org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://gate.ac.uk/ns/spring]
Offending resource: class path resource [applicationContext.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:util="http://www.springframework.org/schema/util" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:gate="http://gate.ac.uk/ns/spring"
    xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd 
       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
       http://gate.ac.uk/ns/spring http://gate.ac.uk/ns/spring.xsd">

架构可以访问且有效。

可执行jar包含依赖于门的jar文件。这是门

的pom文件条目


<dependency>
            <groupId>gate</groupId>
            <artifactId>gate</artifactId>
            <version>5.1</version>
        </dependency>
        <dependency>
            <groupId>gate</groupId>
            <artifactId>gate-asm</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>gate</groupId>
            <artifactId>gate-compiler-jdt</artifactId>
            <version>1.0</version>
        </dependency>

这是java代码片段


try{
    AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
        this.processor = (TestProcessor) ctx.getBean("testProcessor");
   }catch (Exception ex) {
    ex.printStackTrace();
   }

这是Gate文档参考。

http://gate.ac.uk/releases/gate-5.0-beta1-build3048-ALL/doc/tao/splitch3.html#x5-900003.27

不确定会出现什么问题,任何指针都会受到高度赞赏。

由于

1 个答案:

答案 0 :(得分:2)

门自定义命名空间的namespacehandler将在此应用程序提供的jar文件中指定(gate.jar?),如果查看jar文件,您应该看到一个META-INF / spring.handlers文件输入以下类型:

http://gate.ac.uk/ns/spring=*NamespaceHandler

这是您的程序在启动时无法找到的处理程序。您的类路径可能在主程序中关闭,或者如果您已经使用某些东西将jar组合成一个jar(超级jar),那么META-INF / spring.handlers文件在不同jar文件中的合并可能会搞砸了,那里如果你创造了一个超级罐,那么这是很好的解决方法。