Maven spring - Не удается найти объявление элемента 'beans'

У меня есть проект spring, построенный с использованием maven (упакованный как jar) (зависимости копируются в отдельный каталог и добавляются в classpath)

Я хочу запустить его как java -jar

Проблема заключается в том, что при запуске я получаю:

Вызвано: org.xml.sax.SAXParseException: cvc-elt.1: не удается найти объявление  элемента 'beans'.

Это происходит потому, что spring.schemas и spring.handlers расположены в нескольких баночках, а именно: spring - beans и т.д.

Есть ли способ решить проблему, предполагая, что я не хочу использовать теневой плагин для распаковки всех зависимостей и конкатенации содержимого spring.schemas и spring.handlers?

Я также хотел бы избежать сохранения xsd файлов в моем проекте и изменения schemaLocation, чтобы указать на мое местоположение.

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:camel="http://camel.apache.org/schema/spring"
    xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

    <camel:camelContext>
        <camel:routeBuilder ref="fakeRouteBuilder"/>
    </camel:camelContext>

    <bean id="fakeRouteBuilder" class="<className>" />


</beans>

Ответы

Ответ 1

Я знаю 2 ситуации, в которых вы можете столкнуться с этой проблемой

  • Если у вас нет подключения к Интернету (например, за прокси-сервером). В этом случае загрузите XSD, скопируйте его рядом с XML и измените расположение схемы на xsi:schemaLocation=" http://www.springframework.org/schema/beans spring-beans-2.5.xsd ..."
  • Если у вас есть подключение к Интернету/по-прежнему есть проблема, потому что вы используете разные версии Spring для XSD и jar.

Ответ 2

Я думаю, что XSD будет частью флага spring, поэтому не стоит беспокоиться.

Ответ 4

У меня такая же проблема, потому что я был за прокси. Я запускал приложение Spring MVC под Tomcat 6. Просто добавил следующие строки в основном файле catalina.bat, и это решило мою проблему:

set JAVA_OPTS=%JAVA_OPTS% -Dhttp.proxyHost=XXXX -Dhttp.proxyPort=YYYYY -Dhttp.proxyUser=ZZZZ -Dhttp.proxyPassword=XXXXXX

Ответ 5

Мне удалось решить аналогичную проблему, очистив файл xsd из кеша удаленных ресурсов, "Окно" > "Настройки" > "Основные" > "Сетевое подключение" > "Кэш"

Ответ 6

В вашей XSD-декларации слишком много http://. Попробуйте следующее:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:camel="http://camel.apache.org/schema/spring"
    xsi:schemaLocation="
       http://www.springframework.org/schema/beans    
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://camel.apache.org/schema/spring
       http://camel.apache.org/schema/spring/camel-spring.xsd">

(ваш был http://http://www.springframework.org/schema/beans/spring-beans-2.5.xsd)

Ответ 7

Я получил эту ошибку, когда мой URL-адрес XSD указывает на другое местоположение, которое отличается от местоположения XSD, определяющего файл jar. Например, spring-beans-3.0.xsd вместо spring-beans-2.5.xsd vise-versa.

Ответ 8

Также вы можете использовать совет здесь для решения этой проблемы

Ответ 9

У меня была точно такая же проблема, и я думаю, что это вызвано двумя основными причинами:

  • У вас разные версии для spring -зависимостей безопасности и ссылок на файлы XSD.
  • Также это может произойти, если вы используете разные версии spring общей структуры и spring -security.

Ответ 10

META-INF/INDEX.LIST файл, созданный плагином maven-assembly-plugin, также может быть виновником.

Причина: ошибка Java: "ClassLoader.getResources() возвращает только 1 экземпляр при использовании индексации jar"

Решение: отключить индексирование в дескрипторе сборки:

<indexed>false</indexed>

Ресурсы: Spring JIRA SPR-5705 JDK-6957241 ClassLoader.getResources() возвращает только 1 экземпляр при использовании индексации jar