求救:org.springframework.dao.DataAccessResourceFailureException: Could not create Oracle LOB
下面是报错信息:
org.springframework.dao.DataAccessResourceFailureException: Could not create Oracle LOB; nested exception is java.lang.ClassCastException: null java.lang.ClassCastException at oracle.jdbc.driver.OracleConnection.unwrapCompletely(OracleConnection.java:5090) at oracle.jdbc.driver.OracleConnection.physicalConnectionWithin(OracleConnection.java:5141) at oracle.sql.BLOB.createTemporary(BLOB.java:776) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.prepareLob(OracleLobHandler.java:378) at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.createLob(OracleLobHandler.java:328) at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.setBlobAsBinaryStream(OracleLobHandler.java:238) at com.norteksoft.dms.dao.impl.DocumentStorageDAOJDBC$3.setValues(DocumentStorageDAOJDBC.java:80) at org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback.doInPreparedStatement(AbstractLobCreatingPreparedStatementCallback.java:71) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:460) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:489) at com.norteksoft.dms.dao.impl.DocumentStorageDAOJDBC.saveFileData(DocumentStorageDAOJDBC.java:79) at com.norteksoft.dms.service.impl.DmsBasicServiceImpl.saveExperienceDocument(DmsBasicServiceImpl.java:116) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:292) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:155) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:122) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:57) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174) at $Proxy108.saveExperienceDocument(Unknown Source) at com.norteksoft.dms.web.actions.manage.ContentInputAction.execute(ContentInputAction.java:87) at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) at com.norteksoft.util.web.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:41) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6356) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118) at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635) at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170) Cookies: JSESSIONID=[HcB1KAf8fpFo1Drn3xl9m1aLd61RL11zpKOgQur7tsI3iVTpX63P!-520485179] ermermerm=[1540097838]
相关的程序段如下:
public void saveFileData(final ExperienceDocument document) {
try {
this.getFileData(document.getId());
getJdbcTemplate().execute(
"UPDATE DMS_DocumentStorage SET FileData = ? WHERE Data_ID = ? ",
new AbstractLobCreatingPreparedStatementCallback(this.lobHandler) {
protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws
SQLException {
lobCreator.setBlobAsBinaryStream(ps, 1,
document.getFileData(),
(int) document.getSize());
ps.setLong(2, document.getId().longValue());
}
}
);
}
catch (IncorrectResultSizeDataAccessException ie) {
getJdbcTemplate().execute(
"INSERT INTO DMS_DocumentStorage (Data_ID, FileData) VALUES (?, ?)",
new AbstractLobCreatingPreparedStatementCallback(this.lobHandler) {
protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws
SQLException {
ps.setLong(1, document.getId().longValue());
lobCreator.setBlobAsBinaryStream(ps, 2,
document.getFileData(),
(int) document.getSize());
}
}
);
}
}
程序中的this.lobHandler = org.springframework.jdbc.support.lob.OracleLobHandler,错误定位如文中红色字体行,但是我测试发现document.getFileData()并不为null。
如何解决问题,祈求各位大侠给予援手,感激流涕!