簡體   English   中英

令人困惑的java.lang.NoSuchMethodError

[英]Confusing java.lang.NoSuchMethodError

我正在開發在WAS應用程序服務器上運行的Java EE應用程序。 我也在使用Hibernate。 JRE版本7

這是我得到的錯誤:

[12/1/14 9:04:37:199 SAST] 00000155 ServletWrappe E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0014E: Uncaught service() exception root cause /operations/enrollstudents.jsp: com.ibm.websphere.servlet.error.ServletErrorReport: java.lang.NoSuchMethodError: com/ictworx/json/JsonHelper.getJson(Ljava/util/List&#59;[Ljava/lang/String&#59;)Ljava/lang/String&#59;
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:695)
at com.ibm._jsp._enrollstudents._jspService(_enrollstudents.java:187)

在上面的代碼的最后一行中,下划線是什么意思? 他們來自哪里。 如果單擊_enrollstudents.java:187,它會顯示“找不到com.ibm._jsp._enrollstudents的源”,這很有意義,因為我的enrollstudents.jsp頁面不在com.ibm軟件包中。 為什么會認為它在那里?

因此,根據到目前為止的發現,這似乎應該是由於我發送的參數與我正在調用的方法的參數不匹配而引起的。 但是我三重檢查,他們這樣做。

我正在發送java.util.List,然后發送2個字符串。 我方法的參數是Collection,然后是String的變量。 這是JsonHelper類中的方法:

public static String getJson(Collection<?> objects, String ...fields) {
    //actual method implementation here, which has always worked.
}

這是調用該方法的頁面上的相關代碼:

<%@page import="com.companyname.json.JsonHelper"%>
<%

//irrelevant stuff here

query = sess.createQuery("FROM JobLevel WHERE active = :active ORDER BY lower(jobLevel) ASC");
query.setBoolean("active", true);
List<JobLevel> job_levels = (List<JobLevel>) query.list();

 %>
<!DOCTYPE html>
<html>
    <head>
<!--irrelevant stuff here-->
    <script type="text/javascript">
        var job_levels = <%= JsonHelper.getJson(job_levels, "uid", "jobLevel") %>;
        var job_functions = <%= JsonHelper.getJson(job_functions, "uid", "jobFunction") %>;

根本原因是,與運行該類時所使用的方法不同,您很可能已針對缺少該方法的該類的其他版本編譯了一個類。

查看堆棧跟蹤...如果在庫中的對象上調用方法時出現異常,則很可能在編譯和運行時使用庫的不同版本。 確保兩個地方的版本都正確。

如果在對您所創建的類實例化的對象上調用方法時出現異常,則說明您的構建過程似乎有問題。 確保在編譯時實際運行的類文件已更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM