Соответствующий подстановочный знак является строгим, но объявление не может быть найдено для контекста элемента: component-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

здесь 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>

что вызывает ошибку?

9 54

9 ответов:

вы не указали расположение схемы пространства имен контекста, что является причиной этой конкретной ошибки:

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

этот путь расположения схемы неверен:

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

правильный путь должен заканчиваться /:

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

у меня были проблемы с

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'

и для меня я должен был добавить spring-security-config jar в classpath

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

EDIT:

возможно, у вас есть правильная зависимость в вашем pom.

но...

если вы используете несколько пружинных зависимостей и собираете в одну банку, то META-INF/spring.schemas is вероятно, перезаписывается spring.schemas другой из ваших весенних зависимостей.

(извлеките этот файл из собранной банки, и вы поймете)

Spring schemas-это просто куча строк, которые выглядят так:

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

но если другая зависимость перезаписывает этот файл, то определение будет извлечено из http, и если у вас есть брандмауэр/прокси-сервер, он не сможет его получить.

одним из решений является добавление весны.схемы и весна.обработчики в один файл.

проверка:

идея, чтобы избежать этой весны.обработчики/весна.схемы перезаписываются при объединении нескольких зависимостей spring в одном jar

эта ошибка также может быть вызвана, если файл jar, содержащий требуемый XSD, не включен в путь к развернутому классу.

убедитесь, что зависимости доступны в контейнере.

при использовании STS, вы можете в Eclipse пометить файл конфигурации как файл" Bean Configuration " (вы можете указать это при создании или при щелчке правой кнопкой мыши на XML-файле):

Spring Tools > Add as Bean Configuration

ваш проект должен иметь весеннюю природу (например, щелкните правой кнопкой мыши на проекте maven):

Spring Tools > Add Spring Project Nature

затем spring.xml открывается по умолчанию с помощью Spring Config Редактор

Open With > Spring Config Editor

и этот редактор имеет вкладку пространства имен

Spring Config Editor - Namespaces tab

что позволяет указать пространства имен:

Spring Config Editor - Namespaces example

имейте в виду, что это зависит от зависимостей (с помощью проекта maven), так что если spring-tx Не определен в pom maven.xml, опция не существует, что мешает вам иметь соответствующий подстановочный знак является строгим, но нет декларация может быть найден для элемента 'Техас:аннотация-приводом' 'контексте:компонент сканирования'

Это слишком поздно, но может пригодится другим

соответствующий подстановочный знак является строгим, но объявление не может быть найдено для контекст элемента: component-scan

что означает пропустил некоторые заявления или обязательные объявления Не Нашел в XML

в моем случае я забыл добавить советами

после этого проблема ушла прочь

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

при добавлении context: component-scan в первый раз в xml необходимо добавить следующее.

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

правильный путь не должен заканчиваться на"/", Я ошибся, что вызвало проблемы

правильно:

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

с объявлением пространства имен и расположением схемы вы также можете проверить синтаксис использования пространства имен, например : -

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