我正在开发一个在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;[Ljava/lang/String;)Ljava/lang/String;
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") %>;
答案 0 :(得分:2)
根本原因是你很可能已经针对缺少方法的类的不同版本编译了一个类,而不是运行它时使用的类。
查看堆栈跟踪...如果在库中的对象上调用方法时出现异常,则在编译和运行时很可能使用库的单独版本。确保两个地方都有正确的版本。
如果在由您创建的类实例化的对象上调用方法时出现异常,那么您的构建过程似乎有问题。确保在编译时更新实际运行的类文件。