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

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

1. Das Problem

In diesem Artikel wird eines der häufigsten Konfigurationsprobleme in Spring -a namespace handler for one of the Spring namespaces is not found erläutert. 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.

Weitere Lektüre:

XML-basierte Injektion im Frühjahr

Erfahren Sie, wie Sie mit Spring eine XML-basierte Injektion durchführen.

Read more

web.xml vs Initializer with Spring

Eine schnelle und praktische Anleitung zur XML- und Java-Konfiguration im Frühjahr.

Read more

Fragen im Vorstellungsgespräch bei Top Spring Framework

Eine kurze Diskussion über häufig gestellte Fragen zum Spring Framework, die während eines Vorstellungsgesprächs auftreten können.

Read more

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

Diesecurity namespace, die nicht verfügbar sind, sind bei weitem das am häufigsten auftretende Problem in der Praxis:




Was zu folgender Ausnahme führt:

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]

Die Lösung ist einfach: Die Abhängigkeit vonspring-security-configfehlt im Klassenpfad des Projekts:


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

Dadurch wird der richtige Namespace-Handler - in diesem FallSecurityNamespaceHandler - in den Klassenpfad eingefügt und die Elemente im Namespacesecuritywerden analysiert.

Die vollständige Maven-Konfiguration für ein vollständiges Spring Security-Setup finden Sie in meinen vorherigenMaven tutorial.

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

Das gleiche Problem tritt auf, wennthe 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
[http://www.springframework.org/schema/aop]
Offending resource: ServletContext resource [/WEB-INF/webConfig.xml]

Die Lösung ist ähnlich - dasspring-aop-Jar muss dem Klassenpfad des Projekts hinzugefügt werden:


   org.springframework
   spring-aop
   4.1.0.RELEASE

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

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

Verwenden vonthe transaction namespace - 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
[http://www.springframework.org/schema/tx]
Offending resource: class path resource [daoConfig.xml]

Die fehlende Abhängigkeit ist hierspring-tx:


    org.springframework
    spring-tx
    4.1.0.RELEASE

Jetzt ist das richtigeNamspaceHandler - nämlichTxNamespaceHandler - im Klassenpfad vorhanden, was die deklarative Transaktionsverwaltung sowohl mit XML als auch mit Anmerkungen ermöglicht.

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

Weiter zuthe 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
[http://www.springframework.org/schema/mvc]
Offending resource: class path resource [webConfig.xml]

In diesem Fall beträgt die fehlende Abhängigkeitspring-mvc:


    org.springframework
    spring-webmvc
    4.1.0.RELEASE

Wenn Sie dies zupom.xml hinzufügen, werden dieMvcNamespaceHandler zum Klassenpfad hinzugefügt, sodass das Projekt die MVC-Semantik mithilfe des Namespace konfigurieren kann.

6. Fazit

Wenn Sie Eclipse zum Verwalten und Bereitstellen des Webservers verwenden, stellen Sie sicher, dassthe Deployment Assembly section of the project is correctly configured - nämlich, dass die Maven-Abhängigkeiten zur Bereitstellungszeit tatsächlich im Klassenpfad enthalten sind.

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