在WebLogic上发布
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1);
BufferedOutputStream bos = new BufferedOutputStream(blob.getBinaryOutputStream());
bos.write(define.getBytes("UTF-8"));
抛出异常:
java.lang.ClassCastException: weblogic.jdbc.wrapper.Blob_oracle_sql_BLOB
经查,通过weblogic连接池获得的连接所抽出的blob对象是weblogic封装过的OracleThinBlob,而不是oracle.sql.BLOB。
用反射机制来把抽出的blob封装到一个流中可以避免异常
Object obj = rs.getBlob(1);
Class clazz = obj.getClass();
Method method = clazz.getMethod("getBinaryOutputStream", new Class[]{});
OutputStream os = (OutputStream)method.invoke(obj, new Object[]{});
BufferedOutputStream bos = new BufferedOutputStream(os);
bos.write(define.getBytes("UTF-8"));
这样写既避免了异常,也免除了对oracle驱动jar的依赖。
本文探讨了在使用WebLogic发布时遇到的ClassCastException异常问题,特别是通过Weblogic连接池获取的Blob对象为weblogic封装的OracleThinBlob而非标准的oracle.sql.BLOB。文章提供了解决方案,通过反射机制将抽取的Blob封装到流中,以避免异常并减少对oracle驱动jar的依赖。

7367

被折叠的 条评论
为什么被折叠?



