Весняна схема розташування не працює, коли немає підключення до Інтернету


107

Я використовую Spring і в application-context.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:util="http://www.springframework.org/schema/util"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:p="http://www.springframework.org/schema/p"
   xmlns:security="http://www.springframework.org/schema/security"
   xsi:schemaLocation="
   http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
   http://www.springframework.org/schema/util 
   http://www.springframework.org/schema/util/spring-util-2.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-2.1.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
   http://www.springframework.org/schema/security
   http://www.springframework.org/schema/security/spring-security-2.0.xsd"
   >

.....

Коли втрачається моє підключення до Інтернету, я не можу запустити свою програму через tomcat або jetty.

Це дає:

[main] WARN  org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Ignored XML validation warning
org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document '/spring-beans-2.0.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.warning(ErrorHandlerWrapper.java:96)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:380)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaErr(XSDHandler.java:2541)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaWarning(XSDHandler.java:2532)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.java:1836)
    at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:531)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:552)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.findSchemaGrammar(XMLSchemaValidator.java:2408)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1753)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:685)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3095)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:921)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:225)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
    at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:92)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:423)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:353)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
    at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:115)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
    at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.jetty.Server.doStart(Server.java:224)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132)
    at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:441)
    at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:383)
    at org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:210)
    at org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:184)
    at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:483)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:678)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:553)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:523)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:371)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:332)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:181)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:356)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:137)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:356)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
2009-11-13 15:31:25,675 [main] ERROR org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 23 in XML document from class path resource [application-context.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:404)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinit........

Будь-які пропозиції, як це виправити?

Відповіді:


115

Немає необхідності використовувати протокол classpath: у вашій URL-схемі схеми, якщо простір імен налаштовано правильно та файл XSD знаходиться на вашому класі.

Spring doc " Реєстрація обробника та схеми " показує, як це потрібно зробити.

У вашому випадку проблема, ймовірно, полягала в тому, що весняний контекстний jar на вашому класному шляху не був 2.1. Ось чому зміна протоколу на classpath: і введення конкретного 2.1 XSD у ваш classpath виправлено проблему.

З того, що я бачив, є дві схеми, визначені для основного XSD, що міститься в банці Spring-*. Раз вирішити URL-адресу схеми з версією та один раз без неї.

Як приклад див. Цю частину вмісту spring.schemas у spring-context-3.0.5.RELEASE.jar:

http\://www.springframework.org/schema/context/spring-context-2.5.xsd=org/springframework/context/config/spring-context-2.5.xsd
http\://www.springframework.org/schema/context/spring-context-3.0.xsd=org/springframework/context/config/spring-context-3.0.xsd
http\://www.springframework.org/schema/context/spring-context.xsd=org/springframework/context/config/spring-context-3.0.xsd

Це означає, що (у xsi: schemaLocation)

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

буде підтверджено проти

org/springframework/context/config/spring-context-2.5.xsd 

в класі.

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

або

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

буде підтверджено проти

org/springframework/context/config/spring-context-3.0.xsd 

в класі.

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

не визначено, тому Spring буде шукати його за допомогою прямої URL-адреси, визначеної в schemaLocation.


37
Для тих, хто потребує резюме: Spring не може знайти схеми на класі. Ядро Spring JAR має схему-> відображення імен файлів, яка включена в JAR. Якщо він не може вирішити це, він перейде в Інтернет.
Олексій

Я оголосив це таким чином "http:////www.springframework.org/schema/context http: ///www.springframework.org/schema/context/spring-context-4.0.xsd". У мене є баночка 4.0 у Glassfish / domeins / domain1 / lib. Кожного разу, коли я розгортаю проект, рибка посилається на Інтернет. Чи характерне це питання для риби-стерлі-4.0? (додано більше '/' для форматування)
Pragalathan M

Я думаю, що нове посилання "Реєстрація обробника та схеми" має бути тут: docs.spring.io/spring/docs/current/spring-framework-reference/…
Дірк

