SpringはどのようにXSDファイルをロードしますか?(org.xml.sax.SAXarseException:Failed to read schema documentエラーの解決方法)

3386 ワード

本論文の原文接続: http://blog.csdn.net/bluishglc/article/details/7596118 転載は出典を明記してください。
時には過去に正常なシステムが起動していることに気づきます。いつか起動すると次のようなエラーが発生します。
org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/beans/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 .
spring xml設定ファイルで指定されたxsdファイルが読み込まれなくなったのは明らかです。なぜなら、インターネットの切断やspringの公式サイトが一時的に接続できなくなったからです。ブラウザでxsdファイルのURLを入力できます。http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 確認します
この問題については、オンラインで2つの一般的な解決方法がありますが、最初は簡単で効果的です。つまり、すべてのspringプロファイルの中でurl形式のxsdパスをローカルxsdファイルを指すclasspath形式の経路に変換します。例えば、classpath:org/sprigframe ork/beans/factory/xml/xml/spring-bens-bens.もう一つの方法は、本機でwebサーバを構築し、URLに応じて該当フォルダを作成し、対応xsdファイルを入れて、本機hostsファイルに「127..0.1 wwww.springframe ewark.org」を追加することです。実際には、この2つの方法はすべて「ゆがんでいる」式の方法であり、この問題を直接に理解するには、springのXSDファイルロードメカニズムから話す必要があります。
まず、springはxsdファイルをロードする時、いつも先にローカルでxsdファイル(springのjarパケットにすべてのバージョンのxsdファイルが含まれています)を検索しようとしますが、見つけられなかったら、URLの指定された経路に移行します。これはとても合理的なやり方で、見た目ほどではなく、毎回サイトからダウンロードします。実際に、もしあなたのすべての構成が確定しているなら、あなたのプロジェクトは完全にネットを切断した状態で起動できます。上のエラーを報告しません。Springロードxsdファイルの種類はPluggable SchemaResolaverで、ソースコードを確認して上記の説明を検証することができます。また、ロゴ4 j.xmlファイルに追加できます。
	
		
	
ログでspringがxsdファイルをロードしたのかを知る。
次に、問題なのはなぜspringは現地で必要なファイルが見つからないのか、ウェブサイトに転向してダウンロードしなければならないです。この問題については、実はとても簡単です。たくさんのspringのjarカバンの中で、META-INFディレクトリの下にspring.schemasがあります。これはpropertyファイルで、その内容は以下のようです。
http\://www.springframework.org/schema/beans/spring-beans-2.0.xsd=org/springframework/beans/factory/xml/spring-beans-2.0.xsd
http\://www.springframework.org/schema/beans/spring-beans-2.5.xsd=org/springframework/beans/factory/xml/spring-beans-2.5.xsd
http\://www.springframework.org/schema/beans/spring-beans-3.0.xsd=org/springframework/beans/factory/xml/spring-beans-3.0.xsd
....
実際、このファイルはspringのxsdファイルのローカル保存経路に関するマッピングであり、springはこのファイルを通じてローカル(すなわちspringのjar内)でxsdファイルを検索するものである。では、検索できない理由は、URL入力に誤りがあることを除いて、ステートメントのxsdファイルバージョンはローカルに存在しない可能性があります。一般的に、新しいバージョンのspring jarパッケージは過去のすべてのバージョン(2.0以降)のxsdをパッケージ化し、spring.schemasファイルに対応項目を追加しています。問題が発生した場合、3.0などの高バージョンのxsdファイルを使用したという声明がよくありますが、依存するspringのjarパッケージは2.5以前のバージョンです。この時、スプリングがサイトに行ってターゲットxsdファイルをダウンロードすることになります。もしネットが切れたり、ターゲットサイトが使えなくなったりしたら、上記の問題が発生します。
しかし、開発の実現においては、上記のようなエラーが発生する確率は高くなく、最も一般的な問題の原因は、「asembly」というmavenパッケージプラグインを使用したことと関係があります。多くのプロジェクトはその依頼されたすべてのjarパッケージと一緒にプロジェクトをパッケージ化する必要があります。mavenのasemblyプラグインはこのタスクを完了するために使います。しかし、多くのjarパッケージに依存しているプロジェクトのため、他のjarパッケージに依存します。このように、プロジェクトでは異なるバージョンのspringに依存しています。asemblyを使用してパッケージ化した場合、あるバージョンのjarパッケージのspring.schemasファイルを最終的に打ち出したjarパッケージに入れるしかないです。さらに、文章の書き出しの誤りが出てきました。もしあなたのプロジェクトが単一jarになったら、最終的に発生したjarのspring.schemasファイルを確認することによって、このような状況ではないかを確認することができます。このような状況に関して、解決方法は一般的にもう一つのパッケージプラグインshardeを使用することを推奨しています。これは確かにassmblyよりも優れたツールです。spring.schemasファイルの処理において、shardはjarのspring.schemasファイルを全部マージして、一生分の単一jarパッケージに、spring.schemasはすべてのバージョンが含まれています。
以上がspringでXSDファイルをロードする仕組みと問題が発生した原因分析です。実際には、私たちのプロジェクトは起動時にいつもローカルのxsdファイルをロードさせるべきです。毎回サイトに行ってダウンロードするのではなく、この点を達成するためには、上述のさまざまな状況に合わせてあなたのプロジェクトをチェックしてください。