インターネット接続がない場合、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のドキュメント「ハンドラーとスキーマの登録」は、その方法を示しています

あなたの場合、問題はおそらくクラスパスのspring-context jarが2.1ではないことでした。そのため、プロトコルをクラスパスに変更し、特定の2.1 XSDをクラスパスに配置することで問題が解決しました。

私が見たことから、spring- * jarに含まれるメインXSD用に定義された2つのスキーマがあります。1回はバージョンでスキーマURLを解決し、もう1回はバージョンなしで解決します。

例として、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に含まれているスキーマ->ファイル名のマッピングがあります。これを解決できない場合は、Webにアクセスします。
アレックス

「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 '21

:私は、新しいリンク「ハンドラとスキーマを登録すると、」ここにあるべきだと思うdocs.spring.io/spring/docs/current/spring-framework-reference/...
ディルク

1
@Dirk-そのリンクは壊れているようです
Stormcloud

2
@Stormcloud、はい、元のリンクは戻っており、私が提案したリンクは壊れているようです。最新のドキュメントリンクは次のとおり
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.xsd、application-context.xmlファイルの近く(同じディレクトリ)にコピーしました


6
これに遭遇するかもしれないintellijユーザーのために。これは、intellijが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がSpring jar内にパッケージ化されているためです。そのため、jar内でxsdを使用できる場合、springframework.comを確認する必要はありません:)
Somaiah Kumbera

瓶の中に春の依存関係があったので、この解決策は私にとってうまくいきました。つまり、外部瓶として、インターネットが失敗しないので、あなたの解決策は私にとって非常にうまくいきました。
chiperortiz 2015

@godlikeNoob試してみましたが、エラー「cvc-elt.1:要素「beans」の宣言が見つかりません。」
Kamini

6

私がしたのと同じルート経由で誰かがここに到着した場合、Spring JARを含むすべての依存関係を持つ単一のJARを構築していたため、この問題に遭遇しました。その結果、Spring JARのMETA-INFディレクトリの一部にあるspring.schemasファイルが上書きされました。

私はここで提案された解決策を見つけました:mavenでスプリングベースの実行可能なjarを作成する方法?


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、これを試しましたが動作しません。助言がありますか ?インターネットに接続されていないときにWebアプリケーションを動作させるのは複雑なことではありません。私は正しいですか?ありがとう。
Altug、2009年

1
春は箱から出して動作するはずです。クラスパスの何かが正しくありません。私の回答には、問題を分析するためのヒントがいくつか含まれていました。
Thomas Jung、

2

クラスパスを見つける

Eclipseを使用している場合は、対応するjarファイルをクリックします。Goto-> META-INF-> open file 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でこの変更を行いましたが、スキーマドキュメント 'classpath:org / springframework / amqp /を読み込めませんでしたrabbit / config / spring-rabbit-1.6.xsd '?任意の提案
Lalit Mehra

1

スキーマの場所をBean定義に追加する必要があります。そうすれば、それらをネット経由でフェッチする代わりにクラスパスで見つけることができます。あなたのフォーマットの問題を考えると、私はあなたがまだこれをしていないことを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を使用している場合は、EclipseのSTSプラグインを特定のバージョンのeclipseのmarketPlaceからインストールすると役立ちます。

ここで、プロジェクト内のフォルダー(通常はリソース)に新しい構成ファイルを作成しようとすると、オプションに「Spring Folder」があり、「Spring Bean Definition File」オプションSpring> Spring Bean Configuation Fileを選択できます。

このオプションが選択されている場合、手順を実行すると、名前空間と特定のバージョンを選択するように求められます。

したがって、存在しないjarまたは古いバージョンが存在する可能性を排除できます。

画像も投稿したかと思いますが、私の評判はかなり低いです。


1

問題は、アプリケーションで使用するJARファイルにあります。

私がやったことは、私が使用しているバージョンと一致するSPRING-CORE、SPRING-Bean、SPRING-CONTEXT、SPRING-TXのJARを取得することでした。META-INFフォルダー内で、これらのJARに含まれるすべてのspring.handlersとspring.schemasを連結しました。

1つの石で2羽の鳥を殺し、スキーマの問題を解決したので、これはオフラインモードでも正しく機能します。

PS私は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、私のMavenで指定しpom.xml4.1.xので、特定の意味、.xsdクラスパス上に見つかりませんでしたが。

私は通常オンラインなので、これは長い間マスクされていたので、オフラインにするとビルドが「壊れた」と思いました。しかし、それはそれとは全く関係がありませんでした。pom.xmlの正しいバージョンを指定するようにmy を更新spring-beans、つまり4.2.xを修正しました。


1

spring-contextバージョン4.0.6およびspring-securityバージョン4.1.0を使用しているときにも同じ問題が発生しました。

pomとセキュリティのxml-> schemaLocationでspring-securityのバージョンを4.0.4に変更すると(4.0.6のspring-securityが利用できないため)、インターネットなしでコンパイルされます。

つまり、次の方法でも解決できます。

  • Spring-SecurityをSpring-Contextよりも古いバージョンまたは同じバージョンに変更する。

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

SpringがSpringの依存関係内で最新のxsdバージョンを使用するようにしたいので、xsdバージョンを指定していません。私のアプリケーションが使用した春のバージョンは、spring-beans-4.3.1.RELEASE.jar:4.3.1.RELEASEでした。あり、アプリケーションをjarにアセンブリすると、すべての春の依存関係がクラスパスに存在します。しかし、Springアプリケーションコンテキストの起動中に次のエラーを受け取りました。

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

関連するSpring jarファイルがランタイムクラスパスにあることを確認してください。私の場合、これはランタイムクラスパスからspring-tx-4.3.4.RELEASE.jarが欠落していた。この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 jarです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.