Não é possível localizar o espaço para nome Spring NamespaceHandler for XML Schema

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.

Read more

web.xml vs Initializer with Spring

Um guia rápido e prático para a configuração XML e Java no Spring.

Read more

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.

Read more

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.