1
@Dirk - це посилання, здається, порушено
Stormcloud

2
@Stormcloud, так, оригінальне посилання повернулося назад, а те, що я запропонував, зламане. Ось останнє посилання на документ: docs.spring.io/spring/docs/current/spring-framework-reference/…
Дірк

28

Я вирішив це

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:security="http://www.springframework.org/schema/security"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://www.springframework.org/schema/util 
       http://www.springframework.org/schema/util/spring-util-2.0.xsd
       http://www.springframework.org/schema/context
       classpath:spring-context-2.1.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
       http://www.springframework.org/schema/security
       http://www.springframework.org/schema/security/spring-security-2.0.xsd"
       >

classpath:spring-context-2.1.xsdє ключем для роботи в режимі офлайн (відсутність підключення до Інтернету). Також я скопіював spring-context-2.1.xsdпоруч (той самий каталог) файл application-context.xml


6
Для користувачів Intellij, які можуть зіткнутися з цим. Це працює, навіть якщо intellij не розпізнає синтаксис classpath всередині schemalLocation і виділяє його як помилку.
Upgradingdave

Величезне спасибі @DaveParoulek - помилка мене відкинула, але це абсолютно робить трюк.
Зак Джонсон

18

Щось подібне працювало на мене.

xsi:schemaLocation=
"http://www.springframework.org/schema/beans 
             classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd
http://www.springframework.org/schema/context 
             classpath:org/springframework/beans/factory/xml/spring-context-3.0.xsd"

1
Так, це працює, тому що xsd упакований всередині пружинної банки. Тому не потрібно перевіряти на springframework.com, коли ви можете використовувати xsd всередині баночки :)
Somaiah Kumbera

Це рішення спрацювало для мене, тому що я мав залежність від весни всередині баночки, я маю на увазі як зовнішня баночка, і без Інтернету не вдається, ваше рішення спрацювало дуже добре для мене, дякую, бог, благослови.
chiperortiz

@godlikeNoob Я спробував це, але в ньому знову виникає помилка "cvc-elt.1: Неможливо знайти декларацію елемента" боби "."
Каміні

6

У випадку, якщо хтось приїде сюди через той самий корінь, що я і зробив - я потрапив у цю проблему, оскільки будував єдиний JAR зі всіма залежностями, включаючи Spring JAR. В результаті файл spring.schemas в деяких каталогах META-INF Spring JARs був перезаписаний.

Тут я знайшов запропоновані рішення: Як створити виконуваний баночку з пружиною з Maven?


5

Зустрілися в подібному питанні і сьогодні. У моєму випадку винуватцем цього виду став саме плагін відтінку, окрім того, що springframework.org відмовився. Наступний фрагмент очистив речі:

<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
   <resource>META-INF/spring.schemas</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
    <resource>META-INF/spring.handlers</resource>
</transformer>

HTH хтось


куди потрібно додати описаний фрагмент?
Каміні

4

Ви повинні перевірити, що файли spring.handlersта spring.schemasфайли знаходяться на шляху до класу та мають правильний вміст.

Це можна зробити за допомогою ClassLoader.getResource(..). Ви можете запустити метод за допомогою віддаленого налагоджувача в середовищі виконання. Налаштування розширення XML для розробки даних описано у Spring Spring B.5. Реєстрація обробника та схеми .

Як правило, файли повинні бути у весняній банці (springframework.jar / META-INF /) та на класному шляху, коли Spring може бути ініційована.


1
привіт, ваше рішення дуже складне; я не розумію, що ти маєш на увазі? jroller.com/marshbourdon/entry/using_spring_2_x_xml , я спробував це, але це не працює. Будь-які пропозиції ? Не може бути складним робота з веб-сайтом, поки немає підключення до Інтернету. маю рацію ? Дякую.
Альтуг

1
Весна повинна виходити з коробки. Щось із вашим класом невірно. Моя відповідь містила лише деякі підказки для аналізу вашої проблеми.
Томас Юнг

