Не може да се намери Spring SpaceHandler за пространство на имена на XML схема

Защита отгоре

Току-що обявих новия курс Learn Spring Security, включително пълния материал, фокусиран върху новия стек OAuth2 в Spring Security 5:

>> ПРЕГЛЕД НА КУРСА

1. Проблемът

Тази статия ще обсъди един от най-често срещаните проблеми с конфигурацията през Spring - манипулатор на пространство от имена за едно от пространствата на имена Spring не е намерен . През повечето време това означава, че един конкретен пролетен буркан липсва в пътя на класа - така че нека да разгледаме какви могат да бъдат тези липсващи схеми и каква е липсващата зависимост за всяка една.

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

Недостъпността на пространството от имена на сигурността е най-често срещаният проблем на практика:

Което води до следното изключение:

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]

Решението е просто - зависимостта spring-security-config липсва в пътя на класа на проекта:

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

Това ще постави правилния манипулатор на пространството от имена - в този случай SecurityNamespaceHandler - на пътя на класа и готов да анализира елементите в пространството от имена на защитата .

Пълната конфигурация на Maven за пълна настройка на Spring Security може да се намери в предишния ми урок на Maven.

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

Същият проблем възниква при използване на пространството от имена aop, без да има необходимата пролетна библиотека aop на пътя на класа:

Точното изключение:

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]

Решението е подобно - бурканът spring-aop трябва да бъде добавен към пътя към класа на проекта:

 org.springframework spring-aop 4.1.0.RELEASE 

В този случай AopNamespaceHandler ще присъства в пътя на класа след добавяне на новата зависимост.

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

Използване на пространството от имена на транзакциите - малко, но много полезно пространство от имена за конфигуриране на транзакционната семантика:

също ще доведе до изключение, ако десният буркан не е в пътя на класа:

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]

Липсващата зависимост тук е spring-tx :

 org.springframework spring-tx 4.1.0.RELEASE 

Сега десният NamspaceHandler - а именно TxNamespaceHandler - ще присъства в пътя на класа, позволявайки декларативното управление на транзакции както с XML, така и с анотации.

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

Преминаване напред към пространството от имена на mvc :

Липсващата зависимост ще доведе до следното изключение:

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]

В този случай липсващата зависимост е spring-mvc :

 org.springframework spring-webmvc 4.1.0.RELEASE 

Добавянето на това към pom.xml ще добави MvcNamespaceHandler към пътя на класа - позволявайки на проекта да конфигурира MVC семантика, използвайки пространството от имена.

6. Заключение

И накрая, ако използвате Eclipse за управление на уеб сървъра и разгръщане - уверете се, че секцията Сглобяване на внедряване на проекта е правилно конфигурирана - а именно, че зависимостите на Maven всъщност са включени в пътя на класа по време на разполагане.

Този урок обсъжда обичайните заподозрени за проблема „Не може да се намери Spring NamespaceHandler за пространство на имена на XML схема“ и предоставя решения за всяко възникване.

Сигурност отдолу

Току-що обявих новия курс Learn Spring Security, включително пълния материал, фокусиран върху новия стек OAuth2 в Spring Security 5:

>> ПРЕГЛЕД НА КУРСА