229 Star 696 Fork 401

snakerflow / snakerflow

 / 详情

获取流程定义时出现:org.snaker.engine.SnakerException: couldn't extract stream out of blob

待办的
创建于  
2015-03-17 16:32

org.snaker.engine.SnakerException: couldn't extract stream out of blob
at org.snaker.engine.entity.Process.getDBContent(Process.java:146)
at com.jfaker.framework.flow.web.ProcessController.edit(ProcessController.java:111)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.jfinal.core.ActionInvocation.invoke(ActionInvocation.java:55)
at com.jfinal.core.ActionHandler.handle(ActionHandler.java:73)
at com.jfinal.ext.handler.ContextPathHandler.handle(ContextPathHandler.java:47)
at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.sql.SQLRecoverableException: 关闭的连接
at oracle.sql.BLOB.getDBAccess(BLOB.java:1122)
at oracle.sql.BLOB.getBinaryStream(BLOB.java:265)
at org.snaker.engine.entity.Process.getDBContent(Process.java:143)
... 35 more

原因在于org.snaker.engine.entity.Process.getDBContent(Process.java:143)

public byte[] getDBContent() {
	
	if(this.content != null) {
		try {
			return this.content.getBytes(1L, Long.valueOf(this.content.length()).intValue());
		} catch (Exception e) {
			try {
				InputStream is = content.getBinaryStream();
				return StreamHelper.readBytes(is);
			} catch (Exception e1) {
				throw new SnakerException("couldn't extract stream out of blob", e1);
			}
		}
	}
	
	return bytes;
}

content属性是Blob类型,而Blob类型的数据与一般String或者整数不一样,它与数据库保持连接的,跟ResultSet一样,不能在连接关闭之后再获取字段的道理一样。

建议:把所获取的记录中,所有Blob类型的字段在第一次读取时把它转换为byte[],这样可以在数据连接被关闭也能正常获取到数据。

评论 (0)

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
298981 bmwcc 1578919629
Java
1
https://gitee.com/yuqs/snakerflow.git
git@gitee.com:yuqs/snakerflow.git
yuqs
snakerflow
snakerflow

搜索帮助

53164aa7 5694891 3bd8fe86 5694891