2

Знайти шлях до класу

Якщо ви використовуєте затемнення, натисніть на відповідний файл jar. Перейти -> META-INF-> відкрити файл spring.schemas

ви побачите рядки, подібні до цього.

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

скопіюйте after = і налаштуйте боби щось подібне нижче.

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:rabbit="http://www.springframework.org/schema/rabbit" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/rabbit classpath:org/springframework/amqp/rabbit/config/spring-rabbit-1.1.xsd http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.1.xsd http://www.springframework.org/schema/context classpath:org/springframework/context/config/spring-context-3.1.xsd http://www.springframework.org/schema/util classpath:org/springframework/beans/factory/xml/spring-util-3.1.xsd">


Я вніс цю зміну в xml springframework.org/schema/rabbit classpath: org / springframework / amqp / rabbit / config / spring-rabbit-1.6.xsd, але в ньому написано Не вдалося прочитати документ схеми 'classpath: org / springframework / amqp / кролик / конфігурація / весна-кролик-1.6.xsd '? будь-яка пропозиція
Лаліт Мехра

1

Вам потрібно додати місце розташування схем до свого визначення квасолі, і тоді їх можна знайти на classpath, а не за допомогою мережі. Враховуючи ваші проблеми із форматуванням, я не на 100% впевнений, що ви цього ще не робите.

<?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-2.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- empty: the beans we use are in the base class's context. -->
</beans>

1

Ми вирішили цю проблему:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(false); // This avoid to search schema online
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", "TransactionMessage_v1.0.xsd");

Зауважте, що наша програма - це автономна програма для автономного режиму Java.


1

