【发布时间】:2011-10-04 15:30:02
【问题描述】:
我的网站在 Tomcat 上运行。当我尝试访问我的一个页面进行状态检查时,它会检查特定的 JAR 文件。在 Red Hat 5 上,但不是在 Windows 上,我收到以下错误:
java.lang.ClassCastException: LoggingPasshashInfo cannot be cast to PasshashInfo
我从第三方那里获得了这个 JAR,并且正在使用它。根据 Apache 的 tatus 页面,RH 设置在 Tomcat 版本 7.0.22 和 JVM 版本 1.6.0_27-b07 上。 Windows 在 Tomcat 7.0.19 和 JVM 1.6.0_26-b03 上。 Red Hat 的 Tomcat 在尝试修复此问题的过程中从 6.0.33 升级。
无论如何,我对此有点陌生,除了让设置看起来尽可能相似之外,我不知道如何解决这个问题。任何帮助都可以,如果我未能分享任何重要细节,请告诉我。重申一下,我正在使用的 JAR 是一个黑盒子。
完全错误:
Java.lang.ClassCastException: com.adobe.adept.fulfillment.test.LoggingPasshashInfo cannot be cast to com.adobe.adept.fulfillment.PasshashInfo
at com.adobe.adept.fulfillment.servlet.Fulfill.<clinit>(Fulfill.java:130)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:127)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:836)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
【问题讨论】:
-
你能发布完整的堆栈跟踪吗?
-
我猜测包含这两个类中的一个或另一个的 JAR 文件在两个系统上是不同的。或者您可能有两个包含相同类的 JAR 文件,并且它们在类路径中的顺序基本上是相反的。
-
在 Daniel 的带领下:1) 这个库是多平台的吗? 2)如果不是,您是否确保仅打包特定于操作系统的 jar?
-
我最初在 Windows 上下载了单个 JAR,并首先让它在那里工作。然后我通过本地网络将它转移到 RH。这不会弄乱 JAR 的内容,对吗?这两个类都应该在那个 JAR 中,尽管 com.adobe.adept.fulfillment.servlet.Fulfill 不是。
-
Paolo,我刚看到你的评论。这绝对是我必须研究的事情,因为......好吧,我有点认为它会起作用,因为我使用的其他 JAR 在 Unix 和 Windows 之间似乎没有问题。