Kan ikke finne Spring NamespaceHandler for XML Schema Namespace
Jeg kunngjorde nettopp det nye Learn Spring Security-kurset, inkludert hele materialet med fokus på den nye OAuth2-stakken i Spring Security 5:
>> KONTROLLER KURSET1. Problemet
Denne artikkelen vil diskutere et av de vanligste konfigurasjonsproblemene våren - en navneområdebehandler for et av vårens navneområder ble ikke funnet. Det meste av tiden betyr dette at en bestemt Spring jar mangler fra klassestien - så la oss gå gjennom hva disse manglende skjemaene kan være, og hva den manglende avhengigheten er for hver enkelt.
2. //www.springframework.org/schema/security
Sikkerhetsnavnet som ikke er tilgjengelig, er uten tvil det mest problematiske problemet i praksis:
Som fører til følgende unntak:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Konfigurasjonsproblem: Kan ikke finne Spring NamespaceHandler for navneområde for XML-skjema [//www.springframework.org/schema/security] Krenkende ressurs: klassebane ressurs [securityConfig.xml]
Løsningen er grei - den vår-sikkerhet-config avhengighet mangler fra klassestien til prosjektet:
org.springframework.security spring-security-config 3.2.5.RELEASE
Dette vil sette den riktige navneområdebehandleren - i dette tilfellet SecurityNamespaceHandler - på klassestien og klar til å analysere elementene i sikkerhet navneområdet.
Den komplette Maven-konfigurasjonen for et fullstendig Spring Security-oppsett finner du i min forrige Maven-opplæring.
3. //www.springframework.org/schema/aop
Det samme problemet oppstår når du bruker de aop navneområdet uten å ha det nødvendige aop-vårbiblioteket på klassestien:
Det eksakte unntaket:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Konfigurasjonsproblem: Kan ikke finne Spring NamespaceHandler for XML-skjemaens navneområde [//www.springframework.org/schema/aop] Krenkende ressurs: ServletContext resource [/ WEB-INF / webConfig. xml]
Løsningen er lik - den vår-aop jar må legges til klassestien til prosjektet:
org.springframework spring-aop 4.1.0.RELEASE
I dette tilfellet AopNamespaceHandler vil være til stede på klassestien etter å ha lagt til den nye avhengigheten.
4. //www.springframework.org/schema/tx
Ved hjelp av transaksjonsnavnet - et lite, men veldig nyttig navneområde for konfigurasjonen av transaksjonell semantikk:
vil også resultere i et unntak hvis den rette krukken ikke er på klassestien:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Konfigurasjonsproblem: Kan ikke finne Spring NamespaceHandler for XML-skjemaets navneområde [//www.springframework.org/schema/tx] Krenkende ressurs: ressurs for klassesti [daoConfig.xml]
Den manglende avhengigheten her er vår-tx:
org.springframework spring-tx 4.1.0.RELEASE
Nå, høyre NamspaceHandler - nemlig TxNamespaceHandler - vil være til stede på klassestien som tillater den deklarative transaksjonsadministrasjonen med både XML og merknader.
5. //www.springframework.org/schema/mvc
Går videre til de mvc navneområdet:
Den manglende avhengigheten vil føre til følgende unntak:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Konfigurasjonsproblem: Kan ikke finne Spring NamespaceHandler for XML-skjemaens navneområde [//www.springframework.org/schema/mvc] Krenkende ressurs: klassebane ressurs [webConfig.xml]
I dette tilfellet er den manglende avhengigheten vår-mvc:
org.springframework spring-webmvc 4.1.0.RELEASE
Legge dette til pom.xml vil legge til MvcNamespaceHandler til klassestien - slik at prosjektet kan konfigurere MVC-semantikk ved hjelp av navneområdet.
6. Konklusjon
Til slutt, hvis du bruker Eclipse til å administrere webserveren og distribuere - sørg for at delen for distribusjonsmontering i prosjektet er riktig konfigurert - nemlig at Maven-avhengighetene faktisk er inkludert på klassestien ved distribusjonstidspunktet.
Denne opplæringen diskuterte de vanlige mistenkte for problemet "Ikke mulig å finne Spring NamespaceHandler for XML-skjemanavn" og ga løsninger for hver forekomst.
Sikkerhetsbunn