Impossibile individuare Spring NamespaceHandler per lo spazio dei nomi XML Schema

Top di sicurezza

Ho appena annunciato il nuovo corso Learn Spring Security, incluso il materiale completo incentrato sul nuovo stack OAuth2 in Spring Security 5:

>> SCOPRI IL CORSO

1. Il problema

Questo articolo discuterà uno dei problemi di configurazione più comuni in Spring: non è stato trovato un gestore dello spazio dei nomi per uno degli spazi dei nomi di Spring . Il più delle volte, questo significa che un particolare vaso Spring manca dal classpath, quindi esaminiamo quali potrebbero essere questi schemi mancanti e qual è la dipendenza mancante per ciascuno di essi.

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

Lo spazio dei nomi di sicurezza non disponibile è di gran lunga il problema più ampiamente riscontrato nella pratica:

Il che porta alla seguente eccezione:

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]

La soluzione è semplice: la dipendenza spring-security-config manca dal classpath del progetto:

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

Questo metterà il gestore dello spazio dei nomi corretto, in questo caso SecurityNamespaceHandler , sul classpath e sarà pronto per analizzare gli elementi nello spazio dei nomi di sicurezza .

La configurazione completa di Maven per una configurazione completa di Spring Security può essere trovata nel mio precedente tutorial di Maven.

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

Lo stesso problema si verifica quando si utilizza lo spazio dei nomi aop senza avere la libreria aop spring necessaria sul classpath:

L'eccezione esatta:

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]

La soluzione è simile: il barattolo spring-aop deve essere aggiunto al classpath del progetto:

 org.springframework spring-aop 4.1.0.RELEASE 

In questo caso, AopNamespaceHandler sarà presente nel classpath dopo aver aggiunto la nuova dipendenza.

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

Utilizzo dello spazio dei nomi delle transazioni : uno spazio dei nomi piccolo ma molto utile per la configurazione della semantica transazionale:

risulterà anche in un'eccezione se il jar giusto non è sul classpath:

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]

La dipendenza mancante qui è spring-tx :

 org.springframework spring-tx 4.1.0.RELEASE 

Ora, il NamspaceHandler corretto , ovvero TxNamespaceHandler , sarà presente sul classpath consentendo la gestione dichiarativa delle transazioni con XML e annotazioni.

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

Spostare in avanti per il MVC spazio dei nomi :

La dipendenza mancante porterà alla seguente eccezione:

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 questo caso, la dipendenza mancante è spring-mvc :

 org.springframework spring-webmvc 4.1.0.RELEASE 

L'aggiunta di questo a pom.xml aggiungerà MvcNamespaceHandler al classpath, consentendo al progetto di configurare la semantica MVC utilizzando lo spazio dei nomi.

6. Conclusione

Infine, se stai utilizzando Eclipse per gestire il server web e distribuire, assicurati che la sezione Deployment Assembly del progetto sia configurata correttamente - vale a dire che le dipendenze Maven siano effettivamente incluse nel classpath al momento della distribuzione.

Questa esercitazione ha discusso i soliti sospetti per il problema "Impossibile individuare Spring NamespaceHandler per lo spazio dei nomi dello schema XML" e ha fornito soluzioni per ogni occorrenza.

Fondo di sicurezza

Ho appena annunciato il nuovo corso Learn Spring Security, incluso il materiale completo incentrato sul nuovo stack OAuth2 in Spring Security 5:

>> SCOPRI IL CORSO