Spring NamespaceHandler für XML-Schema-Namespace kann nicht gefunden werden

Sicherheit Top

Ich habe gerade den neuen Learn Spring Security-Kurs angekündigt, einschließlich des vollständigen Materials zum neuen OAuth2-Stack in Spring Security 5:

>> Überprüfen Sie den Kurs

1. Das Problem

In diesem Artikel wird eines der häufigsten Konfigurationsprobleme in Spring erläutert. Ein Namespace-Handler für einen der Spring-Namespaces wurde nicht gefunden . Meistens bedeutet dies, dass ein bestimmtes Spring-Glas im Klassenpfad fehlt. Lassen Sie uns also untersuchen, wie diese fehlenden Schemata aussehen könnten und welche Abhängigkeit für jedes Schema fehlt.

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

Der nicht verfügbare Sicherheits-Namespace ist in der Praxis das mit Abstand am häufigsten auftretende Problem:

Was zu folgender Ausnahme führt:

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

Die Lösung ist unkompliziert: Die Abhängigkeit von spring-security-config fehlt im Klassenpfad des Projekts:

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

Dadurch wird der richtige Namespace-Handler - in diesem Fall SecurityNamespaceHandler - in den Klassenpfad eingefügt und die Elemente im Sicherheits- Namespace werden analysiert .

Die vollständige Maven-Konfiguration für ein vollständiges Spring Security-Setup finden Sie in meinem vorherigen Maven-Tutorial.

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

Das gleiche Problem tritt auf, wenn der aop- Namespace verwendet wird, ohne dass die erforderliche aop spring-Bibliothek im Klassenpfad vorhanden ist:

Die genaue Ausnahme:

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

Die Lösung ist ähnlich - das Spring-Aop- Glas muss dem Klassenpfad des Projekts hinzugefügt werden:

 org.springframework spring-aop 4.1.0.RELEASE 

In diesem Fall ist der AopNamespaceHandler nach dem Hinzufügen der neuen Abhängigkeit im Klassenpfad vorhanden.

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

Verwenden des Transaktionsnamespace - ein kleiner, aber sehr nützlicher Namespace für die Konfiguration der Transaktionssemantik:

führt auch zu einer Ausnahme, wenn sich das richtige Glas nicht im Klassenpfad befindet:

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

Die fehlende Abhängigkeit hier ist spring-tx :

 org.springframework spring-tx 4.1.0.RELEASE 

Jetzt ist der richtige NamspaceHandler - nämlich TxNamespaceHandler - im Klassenpfad vorhanden, der die deklarative Transaktionsverwaltung sowohl mit XML als auch mit Anmerkungen ermöglicht.

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

Beweglich vorwärts auf dem mvc Namespace :

Die fehlende Abhängigkeit führt zu folgender Ausnahme:

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

In diesem Fall ist die fehlende Abhängigkeit spring-mvc :

 org.springframework spring-webmvc 4.1.0.RELEASE 

Wenn Sie dies zur Datei pom.xml hinzufügen, wird der MvcNamespaceHandler zum Klassenpfad hinzugefügt , sodass das Projekt die MVC-Semantik mithilfe des Namespace konfigurieren kann.

6. Fazit

Wenn Sie Eclipse zum Verwalten des Webservers und zum Bereitstellen verwenden, stellen Sie sicher, dass der Abschnitt Deployment Assembly des Projekts korrekt konfiguriert ist, dh dass die Maven-Abhängigkeiten zum Zeitpunkt der Bereitstellung tatsächlich im Klassenpfad enthalten sind.

In diesem Lernprogramm wurden die üblichen Verdächtigen für das Problem "Spring NamespaceHandler für XML-Schemanamensraum kann nicht gefunden werden" erläutert und Lösungen für jedes Vorkommen bereitgestellt.

Sicherheit unten

Ich habe gerade den neuen Learn Spring Security-Kurs angekündigt, einschließlich des vollständigen Materials zum neuen OAuth2-Stack in Spring Security 5:

>> Überprüfen Sie den Kurs