Kan Spring NamespaceHandler voor XML Schema Namespace niet vinden

Beveiliging Top

Ik heb zojuist de nieuwe Learn Spring Security-cursus aangekondigd, inclusief het volledige materiaal gericht op de nieuwe OAuth2-stack in Spring Security 5:

>> BEKIJK DE CURSUS

1. Het probleem

In dit artikel wordt een van de meest voorkomende configuratieproblemen in het voorjaar besproken: een naamruimte-handler voor een van de Spring-naamruimten is niet gevonden. Meestal betekent dit dat een bepaalde Spring-jar ontbreekt in het klassenpad - dus laten we eens kijken wat deze ontbrekende schema's kunnen zijn en wat de ontbrekende afhankelijkheid voor elk is.

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

Het niet beschikbaar zijn van de beveiligingsnaamruimte is in de praktijk verreweg het meest voorkomende probleem:

Wat leidt tot de volgende uitzondering:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuratieprobleem: kan Spring NamespaceHandler niet vinden voor XML-schemanaamruimte [//www.springframework.org/schema/security] Bron: class path resource [securityConfig.xml]

De oplossing is eenvoudig: de spring-security-config afhankelijkheid ontbreekt in het klassenpad van het project:

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

Dit zal de juiste naamruimte-handler plaatsen - in dit geval SecurityNamespaceHandler - op het klassenpad en klaar om de elementen in het veiligheid naamruimte.

De volledige Maven-configuratie voor een volledige Spring Security-installatie is te vinden in mijn vorige Maven-zelfstudie.

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

Hetzelfde probleem doet zich voor bij gebruik de aop naamruimte zonder de nodige aop spring bibliotheek op het klassenpad te hebben:

De exacte uitzondering:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuratieprobleem: kan Spring NamespaceHandler niet vinden voor XML-schemanaamruimte [//www.springframework.org/schema/aop] Bron: ServletContext-bron [/ WEB-INF / webConfig. xml]

De oplossing is vergelijkbaar - de lente-uit jar moet worden toegevoegd aan het klassenpad van het project:

 org.springframework spring-aop 4.1.0.RELEASE 

In dit geval is het AopNamespaceHandler zal aanwezig zijn op het klassenpad na het toevoegen van de nieuwe afhankelijkheid.

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

Gebruik makend van de naamruimte van de transactie - een kleine maar zeer nuttige naamruimte voor de configuratie van de transactionele semantiek:

zal ook resulteren in een uitzondering als de juiste jar niet op het klassenpad staat:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuratieprobleem: kan Spring NamespaceHandler niet vinden voor XML-schema-naamruimte [//www.springframework.org/schema/tx] Bron van overtreding: bron van klassenpad [daoConfig.xml]

De ontbrekende afhankelijkheid hier is spring-tx:

 org.springframework spring-tx 4.1.0.RELEASE 

Nu, het goede NamspaceHandler - namelijk TxNamespaceHandler - zal aanwezig zijn op het klassenpad waardoor het declaratieve transactiebeheer met zowel XML als annotaties mogelijk is.

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

Vooruit naar de mvc naamruimte:

De ontbrekende afhankelijkheid leidt tot de volgende uitzondering:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuratieprobleem: kan Spring NamespaceHandler niet vinden voor XML-schemanaamruimte [//www.springframework.org/schema/mvc] Bron: class path resource [webConfig.xml]

In dit geval is de ontbrekende afhankelijkheid spring-mvc:

 org.springframework spring-webmvc 4.1.0.RELEASE 

Door dit toe te voegen aan het pom.xml zal de MvcNamespaceHandler to the classpath - waardoor het project MVC-semantiek kan configureren met behulp van de naamruimte.

6. Conclusie

Ten slotte, als u Eclipse gebruikt om de webserver te beheren en te implementeren, zorg er dan voor dat de Deployment Assembly-sectie van het project correct is geconfigureerd, namelijk dat de Maven-afhankelijkheden daadwerkelijk zijn opgenomen in het klassenpad tijdens de implementatie.

Deze tutorial besprak de gebruikelijke verdachten voor het probleem "Kan Spring NamespaceHandler niet vinden voor XML-schema-naamruimte" en gaf oplossingen voor elke gebeurtenis.

Beveiligingsbodem

Ik heb zojuist de nieuwe Learn Spring Security-cursus aangekondigd, inclusief het volledige materiaal gericht op de nieuwe OAuth2-stack in Spring Security 5:

>> BEKIJK DE CURSUS