首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何纠正Java LinkageError异常?

如何纠正Java LinkageError异常?
EN

Stack Overflow用户
提问于 2011-05-10 03:39:12
回答 2查看 8.8K关注 0票数 3

我正在开发一个使用Java servlet的WebSphere 6.1应用程序。在我的servlet中,我定义了一个序列化版本ID 1L。在部署和运行我的应用程序时,我收到了以下类型的LinkageError (来自服务器日志):

代码语言:javascript
复制
[5/9/11 15:14:26:868 EDT] 0000001c WebApp        
E   [Servlet Error]-[ManageRecordsConsumerServlet]: java.lang.Exception: 
java.lang.LinkageError: LinkageError while defining class: 
<redacted>.docindexupdate.batch.servlet.ManageRecordsConsumerServlet
Could not be defined due to: (<redacted>/docindexupdate/batch/servlet
/ManageRecordsConsumerServlet) class name must be a string at offset=2074
This is often caused by having a class defined at multiple
locations within the classloader hierarchy.  Other potential causes
include compiling against an older or newer version of the class
that has an incompatible method signature.

我不确定问题出在哪里。在定义串行版本的uid之前,我已经看到了这一点,并认为通过定义并保持一致,将来对类文件的更新将会成功运行。在编译或部署到服务器期间没有错误。有没有可能servlet的旧版本被缓存在WebSphere实例上的某个地方(我现在只在我的开发机器上部署)?

这个

代码语言:javascript
复制
 class name must be a string at offset=2074

line也是令人困惑的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-10 03:47:50

我怀疑您有一个jar正在加载到两个不同的类加载器中。我的意思是,您的websphere服务器在启动时加载该jar,或者有一个包含该jar的批注目录。此外,您正在部署的EAR的库中也包含该jar。两者在运行时可能会发生冲突

我建议找出哪个jar ManageRecordsConsumerServlet属于哪个库,并将其从您的EAR库或Websphere认可的库中删除(最好是您的EAR库)。

票数 5
EN

Stack Overflow用户

发布于 2011-05-10 03:52:40

它可能是版本控制,但我不这么认为。

当两个类由不同的类加载器加载时,通常会抛出ClassNotFoundException。

当一个类通过网络传递/从磁盘缓存加载时,通常会抛出VersionMismatchException。

当使用具有不同方法签名的类时,会抛出NoSuchMethodError或类似的方法。

我认为这个案例是一个损坏的类文件。可能在缓存或JAR中损坏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5941626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档