No se puede localizar Spring NamespaceHandler para el espacio de nombres de esquema XML

Top de seguridad

Acabo de anunciar el nuevo curso Learn Spring Security, que incluye el material completo centrado en la nueva pila OAuth2 en Spring Security 5:

>> VER EL CURSO

1. El problema

Este artículo discutirá uno de los problemas de configuración más comunes en Spring: no se encuentra un controlador de espacio de nombres para uno de los espacios de nombres de Spring . La mayoría de las veces, esto significa que falta un jar de Spring en particular en la ruta de clases, así que repasemos cuáles podrían ser estos esquemas faltantes y cuál es la dependencia que falta para cada uno.

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

El espacio de nombres de seguridad que no está disponible es, con mucho, el problema más común en la práctica:

Lo que conduce a la siguiente excepción:

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 solución es sencilla: falta la dependencia spring-security-config en la ruta de clases del proyecto:

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

Esto colocará el controlador de espacio de nombres correcto, en este caso SecurityNamespaceHandler , en la ruta de clase y estará listo para analizar los elementos en el espacio de nombres de seguridad .

La configuración completa de Maven para una configuración completa de Spring Security se puede encontrar en mi tutorial anterior de Maven.

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

El mismo problema ocurre cuando se usa el espacio de nombres aop sin tener la biblioteca aop spring necesaria en el classpath:

La excepción exacta:

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 solución es similar: el jar spring-aop debe agregarse a la ruta de clases del proyecto:

 org.springframework spring-aop 4.1.0.RELEASE 

En este caso, el AopNamespaceHandler estará presente en el classpath después de agregar la nueva dependencia.

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

Usando el espacio de nombres de transacciones : un espacio de nombres pequeño pero muy útil para la configuración de la semántica transaccional:

también dará como resultado una excepción si el jar correcto no está en la ruta de clase:

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 dependencia que falta aquí es spring-tx :

 org.springframework spring-tx 4.1.0.RELEASE 

Ahora, el NamspaceHandler correcto , a saber, TxNamespaceHandler , estará presente en la ruta de clase , lo que permitirá la gestión de transacciones declarativas con XML y anotaciones.

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

Avanzando hacia el espacio de nombres mvc :

La dependencia faltante dará lugar a la siguiente excepción:

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]

En este caso, la dependencia que falta es spring-mvc :

 org.springframework spring-webmvc 4.1.0.RELEASE 

Al agregar esto a pom.xml, se agregará MvcNamespaceHandler a la ruta de clase, lo que permitirá que el proyecto configure la semántica de MVC utilizando el espacio de nombres.

6. Conclusión

Finalmente, si está utilizando Eclipse para administrar el servidor web y la implementación, asegúrese de que la sección Ensamblaje de implementación del proyecto esté configurada correctamente, es decir, que las dependencias de Maven estén incluidas en la ruta de clase en el momento de la implementación.

Este tutorial analizó los sospechosos habituales del problema “No se puede localizar Spring NamespaceHandler para el espacio de nombres del esquema XML” y proporcionó soluciones para cada caso.

Fondo de seguridad

Acabo de anunciar el nuevo curso Learn Spring Security, que incluye el material completo centrado en la nueva pila OAuth2 en Spring Security 5:

>> VER EL CURSO