Passed-in Resource [resource loaded through InputStream] contains an open stream:cannot determine
2016-07-13 14:35
791 查看
Passed-in Resource [resource loaded through InputStream] contains an open stream2009-09-29 11:58 org.springframework.beans.factory.BeanDefinitionStoreException: Passed-in Resource [resource loaded through InputStream] contains an open stream:
cannot determine validation mode automatically. Either pass in a Resource that is able to create fresh streams, or explicitly specify the validationMode on your XmlBeanDefinitionReader instance.
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.detectValidationMode(XmlBeanDefinitionReader.java:418)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.getValidationModeForResource(XmlBeanDefinitionReader.java:400)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:360)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:313)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:290)
at org.springframework.beans.factory.xml.XmlBeanFactory.<init>(XmlBeanFactory.java:73)
at org.springframework.beans.factory.xml.XmlBeanFactory.<init>(XmlBeanFactory.java:61)
at com.spring.unit1.TestMain.main(TestMain.java:31)
Exception in thread "main" java.lang.NullPointerException
at com.spring.unit1.TestMain.main(TestMain.java:40)
今天开始正式学习Spring,从《Spring in Action》开始,虽然版本老了一些,但是关键是思想,在做第一个练习的时候,原书中代码如下:
BeanFactory factory = new XmlBeanFactory(new FileInputStream("hello.xml"));
可是在2.0以后的版本中,XmlBeanFactory已经被修改;查阅了API发现构造方法的参数修改为Resource类型
查看了一下InputStreamResource 就是Resource接口的实现类;
于是:
File file = new File("D:/eclipse/workSpace/aSpringDemo/src/hello.xml");
InputStream is = new FileInputStream(file);
InputStreamResource isr = new InputStreamResource(is);
bf = new XmlBeanFactory(isr);
但是却出了上边的异常;
查看源码发现:
reader.loadBeanDefinitions(resource);方法会调用如下代码:
protected int detectValidationMode(Resource resource)
{
InputStream inputStream;
IOException ex;
if(resource.isOpen())
throw new BeanDefinitionStoreException("Passed-in Resource [" + resource + "] contains an open stream: " + "cannot determine validation mode automatically. Either pass in a Resource " + "that is able to create fresh streams, or explicitly specify
the validationMode " + "on your XmlBeanDefinitionReader instance.");
再次查看InputStreamResource API:
implementation for a given InputStream. Should only be used if no specific Resource implementation is applicable. In particular, prefer or any of the file-based Resource implementations where possible.
In contrast to other Resource implementations, this is a descriptor for an already opened resource - therefore returning "true" from
multiple times.
显然
public boolean isOpen()
{
return true;
}
于是,使用其他Resource实现类替换比如FileSystemResource,一切OK
例:
File file = new File("F:/java web2.0/javawebProject/SpringApp/src/spring-beans.xml");
FileSystemResource fsr = new FileSystemResource(file);
XmlBeanFactory factory = new XmlBeanFactory(fsr);
在API中,关于InputStreamResource有这样一段描述:它只有在没有其他合适的Resource实现时才使用。而且,只要有可能就尽量使用ByteArrayResource或者其他基于文件的Resource实现。
与其他Resource实现不同的是,这是个 已经 打开资源的描述符-因此isOpen()方法返回true。如果你需要在其他位置保持这个资源的描述符或者多次读取一个流,请不要使用它。
收藏于 2010-11-15
cannot determine validation mode automatically. Either pass in a Resource that is able to create fresh streams, or explicitly specify the validationMode on your XmlBeanDefinitionReader instance.
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.detectValidationMode(XmlBeanDefinitionReader.java:418)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.getValidationModeForResource(XmlBeanDefinitionReader.java:400)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:360)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:313)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:290)
at org.springframework.beans.factory.xml.XmlBeanFactory.<init>(XmlBeanFactory.java:73)
at org.springframework.beans.factory.xml.XmlBeanFactory.<init>(XmlBeanFactory.java:61)
at com.spring.unit1.TestMain.main(TestMain.java:31)
Exception in thread "main" java.lang.NullPointerException
at com.spring.unit1.TestMain.main(TestMain.java:40)
今天开始正式学习Spring,从《Spring in Action》开始,虽然版本老了一些,但是关键是思想,在做第一个练习的时候,原书中代码如下:
BeanFactory factory = new XmlBeanFactory(new FileInputStream("hello.xml"));
可是在2.0以后的版本中,XmlBeanFactory已经被修改;查阅了API发现构造方法的参数修改为Resource类型
查看了一下InputStreamResource 就是Resource接口的实现类;
于是:
File file = new File("D:/eclipse/workSpace/aSpringDemo/src/hello.xml");
InputStream is = new FileInputStream(file);
InputStreamResource isr = new InputStreamResource(is);
bf = new XmlBeanFactory(isr);
但是却出了上边的异常;
查看源码发现:
reader.loadBeanDefinitions(resource);方法会调用如下代码:
protected int detectValidationMode(Resource resource)
{
InputStream inputStream;
IOException ex;
if(resource.isOpen())
throw new BeanDefinitionStoreException("Passed-in Resource [" + resource + "] contains an open stream: " + "cannot determine validation mode automatically. Either pass in a Resource " + "that is able to create fresh streams, or explicitly specify
the validationMode " + "on your XmlBeanDefinitionReader instance.");
再次查看InputStreamResource API:
implementation for a given InputStream. Should only be used if no specific Resource implementation is applicable. In particular, prefer or any of the file-based Resource implementations where possible.
In contrast to other Resource implementations, this is a descriptor for an already opened resource - therefore returning "true" from
isOpen(). Do not use it if you need to keep the resource descriptor somewhere, or if you need to read a stream
multiple times.
显然
public boolean isOpen()
{
return true;
}
于是,使用其他Resource实现类替换比如FileSystemResource,一切OK
例:
File file = new File("F:/java web2.0/javawebProject/SpringApp/src/spring-beans.xml");
FileSystemResource fsr = new FileSystemResource(file);
XmlBeanFactory factory = new XmlBeanFactory(fsr);
在API中,关于InputStreamResource有这样一段描述:它只有在没有其他合适的Resource实现时才使用。而且,只要有可能就尽量使用ByteArrayResource或者其他基于文件的Resource实现。
与其他Resource实现不同的是,这是个 已经 打开资源的描述符-因此isOpen()方法返回true。如果你需要在其他位置保持这个资源的描述符或者多次读取一个流,请不要使用它。
收藏于 2010-11-15
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring AOP动态代理-切面
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- 模拟Spring的简单实现
- Spring整合WebSocket应用示例(上)
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- 监听器获取Spring配置文件的方法
- Java利用Sping框架编写RPC远程过程调用服务的教程
- springmvc 发送ajax出现中文乱码的解决方法汇总
- Spring MVC中Ajax实现二级联动的简单实例
- SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
- 详解Java的MyBatis框架和Spring框架的整合运用
- struts2 spring整合fieldError问题