Kan Spring NamespaceHandler voor XML Schema Namespace niet vinden
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 CURSUS1. 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