面对java.lang.NoSuchMethodError: oracle.i18n.text.converter.CharacterConverter.toOracleStringWithReplacement异常

问题描述 投票:0回答:2

在 eks 中运行我的应用程序时看到以下异常(在我的本地它能够连接到 oracle 并保留数据库)。

Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: oracle.i18n.text.converter.CharacterConverter.toOracleStringWithReplacement([CI[BI[I)[B
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)
    at com.mycompany.Main.main(Main.java:34)
    Caused by: java.lang.NoSuchMethodError: oracle.i18n.text.converter.CharacterConverter.toOracleStringWithReplacement([CI[BI[I)[B
    at oracle.sql.converter.I18CharacterConvertersWrapper.toOracleStringWithReplacement(I18CharacterConvertersWrapper.java:107)
    at oracle.sql.CharacterSetWithConverter.convertWithReplacement(CharacterSetWithConverter.java:203)
    at oracle.jdbc.driver.DBConversion.javaCharsToCHARBytes(DBConversion.java:773)
    at oracle.jdbc.driver.DBConversion.javaCharsToCHARBytes(DBConversion.java:744)
    at oracle.jdbc.driver.DBConversion.javaCharsToCHARBytes(DBConversion.java:712)
    at oracle.jdbc.driver.PhysicalConnection.javaCharsToCHARBytes(PhysicalConnection.java:6021)
    at oracle.jdbc.driver.StringBinder.bind(OraclePreparedStatement.java:18826)
    at oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:3243)
    at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:2661)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3772)
    at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1343)
    at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3887)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1079)
    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:498)
    at oracle.ucp.jdbc.proxy.StatementProxyFactory.invoke(StatementProxyFactory.java:367)
    at oracle.ucp.jdbc.proxy.PreparedStatementProxyFactory.invoke(PreparedStatementProxyFactory.java:194)
    at com.sun.proxy.$Proxy33.execute(Unknown Source)
    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:498)
    at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)
    at com.sun.proxy.$Proxy29.execute(Unknown Source)
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47)
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)
    at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
    at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
    at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
    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:498)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)
    at com.sun.proxy.$Proxy24.update(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:287)
    at com.mycompany.dao.DaoImpl.update(DaoImpl.java:55)
    at com.mycompany.Service.insertOrUpdate(Service.java:146)
    at com.mycompany.Service.lambda$insertUpdateOracle$1(Service.java:134)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
    at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
    at com.mycompany.Service.insertUpdateOracle(Service.java:131)
    at com.mycompany.Service.lambda$update$0(Service.java:37)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
    at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
    at com.mycompany.Service.update(Service.java:33)
    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:498)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1912)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1854)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782)
    ... 12 common frames omitted.

奇怪的是我什至在本地看不到 oracle.i18n.text.converter.CharacterConverter。

我正在使用 ojdbc8:12.2.0.1。 有人能说出这个问题的原因吗?

java oracle prepared-statement amazon-eks spring-mybatis
2个回答
2
投票

我遇到了类似的错误问题

oracle.i18n.text.converter.CharacterConverterOGS.getInstance(int)
,并找到了oracle文档的链接。

One Strange thing is I cant even see oracle.i18n.text.converter.CharacterConverter in my local.
也许某些依赖项正在使用有问题的方法。

解决方案: 发现我把ojdbc14.jar升级到ojdbc7.jar所以我又降级到ojdbc14.jar就可以了。希望这有帮助。您可能还想看看this doc.


0
投票

我的原因是因为 orai18n.jar 的版本不兼容,它的版本是 11.2.0.4.0,而我使用的是 ojdbc8.jar 实现版本:12.2.0.1.0,数据库版本是 19c

正如 Karan 指出的那样,该类:

oracle.i18n.text.converter.CharacterConverter
不在 ojdbc jar 本身中,而是在依赖的 jar 之一中 -> orai18n.jar

所以解决方案是使用这个 jar orai18n.jar 的兼容版本

© www.soinside.com 2019 - 2024. All rights reserved.