无法使用ApplicationContext将XML文件读入InputStream

时间:2017-05-19 15:09:45

标签: java xml spring-mvc

我正在尝试使用spring-mvc的ApplicationContext将XML文件加载到输入流中。但我无法阅读该文件,而且我收到了相互矛盾的信息。

我正在尝试将xml文件加载到InputStream并通过以下方式找到该文件:

ApplicationContext ctx =
  new ClassPathXmlApplicationContext(new String[]{"classpath*:config/validation.xml"});

然后,我从InputStream初始化ApplicantionContext的内容,但我不知道该怎么做。现在我有:

private InputStream forms = getClass().getClassLoader().getResourceAsStream("/validation.xml");

然而目前的问题是我甚至无法找到该文件。

信息冲突:

我将这些文件放在资源下并再次放在webapp-> WEB-INF-> config中,以试图找出它可以从哪里加载。

ApplicationContext ctx =
    new ClassPathXmlApplicationContext(new String[]{"classpath*:config/validation.xml"});

FOUND!!!!!!!!!!!

public Validator() {

        this.testResource();

        if(ctx != null){
            System.out.println("FOUND!!!!!!!!!!!!!!!!!!!!"+ctx); //this prints
        }else{
            System.out.println("NOT FOUND");
        }
    }

输出:

  

FOUND !!!!!!!!!!!!!!!!!!!! org.springframework.beans.factory.support.DefaultListableBeanFactory@635bc5cc:define beans [];工厂层级的根

然而,这表示无法找到该文件:

private void testResource(){

    Resource resource =
            this.ctx.getResource("classpath*:/validation.xml");

    try{
        InputStream is = resource.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        br.close();

    }catch(IOException e){
        System.out.println("ERROR it is not found: ");
        e.printStackTrace();
    }
}

--------------------------更新1 ------------------- ----

我现在有以下内容,它也给了我相互矛盾的信息,说找到IOException:

@Configuration
public class Validator {

    private InputStream forms;
    private ValidatorResources resources;

    ApplicationContext ctx =
            new ClassPathXmlApplicationContext(new String[]{"classpath*:config/validation.xml"});

    private Resource resource = this.ctx.getResource("classpath*:validation.xml");

    public Validator() {

        if(resource != null){
            System.out.println("FOUND!!!!!!!!!!!!!!!!!!!!"+resource);
        }else{
            System.out.println("NOT FOUND");
        }

        this.runInputStream();
    }

    private void runInputStream(){
        try{
            this.forms = this.resource.getInputStream();
            this.resources = new ValidatorResources(this.forms);

        }catch (IOException ex) {
            System.out.println("runInputStream IOException: "+ex);
        }catch (SAXException e) {
            System.out.println("runInputStream SAXException: "+e);
        }catch (Exception e){
            System.out.println("ERROR-------------"+e);
        }

    }
}

输出:

  

发现!!!!!!!!!!!!!!!!!!!!类路径资源   [classpath *:validation.xml] runInputStream IOException:   java.io.FileNotFoundException:类路径资源   无法打开[classpath *:validation.xml],因为它不存在

2 个答案:

答案 0 :(得分:0)

您应该删除/

 getClass().getClassLoader().getResourceAsStream("validation.xml");

您的validation.xml文件必须位于资源文件夹的根目录。

如果一切正常,一旦你的项目被构建,你可以在WEB-INF / classes中找到validation.xml文件,因此它可以在类加载器中找到。

答案 1 :(得分:0)

我认为您需要将文件加载为:

Resource resource =
    this.ctx.getResource("classpath*:validation.xml");

所以我们加载文件假设它在类路径的任何地方