4

「ローカルファイル名」とは、リソースファイルがクラスファイルと同じディレクトリにあることを意味します。以下の場合、これは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()明らかです。

4

4 に答える 4

15

私はあなたが何を求めているのかを正しく理解していませんが、あなたは試しましたか?

new ClassPathXmlApplicationContext("classpath*:test01.xml");

これにより、すべてのクラスパスで。が検索されますtest01.xml。これについて詳しくは、Springリソースのドキュメントページをご覧ください。

于 2012-11-01T12:49:26.973 に答える
1

したがって、パッケージ内のxmlファイルspringtestsとAppContextの正しい作成は次のようになります。

new ClassPathXmlApplicationContext("springtests/test01.xml");
于 2012-11-01T13:03:21.760 に答える
0

を構成する必要がある場合がありますDocumentBuilderFactory参照

例 :

@BeforeClass
public static void init() {
    System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
}
于 2012-11-01T12:49:36.117 に答える
0

現在のクラスに相対的な場所からアプリケーションコンテキストをロードすることが可能です。

これを実現するために必要なのはこれだけです。

URL resourceUrl = JUnitRunner.class.getResource("test01.xml");
ApplicationContext applicationContext = new GenericXmlApplicationContext(
    new UrlResource(resourceUrl));
于 2013-09-10T09:27:51.730 に答える