今天在项目之外写了一个小工具,方便我们开发人员处理和修正一些数据。
其中处理的数据中,有oracle的xmltype类型,
之前有写过如何处理xmltype类型,请看这里:
java操作Oracle类型XMLType总结一:使用jdbc
java操作Oracle类型XMLType总结二:使用Mybatis
在本地跑时,使用的是apache的dbcp创建数据源,处理xmltype使用如下代码获取connection对象:
DelegatingConnection connection = (DelegatingConnection) DataSourceUtils.getConnection(dataSource) .getMetaData().getConnection(); XMLType xmltype = XMLType.createXML(connection.getDelegate(), parameter);
一切正常,但是发布到线上时,使用的是jboss创建的jndi,数据源发生了变化,具体的dataSource不是同一个类了,自然获取的connection对象也不再是DelegatingConnection,看如下代码:
Connection connection = DataSourceUtils.getConnection(dataSource).getMetaData() .getConnection(); XMLType xmltype = XMLType.createXML(connection, xml);
但是一直抛出oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection;的异常,网上查了都没有好的解决方法。
T4CConnection类又不是public的,无法像DelegatingConnection那样获取原始connection,难道无解决了么?
最后在国外的一个网站上发现,这可能是由于类冲突引起的,搜索T4CConnection类,发现确实有两个,一个在jboss目录下的oracle驱动jar中,一个在项目中我原来使用apache的dbcp时引入的oracle驱动jar中,两个版本不一致。
删除项目中的oracle驱动jar包,再次运行,终于正常了!