인터넷 연결이 없으면 Spring schemaLocation이 실패합니다.


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

네임 스페이스가 올바르게 구성되고 XSD 파일이 클래스 경로에있는 경우 schemaLocation URL에서 classpath : 프로토콜을 사용할 필요가 없습니다.

Spring doc " Registering the handler and the schema "는 어떻게해야하는지 보여줍니다.

귀하의 경우 문제는 아마도 클래스 경로의 spring-context jar가 2.1이 아니었을 것입니다. 그래서 프로토콜을 classpath :로 변경하고 특정 2.1 XSD를 classpath에 넣으면 문제가 해결되었습니다.

내가 본 것에서 spring- * jar에 포함 된 기본 XSD에 대해 정의 된 2 개의 스키마가 있습니다. 한 번은 버전이있는 스키마 URL을 확인하고 한 번은없는 경우.

예를 들어 spring-context-3.0.5.RELEASE.jar에서 spring.schemas 컨텐츠의 다음 부분을 참조하십시오.

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은 schemaLocation에 정의 된 리터럴 URL을 사용하여 검색합니다.


37
요약이 필요한 사람들을 위해 : Spring은 클래스 경로에서 스키마를 찾을 수 없습니다. Spring 코어 JAR에는 JAR에 포함 된 스키마-> 파일 이름 맵핑이 있습니다. 이 문제를 해결할 수 없으면 웹으로 이동합니다.
Alex

나는 이것을 "http:////www.springframework.org/schema/context http : ///www.springframework.org/schema/context/spring-context-4.0.xsd"처럼 선언했습니다. Glassfish / domains / domain1 / lib에 4.0 jar가 있습니다. 프로젝트를 배포 할 때마다 glassfish는 인터넷을 의미합니다. 이 문제가 glassfish-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/…
Dirk

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.xsdapplication-context.xml 파일 근처 (동일한 디렉토리)를 복사했습니다.


6
이 문제를 겪을 수있는 intellij 사용자를 위해. 이것은 intellij가 schemalLocation 내부의 클래스 경로 구문을 인식하지 못하고 오류로 강조 표시하더라도 작동합니다.
Upgradingdave

@DaveParoulek에게 큰 감사를 표합니다. 오류로 인해 저를 버리고 있지만 이것은 절대적으로 트릭을 수행합니다.
Zach Johnson

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가 스프링 항아리 안에 포장되어 있기 때문에 작동합니다. 당신이 :) 단지 내부의 XSD 사용할 수있는 경우 springframework.com 확인 할 필요가 없습니다 그래서
Somaiah Kumbera

이 솔루션은 항아리 안에 스프링 의존성이 있었기 때문에 외부 항아리로 의미하고 인터넷이 실패하지 않으면 솔루션이 저에게 잘 작동했습니다. 신의 축복을 많이 주셔서 감사합니다.
chiperortiz 2015

@godlikeNoob 나는 이것을 시도했지만 다시 오류 "cvc-elt.1 : '콩'요소의 선언을 찾을 수 없습니다."
Kamini


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 누군가


위의 스 니펫은 어디에 추가해야합니까?
Kamini

4

당신은 spring.handlersspring.schemas 파일이 클래스 경로에 있고 올바른 내용 합니다.

이것은 ClassLoader.getResource(..). 런타임 환경에서 원격 디버거 를 사용하여 메서드를 실행할 수 있습니다 . 확장 가능한 XML 저작 설정은 Spring Reference B.5에 설명되어 있습니다. 핸들러 및 스키마 등록 .

일반적으로 파일은 Spring jar (springframework.jar / META-INF /) 및 Spring이 시작될 수있는 클래스 경로에 있어야합니다.


1
안녕하세요, 귀하의 솔루션은 매우 복잡합니다. 무슨 말인지 모르겠어? jroller.com/marshbourdon/entry/using_spring_2_x_xml , 나는 이것을 시도했지만 작동하지 않습니다. 어떤 제안? 인터넷에 연결되어 있지 않은 상태에서 웹 앱을 작동하는 것은 복잡 할 수 없습니다. 내가 맞아? 감사.
Altug

1
봄은 상자에서 꺼낼 것입니다. 클래스 경로에 문제가 있습니다. 내 대답에는 문제를 분석하기위한 몇 가지 힌트 만 포함되어 있습니다.
Thomas Jung

2

수업 경로 찾기

Eclipse를 사용하는 경우 해당 jar 파일을 클릭하십시오. Goto-> META-INF-> spring.schemas 파일 열기

아래와 같은 줄이 보일 것입니다.

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

= 뒤에 복사하고 아래와 같이 bean을 구성하십시오.

<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에서이 변경을 수행 했지만 Failed to read schema document 'classpath : org / springframework / amqp / rabbit / config / spring-rabbit-1.6.xsd '? 어떤 제안
더 그랜드 메라

1

빈 정의에 스키마 위치를 추가해야합니다. 그러면 네트워크를 통해 가져 오는 대신 클래스 경로에서 찾을 수 있습니다. 서식 문제를 감안할 때 이미이 작업을 수행하고 있지 않다고 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");

저희 애플리케이션은 자바 독립형 오프라인 앱입니다.


