web-dev-qa-db-ja.com

Spring-applicationContext.xmlは存在しないため開くことができません

Spring MVCアプリケーションと、applicationContext.xmlファイルと組み合わせたJUnitテストの問題があります。

私のJUnitテストクラスでは、次のように記述します。

final ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
service = (TestServiceImpl) context.getBean("testServiceImpl");

私が得るエラーは、aplicationContect.xmlが見つからないということです:

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [applicationContext.xml]; nested exception is Java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist

ただし、WEB-INFフォルダーで終了します。ここで、applicationContext.xmlファイルでプロジェクトのツリーを確認できます。 http://img28.imageshack.us/img28/2576/treexp.png

それで、ここで何が問題なのでしょうか? JUnitテスト用のファイルが存在しないのはなぜですか?

よろしくお願いします。

33
Tim

「ソース」としてマークされた別のフォルダーにSpringファイルを保持する必要があります(「src」または「resources」と同じように)。

WEB-INFはソースフォルダーではないため、クラスパスに含まれません(つまり、JUnitはそこを検索しません)。

38
biasedbit

ClassPathXmlApplicationContextは、applicationContext.xmlフォルダー内でWEB-INFを見つけられません。クラスパス上にはありません。テストの実行時に、アプリケーションコンテキストをクラスパスにコピーできます(src/test/resourcesの下に配置し、Mavenにコピーさせることができます)。

8
Nathan Hughes

同じエラーが発生しました。ファイルを移動して解決しましたapplicationContext.xmlin a

srcfolderのサブフォルダー。例えば:

context = new ClassPathXmlApplicationContext("/com/ejemplo/dao/applicationContext.xml");
8
juan

Mavenを使用する場合、メインディレクトリにresourcesというディレクトリを作成し、applicationContext.xmlに。

Javaコード呼び出しから:

ApplicationContext appCtx = new ClassPathXmlApplicationContext("applicationContext.xml");
8
duracell

私もこの問題を見つけました。これを解決するためにしたことは、このファイルをどこにでもコピーして貼り付け、一度に1ファイルずつ実行することです。最後にコンパイルして正常に実行し、不要なものを削除しました。私の状況での正しい場所は: enter image description here

これは/ src /パスの下にあります(IDEとしてIntellij Ideaを使用しています)。他のJavaソースファイルは/ src/com/package /パスの下にあります

それが役に立てば幸いです。

5
BillOverFlow

src/main/Javaフォルダーをクリックし、右クリックしてxmlファイルを作成します。 application.xml以外のサブパッケージに/ファイルを作成すると、機能しません。

あなたの構造がこのように見えることを知ってください

package/
|  subpackage/
   | Abc.Java
   | Test.Java

/application.xml
2

Srcフォルダー内のファイルspring-context.xmlを移動して解決しました。 ApplicationContext context = new ClassPathXmlApplicationContext( "spring-context.xml");

1
Razi

MContextプロジェクトのjar/target/test-classesにapplicationContext.xmlを追加して修正しました。そして使用する

        XmlBeanFactory bf = new XmlBeanFactory( new ClassPathResource(
                "/applicationContext.xml", getClass() ) )

の代わりに

        XmlBeanFactory bf = new XmlBeanFactory( new ClassPathResource(
                "/WEB-INF/applicationContext.xml", getClass() ) )
1
Jackie Lee

これは、Eclipseを使用しているときに時々起こります(Eclipseのバグ??)「除外された」パラメーターの値は*。*(リソースフォルダーのビルドパス)になります

除外を「なし」に変更するだけです(赤い長方形と緑の長方形を参照)。これは、見つけるのが非常にイライラするので、将来誰かに役立つことを願っています。

excluded

1
user648026

このコードを実行してください-それは働いた

 AbstractApplicationContext context= new ClassPathXmlApplicationContext("spring-config.xml");

o/w:メインメソッドクラスを削除し、再作成中に再作成します。

0
Umesh Mundhe
just change the containing package of your applicationContext.xml file.
 applicationContext.xml must be in src package not in your project package.
 e.g. 
     src(main package)
         com.yourPackageName(package within src)
         classes etc.
     applicationContext.xml(within src but outside of yourPackage or we can say 
                            parallel to yourPackage name)
0
Amit

私はNetbeansを使用していますが、ファイルを他のソースのデフォルトパッケージに入れることで問題を解決し、次のように呼び出しました:

ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");

リソースフォルダー

0

Springでは、すべてのソースファイルはsrc/main/Java内にあります。同様に、リソースは通常src/main/resources内に保持されます。したがって、spring構成ファイルはresourcesフォルダー内に保管してください。

Src/main/resources内にもファイルのClassPathエントリがあることを確認してください。

.classpathで、次の2行を確認します。不足している場合は追加します。

<classpathentry path="src/main/Java" kind="src"/>
<classpathentry path="src/main/resources" kind="src" />

したがって、すべてを適切に配置していれば、以下のコードが機能するはずです。

ApplicationContext ctx = new ClassPathXmlApplicationContext( "Spring-Module.xml");

0
Shashesh

ApplicationContext.xmlをsrc/main/Javaフォルダーに配置し、動作しました

0
Chetan Punjabi

Mavenでの作業中に同じ問題が発生した場合、XMLファイルをsrc/main/Javaパスとそれは働いた。

ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
0
Kushagra Sharma

実際には、ApplicationContextを理解する必要があります。これはインターフェースであり、構成に基づいてさまざまな実装が行われます。

new ClassPathXmlApplicationContext("applicationContext.xml");を使用している場合、最初の右側に注意を払ってくださいClassPathXmlApplicationContextなので、[〜#〜] xml [〜#〜]はクラスパスに存在する必要があります。したがって、applicationContext.xmlがどこにあってもsrcフォルダーにドラッグします。

要点:新しいClassPathXmlApplicationContext名前として[ClassPathXml]はプロジェクトのsrcフォルダーでxmlファイルを探すため、xmlファイルのみをそこにドラッグします。

ClassPathXmlApplicationContext—クラスパスにあるXMLファイルからコンテキスト定義をロードし、コンテキスト定義ファイルをクラスパスリソースとして扱います。

FileSystemXmlApplicationContext—ファイルシステムのXMLファイルからコンテキスト定義をロードします。

XmlWebApplicationContext— Webアプリケーション内に含まれるXMLファイルからコンテキスト定義をロードします。

0
Vishwa Ratna