小编Jaz*_*azz的帖子

当方法肯定存在时,java.lang.NoSuchMethodError

我有一个基于Spring框架的Java Web应用程序,它是在SpringSource Tool Suite("STS")中构建的,以及Apache Tomcat的本地副本.我们还有一个内部生产服务器,再次运行Tomcat.

当我在我的开发机器上运行应用程序,并在Web应用程序中执行特定操作时,一切正常.但是,当我将Web应用程序部署到服务器上的Tomcat(通过maven生成的war文件),并重复上述特定操作时,我会遇到一些意外行为.当我检查服务器tomcat日志文件时,我发现了这个......

2011-11-16 19:36:45,090 [http-8280-Processor1] ERROR [attachments]  invoke - Servlet.service() for servlet attachments threw exception java.lang.NoSuchMethodError: net.wmfs.coalesce.aa.dao.MediaDao.updateAlfrescoNodeRef(Ljava/lang/Long;Ljava/lang/String;)V
at net.wmfs.coalesce.aa.service.impl.MediaServiceImpl.doFileUpload(MediaServiceImpl.java:102)
at net.wmfs.coalesce.aa.servlet.MediaServlet.doFileUpload(MediaServlet.java:83)
at net.wmfs.coalesce.aa.servlet.MediaServlet.doPost(MediaServlet.java:55)
Run Code Online (Sandbox Code Playgroud)

现在,updateAlfrescoNodeRef方法肯定存在于MediaDao类中 - 否则我的代码将无法在STS中编译...

package net.wmfs.coalesce.aa.dao;

public class MediaDao extends JdbcDaoSupport {

    public void updateAlfrescoNodeRef(final Long recordId, final String nodeRef) {
        // java code
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,方法签名是正确的.

我怀疑maven生成war文件时可能存在问题,因此我提取了war文件内容.在WEB-INF/lib文件夹中,我找到了包含MediaDao类的jar文件,并提取了其内容.然后我做了......

cat ./MediaDao.class
Run Code Online (Sandbox Code Playgroud)

现在,由于类文件是二进制文件,我大多看到了gobledegook.但是,我能够清楚地了解updateAlfrescoNodeRef方法的引用,以及该方法中String的内容.所以,这意味着该方法肯定存在.

Spring框架XML文件中的bean配置肯定是正确的,或者当我在开发机器上执行它时代码不会运行.

谷歌搜索建议服务器上存在库冲突,但所有引用的类--MediaServlet,MediaServiceImpl,MediaDao--都在主项目中(其中包含WEB-INF文件夹).虽然可以想象服务器上可能存在多个依赖项副本,但肯定只有一个主项目jar的副本.

有没有人有任何想法为什么会这样?

java spring tomcat nosuchmethoderror

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×1

nosuchmethoderror ×1

spring ×1

tomcat ×1