The return type is incompatible with JspSourceDependent.getDependants():JasperException问题分析与解决方法

Linux下基于JSP的报表集成到项目中后,显示不出来,查看tomcat的日志,有如下报错信息:

The return type is incompatible with JspSourceDependent.getDependants()

Stacktrace:] with root cause

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: [33] in the generated java file: [/home/programs/apache-tomcat-PowerSupervise/work/Catalina/localhost/PowerSupervise/org/apache/jsp/reportPages/jspReport/fileRecordReport_jsp.java]

大致就是生成的JSP对应的java文件33行报错,解析错误,找到对应的java文件中相应代码,如下:

package org.apache.jsp.reportPages.jspReport;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class fileRecordReport_jsp extends org.apache.jasper.runtime.HttpJspBase
   <strong> implements org.apache.jasper.runtime.JspSourceDependent</strong> {

  private static final javax.servlet.jsp.JspFactory _jspxFactory =
          javax.servlet.jsp.JspFactory.getDefaultFactory();

  private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;

  static {
    _jspx_dependants = new java.util.HashMap<java.lang.String,java.lang.Long>(1);
    _jspx_dependants.put("/WEB-INF/reportConfig/runqianReport4.tld", Long.valueOf(1435203638000L));
  }

  private org.apache.jasper.runtime.TagHandlerPool _005fjspx_005ftagPool_005freport_005fhtml_0026_005fwidth_005fseparator_005fselectText_005fscrollWidth_005fscrollHeight_005fscale_005freportFileName_005fparams_005fneedScroll_005fname_005ffuncBarLocation_005fexceptionPage_005fnobody;

  private javax.el.ExpressionFactory _el_expressionfactory;
  private org.apache.tomcat.InstanceManager _jsp_instancemanager;
<strong>
  public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
    return _jspx_dependants;
  }</strong>

网上搜了搜,大部分原因是由于这个JspSourceDependent类冲突引起的,不过找遍所有WEB-INF/lib和tomcat下的lib以及jre中下有关jsp解析的jar包,除tomcat的lib下,没发现有类似版本不同重复的jar包,于是在集成开发环境ECLIPSE中打入这个类,居然能找到这个类,提示自动引入后,如下:

然后ctrl键盘按住,点击这个类,终于找到了这个类所在的jar包及路径了,如下:

居然在jetty-server-8.1.8.jar里也有此类,怪不得呢,于是删除了此类,报表恢复正常了。

网上也如下情况出现此问题:

1、jsper-runtime.jar存在冲突,删除即可。

2、在升级tomcat后的项目中,后出现此问题,解决办法是新建jsp文件,把老jsp文件的内容copy过来,就解决了。不过这是网友的解决方法,针对这种情况,个人之见,根本原因还是jar包版本与旧的已生成的_jsp.java类中的类存在冲突,只需把tomcat的work目录下的东西删除重启tomcat用新的环境重新解析JSP即可。

JasperException问题与解决办法,the return type is incompatible with,JspSourceDependent.getDependants(),jsper.jar冲突,JSP解析异常

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-01 05:54:06

The return type is incompatible with JspSourceDependent.getDependants():JasperException问题分析与解决方法的相关文章

variable &#39;&#39; of type &#39;&#39; referenced from scope &#39;&#39;, but it is not defined 异常解决方法

最近在做一个功能,通过拼接lamdba表达试来实现的功能,但测试时总是出现一个错误,如下图所示,网上也找不到答案,差点都放弃了.. 如上图图所示,我是想通过一个lamdba表达式(上图的IdField属性)来拼接一个新的lamdba表达式(上图的GetById方法中的exp),当然上面只是演示效果,并不是我实际功能的代码. 总是出现异常,我还特意创建另一个lamdba变量exp2,表达式跟exp一样,然后用exp2就不出错,exp跟exp2我比对过,都是一模一样的,真是百思不得其姐. 当然后面我

C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析与解决方法

对于C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析,目前本人分析两种情况,如下: 情况一: 借鉴麒麟.NET的类型初始值设定项引发异常文章!!!写的很详细,大家可以看一看! 其实麒麟.NET的这篇文章主要讲解分析了静态成员的方面,总的说就是:类型初始化或访问类型的静态成员时,都会对类中的其他静态成员进行初始化,如果有静态构造函数的话,一并执行静态构造函数.在这过程中所引发的异常我就直接借鉴麒麟.NET的例

Type.GetType()在跨程序集反射时返回null的解决方法

在开发中,经常会遇到这种情况,在程序集A.dll中需要反射程序集B.dll中的类型.如果使用稍有不慎,就会产生运行时错误.例如使用Type.GetType("BNameSpace.ClassName")在程序集A.dll获取程序集B.dll中的类型,就会返回Null. 关于跨程序集的反射,有两点需要注意: 1.如果使用typeof,编译能通过,则跨程序集的反射一定可以正常运行.可以说,typeof是支持强类型的.比如 1 Type supType = typeof(BNameSpace

c语言,warning: return type of &#39;main&#39; is not `int&#39;怎么解决?

////警告可以忽略,但如果严格点的话 #include<stdio.h> #include<math.h> int main(int argc, char *arg[]) ///标准C主函数原型 {     float x,y;     printf("Enter x:");     scanf("%f",&x);     if(x<0){         y=pow(x,5)+2*x+1/x;     }     else{

【c++错误】类的语法错误 error c2533:constructors not allowed a return type(构造函数不允许返回一个类型)

今天编写类的程序的时候不小心把类后的分号忘写了,就出现上面的错误提示. 顺便复习下类的正确格式: class 类名 { public: //习惯上将公有类型放在前面,便于阅读 ……(外部接口) protected: …… (保护型成员) private: ……(私有成员) }; //这里的分号千万不能忘写,不然会出现错误error: 2533:constructors not allowed a return type

Mapper method &#39;com.autoyol.mapper.trans.AccountLogMapper.getTotalIncomByMemNoLastest attempted to return null from a method with a primitive return type (int).解决方法

1.打开日志输出,降低日志级别. <AppenderRef ref="console" level="trace"></AppenderRef> 否则看不到报错.. 2.调整mysql语句,不能使用order by limit之类的 <!-- SELECT IFNULL(amt,1) FROM account_log WHERE mem_no=#{value} AND income_type != 4 ORDER BY id DESC

c++11: trailing return type in functions(函数返回类型后置)

In C++03, the return type of a function template cannot be generalized if the return type relies on those of the template arguments. Here is an example, mul(T a, T b) is a function template that calculates the product of a and b. Arguments a and b ar

instance method &#39;*****&#39; not found (return type defaults to &#39;id&#39;)

博文转载至 http://blog.csdn.net/cerastes/article/details/38025801 return type defaultsnot foundiOSwarning 在一个类里面引用另外一个类的实例方法,警告方法没有找到. 原因.h文件没有应用,只在头文件中申明了@class #import相应的.h文件就可以 instance method '*****' not found (return type defaults to 'id')

attempted to return null from a method with a primitive return type (int).

错误信息: attempted to return null from a method with a primitive return type (int). 错误原因:实际查询sql并没有这个值,出现空值,就会报这个异常. 错误sql(发生问题): select sum(id) from post where post.author = ? 正确sql(解决问题): select IFNULL(sum(id),0) from post where post.author = ? 关键在于使用