2012-11-27 7 views
50

otrzymuję następujące błędy podczas próby mojego pierwszego projektu wiosny:Dopasowanie wieloznaczny jest surowe, ale deklaracja nie można znaleźć dla elementu „kontekstu: Komponent-scan

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 

Oto 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> 

Co powoduje błąd?

Odpowiedz

114

Nie podano lokalizację schematu przestrzeni nazw kontekstowego, to jest powód, dla tego konkretnego błędu:

<beans ..... 
    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 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd"> 
+1

Mój problem polegał na tym, że podałem błędną lokalizację schematu.Lepiej sprawdź to, lub skopiuj/wklej tutaj. – vadipp

+0

Błąd wystąpił TYLKO podczas umieszczania istniejącego "xmlns: context" tuż przed specyfikacją "xsi: schemaLocation". Dzięki za sugestię. – tjm1706

3

miałem problemy z

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' 

i dla mnie musiałem dodać słoik wiosna-security-config do ścieżki klasy

http://docs.spring.io/spring-security/site/docs/3.1.x/reference/ns-config.html

EDYTOWANIE:

Możliwe, że masz prawidłową zależność w pom.

Ale ...

Jeśli używasz wielu zależności wiosenne i montażem w jednym słoiku wówczas META-INF/spring.schemas są prawdopodobnie nadpisane przez spring.schemas innego zależności od swoich wiosennych.

(Extract, że plik z zamontowanym słoik i zrozumiesz)

Wiosna schematów jest tylko kilka linii, które wyglądają tak:

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 

Ale jeśli inna zależność nadpisuje ten plik, wtedy definicja zostanie pobrana z http, a jeśli masz zaporę ogniową/serwer proxy, nie uda się jej uzyskać.

Jednym z rozwiązań jest dołączenie spring.schemas i spring.handlers do jednego pliku.

Sprawdź:

Idea to avoid that spring.handlers/spring.schemas get overwritten when merging multiple spring dependencies in a single jar

+0

Ten rodzaj pomógł mi zidentyfikować problem, z którym miałem do czynienia. Brakowało mi dodawania zależności 'spring-web' w pom –

+0

Upewnij się również, że jeśli określisz konkretną wersję Spring schematu w nagłówku xsi: schemaLocation, który pasuje do wersji tego schematu, wymienionych w spring.schemas plik i dołączone do tego słoika Spring. –

+0

Miałem dokładnie ten sam problem związany z bezpieczeństwem http. Główną przyczyną był brak słoika ze sprężyną bezpieczeństwa. dodanie tego słoika jako zależności zależnej od czasu kompilacji rozwiązało problem. – nirmalsingh

3

Ten błąd może być również spowodowany jeśli plik jar, który zawiera XSD można wymagać nie jest wliczone w wdrożonej ścieżce klasy.

Upewnij się, że zależności są dostępne w twoim kontenerze.

+0

Mam problem związany z bezpieczeństwem http wyjaśniony powyżej w odpowiedzi David. Główną przyczyną był brak słoika ze sprężyną bezpieczeństwa. dodanie tego słoika jako zależności zależnej od czasu kompilacji rozwiązało problem. – nirmalsingh

2

przypadku korzystania STS można w Eclipse zaznaczyć plik konfiguracyjny jako „Bean Configuration” pliku (można określić, że podczas tworzenia lub kliknięcia prawym przyciskiem myszy na plik XML):

Spring Tools > Add as Bean Configuration

projekt, musi mieć charakter wiosny (prawy przycisk myszy na projekcie maven przykładowo):

Spring Tools > Add Spring Project Nature

następnie spring.xml jest otwierany domyślnie z wiosennym Config Edi Tor

Open With > Spring Config Editor

a ten edytor ma Tab Przestrzenie nazw

Spring Config Editor - Namespaces tab

który umożliwia określenie nazw:

Spring Config Editor - Namespaces example

Należy pamiętać, że to zależy od zależności (przy użyciu projektu maven), więc jeśli spring-tx nie jest zdefiniowane w pom.xml Maven, w opcji nie ma, co zapobiega, aby mieć The matching wildcard is strict, but no declaration can be found for element 'tx:annotation-driven' 'context:component-scan' problem ...

5

Ta ścieżka lokalizacji schematu jest źle:

http://www.springframework.org/schema/beans 

Prawidłowa ścieżka powinna zakończyć z /:

http://www.springframework.org/schema/beans/ 
+0

Nie jestem pewien, czy to prawda. – rslj

1

jest zbyt późno, ale nieco maja przydatne dla innych

The matching wildcard is strict, but no declaration can be found for element 'context:component-scan

co oznacza, że ​​nie Niewykorzystany pewne deklaracje lub wymaganego oświadczenia Nie znaleziono w Twojej XML

W moim przypadku zapomniałem dodać follwoing

Po Dodanie ten problem zniknął

<?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"> 
1

podczas dodawania kontekstu: component-skan po raz pierwszy w xml, następujące należy dodać .

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"> 
Powiązane problemy