Beim Versuch meines ersten Frühjahrsprojekts werden folgende Fehler angezeigt:
Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'context:component-scan
Hier ist das applicationContext.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<context:component-scan base-package="com.xyz" />
</beans>
Was verursacht den Fehler?
Dieser Pfad des Schema-Speicherorts ist falsch:
http://www.springframework.org/schema/beans
Der richtige Pfad sollte enden mit
/
:http://www.springframework.org/schema/beans/
quelle
Ich hatte Probleme mit
Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'security:http'
und für mich musste ich das spring-security-config jar zum klassenpfad hinzufügen
http://docs.spring.io/spring-security/site/docs/3.1.x/reference/ns-config.html
BEARBEITEN:
Es kann sein, dass Sie die richtige Abhängigkeit in Ihrem Pom haben.
Aber...
Wenn Sie mehrere Federabhängigkeiten verwenden und zu einem einzigen Glas zusammenfügen, wird die
META-INF/spring.schemas
wahrscheinlich vonspring.schemas
einer anderen Ihrer Frühlingsabhängigkeiten überschrieben .(Extrahieren Sie diese Datei aus Ihrem zusammengestellten Glas und Sie werden verstehen)
Frühlingsschemata sind nur ein paar Zeilen, die so aussehen:
http\://www.springframework.org/schema/p=org.springframework.beans.factory.xml.SimplePropertyNamespaceHandler http\://www.springframework.org/schema/beans/spring-beans-3.0.xsd=org/springframework/beans/factory/xml/spring-beans-3.0.xsd
Wenn jedoch eine andere Abhängigkeit diese Datei überschreibt, wird die Definition von http abgerufen, und wenn Sie über eine Firewall / einen Proxy verfügen, kann diese nicht abgerufen werden.
Eine Lösung besteht darin, spring.schemas und spring.handlers in einer einzigen Datei anzuhängen.
Prüfen:
Idee zu vermeiden, dass spring.handlers / spring.schemas überschrieben werden, wenn mehrere Federabhängigkeiten in einem einzigen Glas zusammengeführt werden
quelle
spring-web
Abhängigkeit in der pomDieser Fehler kann auch verursacht werden, wenn die JAR-Datei, die die von Ihnen benötigte XSD enthält, nicht in Ihrem bereitgestellten Klassenpfad enthalten ist.
Stellen Sie sicher, dass die Abhängigkeiten in Ihrem Container verfügbar sind.
quelle
Wenn Sie STS verwenden , können Sie in Eclipse die Konfigurationsdatei als "Bean Configuration" -Datei markieren (Sie können dies beim Erstellen oder Klicken mit der rechten Maustaste auf eine XML-Datei angeben):
Ihr Projekt muss Spring Nature haben (klicken Sie zum Beispiel mit der rechten Maustaste auf das Maven-Projekt):
wird dann
spring.xml
standardmäßig mit dem Spring Config Editor geöffnetund dieser Editor hat die Registerkarte Namespaces
Damit können Sie die Namespaces angeben:
Bitte beachten Sie, dass dies von Abhängigkeiten abhängt (mithilfe des Maven-Projekts). Wenn dies
spring-tx
also nicht in der pom.xml von maven definiert ist, ist die Option nicht vorhanden, wodurch dies verhindert wird. Der passende Platzhalter ist streng, es kann jedoch keine Deklaration für das Element gefunden werden 'tx: annotationsgesteuerter' 'Kontext: Komponenten-Scan' Problem ...quelle
Es ist zu spät, kann aber für andere nützlich sein
Dies bedeutet, dass Sie einige Deklarationen verpasst haben oder die erforderlichen Deklarationen nicht in Ihrem XML gefunden wurden
In meinem Fall habe ich vergessen, das Folgende hinzuzufügen
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
Nach dem Hinzufügen ist das Problem verschwunden
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
quelle
Wenn Sie Kontext hinzufügen: Komponenten-Scan zum ersten Mal in einer XML-Datei, muss Folgendes hinzugefügt werden.
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
quelle
Der richtige Pfad sollte nicht mit "/" enden, ich hatte einen Fehler, der den Fehler verursacht hat
Richtiger Weg:
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
quelle
Mit der Namespace-Deklaration und dem Schema-Speicherort können Sie auch die Syntax des verwendeten Namespace überprüfen, zum Beispiel: -
<beans xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation= http://www.springframework.org/`enter code here`schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-driven/> <!-- This is wrong --> <context:annotation-config/> <!-- This should work -->
quelle
Fügen Sie den XML-Kontext mit http hinzu, wie unten gezeigt
xmlns:context="http://www.springframework.org/schema/context"
quelle
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
Die obigen Links müssen enthalten sein
<context:property-placeholder location="classpath:sport.properties" /> <bean id="myFortune" class="com.kiran.springdemo.HappyFortuneService"></bean> <bean id="myCoach" class="com.kiran.springdemo.setterinjection.MyCricketCoach"> <property name="fortuner" ref="myFortune" /> <property name="emailAddress" value="${ipl.email}" /> <property name="team" value="${ipl.team}" /> </bean> </beans>
quelle
Fügen Sie diese beiden Schema-Speicherorte hinzu. Das ist genug und effizient, anstatt alle unnötigen Schemata hinzuzufügen
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
quelle
In verschiedenen Spring-Gläsern befinden sich 'META-INF / spring.schemas'-Dateien, die die Zuordnungen für die URLs enthalten, die für die lokale Auflösung abgefangen werden. Wenn eine bestimmte xsd-URL in diesen Dateien nicht aufgeführt ist (z. B. nach dem Wechsel von http zu https), versucht Spring, Schemas aus dem Internet zu laden. Wenn das System keine Internetverbindung hat, schlägt dies fehl und verursacht diesen Fehler.
Dies kann bei Spring Security v5.2 und höher der Fall sein, wenn für die xsd-Datei keine http-Zuordnung vorhanden ist.
Um das Problem zu beheben, ändern Sie es
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd"
zu
xsi:schemaLocation=" http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security https://www.springframework.org/schema/security/spring-security.xsd"
Beachten Sie, dass nur die tatsächliche xsd-URL von http in https geändert wurde (nur zwei Stellen oben).
quelle
Ändern Sie http in http s des markierten Fehlers oder die gesamte URL, die mit der Erweiterung * .xsd endet.
quelle