web-dev-qa-db-fra.com

Le caractère générique correspondant est strict, mais aucune déclaration ne peut être trouvée pour l'élément 'context: composant-scan

Je reçois les erreurs suivantes en essayant mon premier projet de printemps:

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

Voici le 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>

Quelle est la cause de l'erreur?

58
user93796

Vous n'avez pas spécifié l'emplacement du schéma de l'espace de noms de contexte, c'est la raison de cette erreur spécifique:

<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">
127
Biju Kunjummen

Ce chemin de l'emplacement du schéma est incorrect:

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

Le chemin correct doit se terminer par /:

http://www.springframework.org/schema/beans/
7
Sahil Bhalla

J'avais des problèmes avec 

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'

et pour moi je devais ajouter le pot Spring-security-config au classpath

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

MODIFIER:

Il se peut que vous ayez la bonne dépendance dans votre pom.

Mais...

Si vous utilisez plusieurs dépendances de ressort et que vous les assemblez dans un seul fichier jar, le META-INF/spring.schemas est probablement remplacé par le spring.schemas d'un autre de vos dépendances de ressort.

(Extrait ce fichier de votre pot assemblé et vous comprendrez)

Les schémas de printemps sont juste un tas de lignes qui ressemblent à ceci:

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

Mais si une autre dépendance écrase ce fichier, la définition sera extraite de http et si vous avez un pare-feu/proxy, il ne pourra pas l'obtenir.

Une solution consiste à ajouter spring.schemas et spring.handlers dans un fichier unique.

Vérifier:

Idée pour éviter que spring.handlers/spring.schemas soient écrasés lors de la fusion de plusieurs dépendances de ressort dans un même pot

5
David Rz Ayala

Cette erreur peut également être provoquée si le fichier JAR contenant le fichier XSD requis n'est pas inclus dans votre chemin de classe déployé.

Assurez-vous que les dépendances sont disponibles dans votre conteneur.

3
sweetfa

Si vous utilisez STS , vous pouvez marquer Eclipse le fichier de configuration en tant que fichier "Configuration de bean" (vous pouvez spécifier cela lors de la création ou en effectuant un clic droit sur un fichier XML):

 Spring Tools > Add as Bean Configuration

Votre projet doit avoir Spring Nature (clic droit sur le projet maven par exemple):

 Spring Tools > Add Spring Project Nature

alors spring.xml est ouvert par défaut avec Spring Config Editor

 Open With > Spring Config Editor

et cet éditeur a un onglet Namespaces

 Spring Config Editor - Namespaces tab

Ce qui vous permet de spécifier les espaces de noms:

 Spring Config Editor - Namespaces example

Sachez que cela dépend des dépendances (avec le projet maven), donc si spring-tx n'est pas défini dans le fichier pom.xml de maven, l'option n'existe pas, ce qui vous empêche d'avoir Le caractère générique correspondant est strict, mais aucune déclaration ne peut l'être trouvé pour l'élément 'tx: indexé' 'contexte: composant-scan' problem ...

2
Betlista

lorsque vous ajoutez un contexte: composant-scan pour la première fois dans un fichier XML, vous devez ajouter les éléments suivants.

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

C'est trop tard mais peut être utile pour d'autres

Le caractère générique correspondant est strict, mais aucune déclaration ne peut être trouvée pour élément 'contexte: composant-scan

ce qui signifie que vous avez omis des déclarations ou les déclarations requises non trouvées dans votre fichier XML

Dans mon cas j'ai oublié d'ajouter le suivant

Après avoir ajouté cela, le problème a disparu

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

Avec la déclaration d'espace de nom et l'emplacement du schéma, vous pouvez également vérifier la syntaxe de l'utilisation de l'espace de nom, par exemple: -

<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 -->
0
Amit

Ajouter un contexte XML avec http comme indiqué ci-dessous

xmlns:context="http://www.springframework.org/schema/context"

0
Manjunatha B

Ajoutez ces deux emplacements de schéma. C'est suffisant et efficace au lieu d'ajouter tout le schéma inutile

 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context.xsd
0
Sunrays

Le chemin correct ne doit pas se terminer par "/", je me suis trompé et a causé le problème

La bonne façon:

http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd

0
techguy
<?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">

Les liens ci-dessus doivent être inclus

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