Não é possível localizar o espaço para nome Spring NamespaceHandler for XML Schema
1. O problema
Este artigo discutirá um dos problemas de configuração mais comuns no Spring -a namespace handler for one of the Spring namespaces is not found. Na maioria das vezes, isso significa que um jar do Spring em particular está faltando no caminho de classe - então, vamos ver o que esses esquemas ausentes podem ser e qual é a dependência ausente para cada um.
Leitura adicional:
Injeção baseada em XML na primavera
Aprenda a executar uma injeção baseada em XML com o Spring.
web.xml vs Initializer with Spring
Um guia rápido e prático para a configuração XML e Java no Spring.
Principais perguntas da entrevista do Spring Framework
Uma rápida discussão de perguntas comuns sobre o Spring Framework que podem surgir durante uma entrevista de emprego.
2. http://www.springframework.org/schema/security
Osecurity namespace não estar disponível é de longe o problema mais amplamente encontrado na prática:
O que leva à seguinte exceção:
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]
A solução é direta - a dependênciaspring-security-config está faltando no caminho de classe do projeto:
org.springframework.security
spring-security-config
3.2.5.RELEASE
Isso colocará o manipulador de namespace correto - neste casoSecurityNamespaceHandler - no caminho de classe e pronto para analisar os elementos no namespacesecurity.
A configuração completa do Maven para uma configuração completa do Spring Security pode ser encontrada em meuMaven tutorial anterior.
3. http://www.springframework.org/schema/aop
O mesmo problema ocorre ao usarthe aop namespace sem ter a biblioteca aop spring necessária no caminho de classe:
A exceção exata:
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]
A solução é semelhante - o jarspring-aop precisa ser adicionado ao classpath do projeto:
org.springframework
spring-aop
4.1.0.RELEASE
Nesse caso,AopNamespaceHandler estará presente no classpath após adicionar a nova dependência.
4. http://www.springframework.org/schema/tx
Usandothe transaction namespace - um namespace pequeno, mas muito útil para a configuração da semântica transacional:
também resultará em uma exceção se o jar correto não estiver no caminho de classe:
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]
A dependência ausente aqui éspring-tx:
org.springframework
spring-tx
4.1.0.RELEASE
Agora, oNamspaceHandler certo - a saberTxNamespaceHandler - estará presente no caminho de classe, permitindo o gerenciamento de transação declarativa com XML e anotações.
5. http://www.springframework.org/schema/mvc
Avançando parathe mvc namespace:
A dependência ausente levará à seguinte exceção:
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]
Nesse caso, a dependência ausente éspring-mvc:
org.springframework
spring-webmvc
4.1.0.RELEASE
Adicionar isso apom.xml adicionaráMvcNamespaceHandler ao classpath - permitindo que o projeto configure a semântica MVC usando o namespace.
6. Conclusão
Finalmente, se você estiver usando o Eclipse para gerenciar o servidor web e implantar - certifique-se de quethe Deployment Assembly section of the project is correctly configured - ou seja, que as dependências Maven realmente estão incluídas no caminho de classe no momento da implantação
Este tutorial discutiu os suspeitos comuns do problema "Não foi possível localizar o Spring NamespaceHandler para o namespace do esquema XML" e forneceu soluções para cada ocorrência.