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.
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 下面了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。