1

「XMLスキーマ名前空間のSpring NamespaceHandlerが見つかりません」という奇妙な問題が発生しています。春のアプリケーションコンテキストで GATE 名前空間を参照しています。これは、Java クラスが Spring アプリケーション コンテキストをインスタンス化する実行可能な jar です。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]

ご覧のとおり、gate 名前空間について不平を言っています。

アプリケーション コンテキスト エントリは次のとおりです。


<?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 には、gate 依存の 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

何がうまくいかないのかわからないので、どんな指針も高く評価されます。

ありがとう

4

1 に答える 1

2

ゲートのカスタム名前空間の名前空間ハンドラーは、このアプリケーションが提供する jar ファイル (gate.jar?) で指定されます。jar ファイルを調べると、META-INF/spring.handlers ファイルに次のエントリが含まれていることがわかります。次のタイプ:

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

これは、プログラムが起動時に見つけることができないハンドラーです。メインプログラムでクラスパスがオフになっている可能性があります。または、何かを使用して jar を単一の jar (uber jar) に結合した場合、異なる jar ファイル間で META-INF/spring.handlers ファイルをマージすると、混乱する可能性があります。ただし、uber jar を作成した場合は、そのための適切な回避策があります。

于 2012-07-12T02:32:34.850 に答える