最近项目部署weblogic 122.1.3,报了一个错误。
java.lang.ClassCastException: weblogic.jdbc.wrapper.WrapperSQLXML_oracle_xdb_XMLType cannot be cast to oracle.sql.OPAQUE
大概意思是类型强制转化失败,在tomcat,was上是没问题的,在weblogic 12c报错,通过搜索 ,取消了 weblogic连接池 ,高级- 取消“包装数据类型”复选框
然后错误 就变成 了 oracle.xdb.XMLType cannot be cast to oracle.sql.OPAQUE
然后发现 oracle.xdb.XMLType 是 oracle.sql.OPAQUE 子类,立刻蒙圈了。又仔细的看了一下代码
OPAQUE op = (OPAQUE) rs.getObject(names[0]);
感觉有点不靠谱,因为这一种全靠jdbc自己判断类型的,判断的什么,全部都不知道。所以改为
OracleResultSet ors = (OracleResultSet) rs;
OPAQUE op = ors.getOPAQUE(names[0]);
问题解决。
其实主要原因是ojdbc6 ,突然升级到ojdbc8(weblogic 12.2.1.3自带的)引起的,之前想把ojdbc8给降级成为ojdbc6,对weblogic不熟悉,搞了半天没搞定