如何修复错误 "java.lang.ClassNotFoundException: sun.io.ByteToCharConverter"
How to fix the error "java.lang.ClassNotFoundException: sun.io.ByteToCharConverter"
我有一个基于 WebSphere 7.0 的项目。
目前我正在把它带到 EAP 6.4。
Java 版本是 1.6.
DB2是我使用的数据库。我之前在 websphere 中使用的相同驱动程序设置在 jboss 的模块下。数据库连接正常。但是在 Executequery 方法 运行 之后我得到了错误
JBWEB000289: Servlet InitServlet threw load() exception:
java.lang.ClassNotFoundException: sun.io.ByteToCharConverter from
我在谷歌上搜索了很多,我发现我尝试过的唯一解决方案是设置
-Ddb2.jcc.charsetDecoderEncoder=3
我在 运行time,jboss eap 6.4.
的 VM 参数下设置了这个
我还尝试将此道具设置为我在数据库执行之前设置的属性。
props.setProperty("db2.jcc.charsetDecoderEncoder", "3");
但问题依然存在。
这是我收到的错误消息。它仍然存在。
JBWEB000289: Servlet InitServlet threw load() exception:
java.lang.ClassNotFoundException: sun.io.ByteToCharConverter from
这是完整的日志:
14:41:38,389 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/cantekWeb]] (ServerService Thread Pool -- 62)
JBWEB000289: Servlet InitServlet threw load() exception: java.lang.ClassNotFoundException: sun.io.ByteToCharConverter from
[Module "deployment.cantek.ear.cantekWeb.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.6.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.6.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.6.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.6.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.6.Final-redhat-1]
at com.ibm.db2.jcc.b.r.a(r.java:157) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.d.a(d.java:986) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.fb.a(fb.java:1723) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.fb.a(fb.java:1651) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.fb.n(fb.java:570) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.fb.j(fb.java:257) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.fb.c(fb.java:57) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.s.c(s.java:42) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.wb.h(wb.java:169) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.b.id.p(id.java:1246) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.b.jd.a(jd.java:2275) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.b.jd.V(jd.java:505) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.b.jd.executeQuery(jd.java:488) [db2jcc-0.0.1.jar:]
at com.cimmy.service.data.Talep.loadSikayetKonular(Talep.java:138) [classes:]
at com.cimmy.service.servlet.InitServlet.sikayetKonulari(InitServlet.java:472) [classes:]
at com.cimmy.service.servlet.InitServlet.load(InitServlet.java:412) [classes:]
at com.cimmy.service.servlet.InitServlet.init(InitServlet.java:220) [classes:]
at javax.servlet.GenericServlet.init(GenericServlet.java:242) [jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-2.jar:1.0.2.Final-redhat-2]
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1194) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1100) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3593) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3802) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:163) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
at org.jboss.as.web.deployment.WebDeploymentService.access[=15=]0(WebDeploymentService.java:61) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
at org.jboss.as.web.deployment.WebDeploymentService.run(WebDeploymentService.java:96) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [rt.jar:1.8.0_211]
at java.util.concurrent.FutureTask.run(Unknown Source) [rt.jar:1.8.0_211]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [rt.jar:1.8.0_211]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.8.0_211]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.8.0_211]
at org.jboss.threads.JBossThread.run(JBossThread.java:122)
你不应该在你的代码中使用 sun.*
包。它们不仅不能保证在 Java 的新版本中得到延续,而且正如您所注意到的,一些 Web 容器甚至会完全阻止它们被访问。
我了解到,在这种情况下,问题可能出在驱动程序本身,而不是您自己编写的代码。然而,上述仍然适用。如果驱动程序是 open-source,您可能需要调整代码,但是,您也可以升级到更新版本的驱动程序。您可以在此处找到更多详细信息:
NoClassDefFoundError sun/io/ByteToCharConverter with InterBase JDBC driver
或此处:
https://www-01.ibm.com/support/docview.wss?uid=swg1IC74895
(分辨率建议"Fixed in DB2 V9.7 FP5 JDBC drivers.")
我做了以上所有需要的更改。但我遇到的真正问题与 JBoss EAP 6.4 JRE 设置有关。它使用的是 1.8,因为这个版本不需要 类 ,所以它抛出了这个错误。所以我对该设置进行了更改,使其看起来为 1.7。之后这个问题就解决了。
感谢您的帮助。
我有一个基于 WebSphere 7.0 的项目。 目前我正在把它带到 EAP 6.4。 Java 版本是 1.6.
DB2是我使用的数据库。我之前在 websphere 中使用的相同驱动程序设置在 jboss 的模块下。数据库连接正常。但是在 Executequery 方法 运行 之后我得到了错误
JBWEB000289: Servlet InitServlet threw load() exception:
java.lang.ClassNotFoundException: sun.io.ByteToCharConverter from
我在谷歌上搜索了很多,我发现我尝试过的唯一解决方案是设置
-Ddb2.jcc.charsetDecoderEncoder=3
我在 运行time,jboss eap 6.4.
的 VM 参数下设置了这个我还尝试将此道具设置为我在数据库执行之前设置的属性。
props.setProperty("db2.jcc.charsetDecoderEncoder", "3");
但问题依然存在。
这是我收到的错误消息。它仍然存在。
JBWEB000289: Servlet InitServlet threw load() exception:
java.lang.ClassNotFoundException: sun.io.ByteToCharConverter from
这是完整的日志:
14:41:38,389 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/cantekWeb]] (ServerService Thread Pool -- 62)
JBWEB000289: Servlet InitServlet threw load() exception: java.lang.ClassNotFoundException: sun.io.ByteToCharConverter from
[Module "deployment.cantek.ear.cantekWeb.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.6.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.6.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.6.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.6.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.6.Final-redhat-1]
at com.ibm.db2.jcc.b.r.a(r.java:157) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.d.a(d.java:986) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.fb.a(fb.java:1723) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.fb.a(fb.java:1651) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.fb.n(fb.java:570) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.fb.j(fb.java:257) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.fb.c(fb.java:57) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.s.c(s.java:42) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.c.wb.h(wb.java:169) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.b.id.p(id.java:1246) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.b.jd.a(jd.java:2275) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.b.jd.V(jd.java:505) [db2jcc-0.0.1.jar:]
at com.ibm.db2.jcc.b.jd.executeQuery(jd.java:488) [db2jcc-0.0.1.jar:]
at com.cimmy.service.data.Talep.loadSikayetKonular(Talep.java:138) [classes:]
at com.cimmy.service.servlet.InitServlet.sikayetKonulari(InitServlet.java:472) [classes:]
at com.cimmy.service.servlet.InitServlet.load(InitServlet.java:412) [classes:]
at com.cimmy.service.servlet.InitServlet.init(InitServlet.java:220) [classes:]
at javax.servlet.GenericServlet.init(GenericServlet.java:242) [jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-2.jar:1.0.2.Final-redhat-2]
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1194) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1100) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3593) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3802) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:163) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
at org.jboss.as.web.deployment.WebDeploymentService.access[=15=]0(WebDeploymentService.java:61) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
at org.jboss.as.web.deployment.WebDeploymentService.run(WebDeploymentService.java:96) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [rt.jar:1.8.0_211]
at java.util.concurrent.FutureTask.run(Unknown Source) [rt.jar:1.8.0_211]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [rt.jar:1.8.0_211]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.8.0_211]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.8.0_211]
at org.jboss.threads.JBossThread.run(JBossThread.java:122)
你不应该在你的代码中使用 sun.*
包。它们不仅不能保证在 Java 的新版本中得到延续,而且正如您所注意到的,一些 Web 容器甚至会完全阻止它们被访问。
我了解到,在这种情况下,问题可能出在驱动程序本身,而不是您自己编写的代码。然而,上述仍然适用。如果驱动程序是 open-source,您可能需要调整代码,但是,您也可以升级到更新版本的驱动程序。您可以在此处找到更多详细信息:
NoClassDefFoundError sun/io/ByteToCharConverter with InterBase JDBC driver
或此处:
https://www-01.ibm.com/support/docview.wss?uid=swg1IC74895
(分辨率建议"Fixed in DB2 V9.7 FP5 JDBC drivers.")
我做了以上所有需要的更改。但我遇到的真正问题与 JBoss EAP 6.4 JRE 设置有关。它使用的是 1.8,因为这个版本不需要 类 ,所以它抛出了这个错误。所以我对该设置进行了更改,使其看起来为 1.7。之后这个问题就解决了。
感谢您的帮助。