我正在尝试使用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],因为它不存在
答案 0 :(得分:0)
您应该删除/
:
getClass().getClassLoader().getResourceAsStream("validation.xml");
您的validation.xml文件必须位于资源文件夹的根目录。
如果一切正常,一旦你的项目被构建,你可以在WEB-INF / classes中找到validation.xml文件,因此它可以在类加载器中找到。
答案 1 :(得分:0)
我认为您需要将文件加载为:
Resource resource =
this.ctx.getResource("classpath*:validation.xml");
所以我们加载文件假设它在类路径的任何地方