Impossible de localiser Spring NamespaceHandler pour XML Schema Namespace

Impossible de localiser Spring NamespaceHandler pour XML Schema Namespace

1. Le problème

Cet article traite de l'un des problèmes de configuration les plus courants dans Spring -a namespace handler for one of the Spring namespaces is not found. La plupart du temps, cela signifie qu'un fichier Spring particulier est manquant dans le chemin de classe - alors passons en revue ce que ces schémas manquants pourraient être et quelle est la dépendance manquante pour chacun.

Lectures complémentaires:

Injection XML au printemps

Apprenez à effectuer une injection basée sur XML avec Spring.

Read more

web.xml vs Initializer with Spring

Un guide rapide et pratique sur la configuration XML et Java dans Spring.

Read more

Questions d'entretiens chez Top Spring Framework

Une brève discussion sur les questions courantes concernant le cadre de travail qui pourraient être soulevées lors d’un entretien d’emploi.

Read more

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

L'indisponibilité dessecurity namespace est de loin le problème le plus rencontré en pratique:




Ce qui conduit à l'exception suivante:

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]

La solution est simple - la dépendancespring-security-config est absente du chemin de classe du projet:


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

Cela placera le gestionnaire d'espace de noms correct - dans ce casSecurityNamespaceHandler - sur le chemin de classe et prêt à analyser les éléments dans l'espace de nomssecurity.

La configuration complète de Maven pour une configuration complète de Spring Security peut être trouvée dans mesMaven tutorial précédents.

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

Le même problème se produit lors de l'utilisation dethe aop namespace sans avoir la bibliothèque aop spring nécessaire sur le chemin de classe:



L'exception exacte:

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]

La solution est similaire - le fichier jarspring-aop doit être ajouté au chemin de classe du projet:


   org.springframework
   spring-aop
   4.1.0.RELEASE

Dans ce cas, lesAopNamespaceHandler seront présents sur le chemin de classe après l'ajout de la nouvelle dépendance.

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

Utilisation dethe transaction namespace - un espace de noms petit mais très utile pour la configuration de la sémantique transactionnelle:



donnera également lieu à une exception si le fichier JAR de droite n'est pas sur le chemin de classe:

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]

La dépendance manquante ici estspring-tx:


    org.springframework
    spring-tx
    4.1.0.RELEASE

Maintenant, le bonNamspaceHandler - à savoirTxNamespaceHandler - sera présent sur le chemin de classe permettant la gestion déclarative des transactions avec XML et annotations.

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

Avance versthe mvc namespace:



La dépendance manquante conduira à l'exception suivante:

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]

Dans ce cas, la dépendance manquante estspring-mvc:


    org.springframework
    spring-webmvc
    4.1.0.RELEASE

L'ajout de ceci auxpom.xml ajoutera lesMvcNamespaceHandler au chemin de classe - permettant au projet de configurer la sémantique MVC en utilisant l'espace de noms.

6. Conclusion

Enfin, si vous utilisez Eclipse pour gérer le serveur Web et le déployer, assurez-vous quethe Deployment Assembly section of the project is correctly configured - à savoir que les dépendances Maven sont réellement incluses dans le chemin de classe au moment du déploiement.

Ce didacticiel aborde les problèmes habituels du problème «Impossible de localiser Spring NamespaceHandler for XML Schema Namespace» et propose des solutions pour chaque occurrence.