1

개발을 위해 이클립스를 사용하고 있다면, 이클립스의 특정 버전에 대한 마켓 플레이스에서 이클립스 용 STS 플러그인을 설치하면 도움이됩니다.

이제 프로젝트 내의 폴더 (일반적으로 리소스)에 새 구성 파일을 만들려고하면 옵션에 "Spring Folder"가 있고 "Spring Bean 정의 파일"옵션 Spring> Spring Bean 구성 파일을 선택할 수 있습니다.

이 옵션을 선택하면 단계를 수행 할 때 네임 스페이스와 특정 버전을 선택하라는 메시지가 표시됩니다.

따라서 존재하지 않는 항아리 또는 이전 버전을 가질 가능성을 제거 할 수 있습니다.

이미지도 올렸을 텐데 평판이 꽤 낮습니다 .. :(


1

문제는 애플리케이션에서 사용하는 JAR 파일에 있습니다.

내가 한 일은 내가 사용하는 버전과 일치하는 SPRING-CORE, SPRING-BEANS, SPRING-CONTEXT, SPRING-TX의 JAR 내부에 들어가는 것입니다. META-INF 폴더 내에서 해당 JAR에 포함 된 모든 spring.handlers 및 spring.schemas를 연결했습니다.

하나의 돌로 두 마리의 새를 죽였고 스키마 문제를 해결하여 오프라인 모드에서도 올바르게 작동합니다.

추신 나는 SHADE와 변환기에 대한 maven 플러그인을 시도했지만 작동하지 않았습니다.


이 문제를 어떻게 해결 했습니까? 이해하도록 도와주세요. 나는 필요합니다.
Kamini

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내 메이븐에 지정 pom.xml되었다 4.1.x, 따라서 특정 의미.xsd 클래스 경로에서 찾을 수 없습니다.

보통 온라인 상태이기 때문에 오랫동안 가려져 있었기 때문에 오프라인 상태가 빌드를 "깨뜨렸다"고 생각했습니다. 그러나 그것은 정말로 그것과 관련이 없습니다. pom.xml의 올바른 버전 spring-beans, 즉 을 지정하도록 my 를 업데이트 하여 4.2.x수정했습니다.


1

스프링 컨텍스트 버전 4.0.6과 스프링 보안 버전 4.1.0을 사용할 때 동일한 문제가 발생했습니다.

내 pom 및 security xml-> schemaLocation에서 spring-security 버전을 4.0.4로 변경하면 (spring-security 4.0.6을 사용할 수 없기 때문에) 인터넷없이 컴파일됩니다.

따라서 다음과 같이이 문제를 해결할 수도 있습니다.

  • spring-security를 ​​spring-context보다 이전 또는 동일한 버전으로 변경합니다.

  • spring-context를 spring-security보다 새롭거나 동일한 버전으로 변경합니다.

(어떤 식 으로든 spring-context가 spring-security에 대한 새 버전이거나 동일한 버전이 됨)


0

이 토론에 몇 가지 추가 측면을 추가하고 싶습니다. Windows OS에서 스키마를 포함하는 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"

경로에 공백 문자가 포함되지 않은 다른 디렉토리에서 응용 프로그램을 시작했을 때 스키마 위치 확인이 제대로 작동했습니다. 누군가 비슷한 문제에 직면했을까요? 그럼에도 불구하고 클래스 경로 프로토콜이 제 경우에는 잘 작동한다는 것을 발견했습니다.

<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였으며 응용 프로그램을 jar로 어셈블리 할 때 모든 스프링 종속성이 클래스 경로에 존재합니다. 그러나 스프링 애플리케이션 컨텍스트를 시작하는 동안 다음 오류가 발생했습니다.

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

문제 해결에 어려움을 겪은 후 문제가 jar 파일의 META-INF 폴더에 있는 index.list 로 인한 것임을 발견했습니다 . index.list 파일을 사용하면 스프링 네임 스페이스 핸들러를 찾아서 스프링 애플리케이션 컨텍스트 xml을 올바르게 구문 분석 할 수 없습니다. 이번 봄호 SPR-5705에 대한 자세한 내용을 확인할 수 있습니다.

maven-jar-plugin 에서 인덱싱을 제거 하여 문제를 해결했습니다. 이것이 같은 문제를 가진 사람들을 위해 시간을 절약 할 수 있기를 바랍니다.


0

관련 스프링 jar 파일이 런타임 클래스 경로에 있는지 확인하십시오. 제 경우에는 런타임 클래스 경로에서 spring-tx-4.3.4.RELEASE.jar이 누락되었습니다. 이 병을 추가 한 후 문제가 해결되었습니다.


0

플랫폼에 인터넷 연결이없고 Eclipse를 사용하는 경우 다음 단계를 따르십시오 (내 문제가 해결됨).

  1. 정확한 xsd 파일을 찾습니다 (jar에서 이러한 파일의 압축을 풀 수 있습니다. 예를 들어 spring-beans-xyzRELEASE.jar의 spring-beans-xyxsd).
  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에서 최근에 추가 한 jar를 제거합니다. 예를 들어 jstl jars.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.