Якщо ви використовуєте eclipse для своєї розробки, це допоможе, якщо ви встановите плагін STS для Eclipse [з marketPlace для конкретної версії eclipse.

Тепер, коли ви намагаєтесь створити новий файл конфігурації у папці (як правило, ресурсах) всередині проекту, параметри мають "Spring Folder", і ви можете вибрати "Spring Fiel Definition File" (Весна> Файл конфігурації Spring Bean).

Якщо цей параметр обраний, виконуючи кроки, він вимагає вибрати для просторів імен та конкретні версії:

І тому можливість наявності неіснуючої банки або старої версії можна усунути.

Опублікував би також зображення, але моя репутація досить низька .. :(


1

Проблема полягає у файлах JAR, які ви використовуєте у своїй програмі.

Те, що я зробив, що працювало, - це потрапити всередину JAR-карт для ВЕСНА-КОРОБКА, ВЕСНА-БОЛЬНА, ВЕСНА-КОНТЕКСТ, ВЕСНА-ТХ, що відповідають версії, яку я використовую. У папці META-INF я об'єднав усі spring.handlers та spring.schemas, що входять у ці JAR.

Я убив двох птахів одним каменем, я вирішив проблему схем, і це також працює нормально в автономному режимі.

PS Я спробував плагін Maven для SHADE та трансформаторів, але це не вийшло.


Як ти вирішив цю проблему, можеш, будь ласка, допомогти мені зрозуміти це? Я нужденний.
Каміні

1

У мене була ця проблема. Що стосується нащадків, моїм винятком було:

org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 117;
schema_reference.4: Failed to read schema document
'http://www.springframework.org/schema/beans/spring-beans-4.2.xsd'

Я вирішив це, коли зрозумів, що spring-beansвказана в моєму Maven версія pom.xmlє 4.1.x, таким чином, означає, що конкретного .xsdне вдалося знайти на класі.

Це довго маскувалося, тому що я зазвичай перебуваю в Інтернеті, тому я вважав, що офлайн "зламав" збірку. Але це насправді не мало нічого спільного. Оновлення моєї, pom.xmlщоб вказати правильну версію spring-beans, а саме 4.2.xвиправити її.


1

У мене виникли ті ж проблеми, коли я використовую версію spring-context 4.0.6 та spring-security версії 4.1.0.

При зміні версії spring-security на 4.0.4 (оскільки 4.0.6 джерела безпеки не доступно) в моїй пам’яті і безпеки xml -> schemaLocation, вона збирається без Інтернету.

Отже, це означає, що ви також можете вирішити це:

  • зміна безпеки Spring на старішу або ту саму версію, ніж Spring-контекст.

  • зміна Spring-контексту на більш нову або таку ж версію, ніж spring-security.

(будь-яким способом Spring-контекст стане новою або такою ж версією для Spring-Security)


0

Я хотів би додати деякий додатковий аспект цієї дискусії. У ОС Windows я помітив, що коли файл jar, що містить схему, зберігається в каталозі, шлях якого містить символ пробілу, наприклад, як у наступному прикладі

"c:\Program Files\myApp\spring-beans-4.0.2.RELEASE.jar"

то вказати URL-адресу розташування схеми наступним чином недостатньо, коли ви розробляєте окрему програму, яка також повинна працювати в автономному режимі

<beans
 xsi:schemaLocation="
   http://www.springframework.org/schema/beans org/springframework/beans/factory/xml/spring-beans-2.0.xsd"
    />

Я дізнався, що результатом такої роздільної здатності URL-адреси схеми є файл, який має такий шлях, як наведено нижче

"c:\Program%20Files\myApp\spring-beans-4.0.2.RELEASE.jar"

Коли я запустив свою програму з якогось іншого каталогу, який не містив символу пробілу на своєму шляху, тоді роздільна здатність розташування схеми спрацювала нормально. Може хтось стикався з подібними проблемами? Тим не менш я виявив, що протокол classpath добре працює в моєму випадку

<beans
 xsi:schemaLocation="
   http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-2.0.xsd"
    />

0

Я також зіткнувся з цією подібною проблемою. У моєму випадку моя резолюція зовсім інша. Ось мій весняний контекстний файл xml:

...
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
...

Я не вказую жодної версії xsd, оскільки хочу, щоб весна використовувала останню версію xsd всередині залежностей весни. У весняній версії, яку я використовував у моїй програмі, було Spring-beans-4.3.1.RELEASE.jar: 4.3.1.RELEASE, і коли я збираю свою заявку в банку, всі весняні залежності існують у моєму класі. Однак під час запуску весняного контексту програми я отримав таку помилку:

org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/beans/spring-beans.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.

Після деякого важкого усунення несправностей, я виявив, що ця проблема пов'язана з index.list всередині папки META-INF мого файлу jar. З файлом index.list , обробники пружинних імен пружини не можуть бути розташовані для правильного розбору контексту пружинної програми xml правильно. Ви можете прочитати більше про цей весняний випуск SPR-5705

Видаляючи індексацію з мого Maven-jar-плагіна , мені вдається вирішити проблему. Сподіваюся, що це заощадить кілька разів для людей, які мають таку ж проблему.


0

Просто переконайтеся, що відповідний весняний файл jar знаходиться на вашому курсі виконання. У моєму випадку це нам не вистачало spring-tx-4.3.4.RELEASE.jar від classpath виконання. Після додавання цієї банки проблему було вирішено.


0

Якщо на вашій платформі немає підключення до Інтернету, а ви використовуєте Eclipse, виконайте ці дії (це вирішує мою проблему)

  1. Знайдіть точні файли xsd (Ви можете розпакувати ці файли з їхніх банок. Наприклад, spring-beans-xyxsd у spring-beans-xyzRELEASE.jar)
  2. Додайте ці xsd файли до каталогу Eclipse XML. (Налаштування-> XML-> Каталог XML, додавання файлів)
  3. Додайте розташування цих файлів до файлу конфігурації. (Будьте уважні, напишіть точну версію файлу)

Приклад:

xsi: schemaLocation = " http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-xyxsd "


-1

Видаліть банки, які ви нещодавно додали в web-inf -> lib. наприклад, jstl банки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.