XMLスキーマネームスペースのSpring NamespaceHandlerが見つかりません

XMLスキーマネームスペースのSpring NamespaceHandlerが見つかりません

1. 問題

この記事では、Springで最も一般的な構成の問題の1つであるa namespace handler for one of the Spring namespaces is not foundについて説明します。 ほとんどの場合、これは1つの特定のSpring jarがクラスパスから欠落していることを意味します。したがって、これらの欠落しているスキーマとは何か、および欠落している各スキーマの依存関係について見ていきましょう。

参考文献:

SpringでのXMLベースのインジェクション

SpringでXMLベースのインジェクションを実行する方法を学びます。

web.xml vs Initializer with Spring

春のXMLとJavaの設定に迅速かつ実用的なガイド。

スプリングフレームワークのよくある質問

就職の面接中に出てくる可能性のあるSpring Frameworkに関する一般的な質問の簡単な議論。

2. http://www.springframework.org/schema/security

利用できないsecurity namespaceは、実際に最も広く遭遇する問題です。




これにより、次の例外が発生します。

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

解決策は簡単です。プロジェクトのクラスパスにspring-security-configの依存関係がありません。


   org.springframework.security
   spring-security-config
   3.2.5.RELEASE

これにより、正しい名前空間ハンドラー(この場合はSecurityNamespaceHandler)がクラスパスに配置され、security名前空間の要素を解析する準備が整います。

Spring Securityの完全なセットアップのための完全なMaven構成は、以前のMaven tutorialにあります。

3. http://www.springframework.org/schema/aop

クラスパスに必要なaopスプリングライブラリがない状態でthe aop namespaceを使用すると、同じ問題が発生します。



正確な例外:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException:
Configuration problem:
Unable to locate Spring NamespaceHandler for XML schema namespace
[http://www.springframework.org/schema/aop]
Offending resource: ServletContext resource [/WEB-INF/webConfig.xml]

解決策も同様です。spring-aopjarをプロジェクトのクラスパスに追加する必要があります。


   org.springframework
   spring-aop
   4.1.0.RELEASE

この場合、AopNamespaceHandlerは、新しい依存関係を追加した後、クラスパスに存在します。

4. http://www.springframework.org/schema/tx

the transaction namespaceの使用–トランザクションセマンティクスの構成に小さいが非常に便利な名前空間:



正しいjarがクラスパス上にない場合も例外が発生します。

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

ここで欠落している依存関係はspring-txです:


    org.springframework
    spring-tx
    4.1.0.RELEASE

これで、適切なNamspaceHandler、つまりTxNamespaceHandlerがクラスパスに存在し、XMLとアノテーションの両方を使用した宣言型トランザクション管理が可能になります。

5. http://www.springframework.org/schema/mvc

the mvc namespaceに進む:



依存関係がないため、次の例外が発生します。

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

この場合、欠落している依存関係はspring-mvcです。


    org.springframework
    spring-webmvc
    4.1.0.RELEASE

これをpom.xmlに追加すると、MvcNamespaceHandlerがクラスパスに追加され、プロジェクトが名前空間を使用してMVCセマンティクスを構成できるようになります。

6. 結論

最後に、Eclipseを使用してWebサーバーを管理し、デプロイする場合は、the Deployment Assembly section of the project is correctly configuredを確認します。つまり、デプロイ時にMavenの依存関係が実際にクラスパスに含まれていることを確認します。

このチュートリアルでは、「XMLスキーマ名前空間のSpring NamespaceHandlerを見つけられない」問題の通常の容疑者について説明し、発生するたびに解決策を提供しました。