JFinal升级到1.6出现NullPointerException? 400 报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

JFinal升级到1.6出现NullPointerException? 400 报错

爱吃鱼的程序员 2020-06-02 11:35:30 24

JFinal升级到1.6出现NullPointerException? 400 报错

JFinal升级到1.6,Druid升级到1.0.4
session 过期后会删除数据库的记录,然后就NullPointerException
出错代码在
com.jfinal.plugin.activerecord.Db.update(Db.java:290)
config.close(conn);


public static int update(String configName, String sql, Object... paras) {
		Config config = DbKit.getConfig(configName);
		Connection conn = null;
		try {
			conn = config.getConnection();
			return update(config, conn, sql, paras);
		} catch (Exception e) {
			throw new ActiveRecordException(e);
		} finally {
			config.close(conn);
		}
	}




Tomcat 异常信息:

type Exception report

message Filtered request failed.

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Filtered request failed.
	org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:384)
	org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
root cause

java.lang.NullPointerException
	com.jfinal.plugin.activerecord.Db.update(Db.java:290)
	com.power.oj.core.model.SessionModel.deleteSession(SessionModel.java:43)
	com.power.oj.core.service.SessionService.deleteSession(SessionService.java:132)
	com.power.oj.shiro.OjSessionListener.onExpiration(OjSessionListener.java:17)
	org.apache.shiro.session.mgt.AbstractNativeSessionManager.notifyExpiration(AbstractNativeSessionManager.java:168)
	org.apache.shiro.session.mgt.AbstractValidatingSessionManager.onExpiration(AbstractValidatingSessionManager.java:157)
	org.apache.shiro.web.session.mgt.DefaultWebSessionManager.onExpiration(DefaultWebSessionManager.java:269)
	org.apache.shiro.session.mgt.AbstractValidatingSessionManager.validate(AbstractValidatingSessionManager.java:145)
	org.apache.shiro.session.mgt.AbstractValidatingSessionManager.doGetSession(AbstractValidatingSessionManager.java:120)
	org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupSession(AbstractNativeSessionManager.java:108)
	org.apache.shiro.session.mgt.AbstractNativeSessionManager.getSession(AbstractNativeSessionManager.java:100)
	org.apache.shiro.mgt.SessionsSecurityManager.getSession(SessionsSecurityManager.java:125)
	org.apache.shiro.mgt.DefaultSecurityManager.resolveContextSession(DefaultSecurityManager.java:456)
	org.apache.shiro.mgt.DefaultSecurityManager.resolveSession(DefaultSecurityManager.java:442)
	org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:338)
	org.apache.shiro.subject.Subject$Builder.buildSubject(Subject.java:846)
	org.apache.shiro.web.subject.WebSubject$Builder.buildWebSubject(WebSubject.java:148)
	org.apache.shiro.web.servlet.AbstractShiroFilter.createSubject(AbstractShiroFilter.java:292)
	org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:359)
	org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.50 logs.



SQL druid Java 应用服务中间件 Apache 数据库
分享到
取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-02 11:35:43

    引用来自“魔神翼”的评论

    public int deleteSession(String sessionID)
      {
        return Db.update("DELETE FROM session WHERE sessionId=?", sessionID);
      }


    这个方法本来是要去调用 Db.update(String sql, Object.... paras) 的,但是 Db.update(String configName, String sql, Object... paras) 被匹配到了,建议你先 Db.update(sql, (Object) sessionID) 暂时处理一下,回头我将后面方法名改成  Db.pro.update(...) 这样就完全杜绝了此问题

    ######好的。JFinal社区支持真是快O(∩_∩)O######

    你使用了多数据源没有?  应该是你的  configName 找不到对应的 Config 对象

    ######应该是public static int update(String sql, Object... paras) 和public static int update(String configName, String sql, Object... paras)混淆了######贴出那段代码来######没有使用多数据源######

    public int deleteSession(String sessionID)
      {
        return Db.update("DELETE FROM session WHERE sessionId=?", sessionID);
      }



    ######

    此问题已经修复,可以去jfinal.com 官方网站下载最新版本了: http://jfinal.com ,注意,新的方案,对于多数据源来说 api 需要这样: Db.pro.find(...) , 即,所有多数据源操作 api 放在 Db.pro 下面了

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程