「ローカルファイル名」とは、リソースファイルがクラスファイルと同じディレクトリにあることを意味します。以下の場合、これはJUnitRunner.class
ファイルです。パスが'getResource()
で始まらない場合、Javaのファイルはこれを処理できます/
ClassPathXmlApplicationContext
同じコンストラクターを実行する方法がわかりません。
package springtests;
import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class JUnitRunner {
private final static Logger log = LoggerFactory.getLogger(JUnitRunner.class);
@Test
public void test() throws URISyntaxException {
String filename = "test01.xml";
URL url = getClass().getResource(filename);
File file = new File(url.toURI());
log.info("File exists: {}", file.exists());
try {
new ClassPathXmlApplicationContext(filename);
}
catch(Exception e) {
log.error("Can't load context", e);
}
}
}
出力は次のとおりです
15:32:27,375 3 [main] INFO springtests.JUnitRunner-ファイルが存在します:true 15:32:27,422 50 [main] INFO org.springframework.context.support.ClassPathXmlApplicationContext-org.springframework.context.support.ClassPathXmlApplicationContext@ee3aa7の更新:開始日[Thu Nov 01 15:32:27 MSK 2012]; コンテキスト階層のルート 15:32:27,475 103 [main]INFOorg.springframework.beans.factory.xml.XmlBeanDefinitionReader-クラスパスリソースからのXMLBean定義のロード[test01.xml] 15:32:27,477105[メイン]エラーspringtests.JUnitRunner-コンテキストを読み込めません org.springframework.beans.factory.BeanDefinitionStoreException:クラスパスリソース[test01.xml]からXMLドキュメントを解析するIOException; ネストされた例外はjava.io.FileNotFoundExceptionです:クラスパスリソース[test01.xml]が存在しないため、開くことができません org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)で org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)で ..。
アップデート
XMLファイルはクラスファイルと同じフォルダにあります。それを見るという事実からそれはgetResource()
明らかです。