今天遇到个很奇怪的问题,报错为:严重: Servlet.service() for servlet default threw exception
java.lang.IllegalAccessException: Class com.googlecode.jsonplugin.JSONWriter can not access a member of class org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper with modifiers “public”
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
以下是我的实体Bean,应该说是很简单的一个应用,查询员工考勤,怎么就会报错了呢,在上面的错误中很明显是JSONWriter转换不了要转换的对象造成的,但是在我下面的实体Bean中明明很简单,不可能会有错的。在每一个get前加上 @JSON(serialize = false)问题依旧,这就很没道理了,偶想想到返回的数据中除了实体bean需要转化外还有一些参数,比如page页面等,马上找到了我的action控制类,果然如此:问题就出现在其中的getSignLogService啦,由于用eclipse生成get/set方法时没有注意,把这个接口也生成了get/set方法,JSONWriter自然无法将一个接口转换为实体对象了,问题解决。
/**.
* 公共基础对象实体包
*
* 公共基础对象实体包,存放如HR,ERP,CRM中的公共实体部分对象
*
*/
package com.lenxeon.extjs.bean.comm;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Version;
import com.googlecode.jsonplugin.annotations.JSON;
/**************************************************.
* FileName:SignLog.java
* Version: 1.00
* Author: lenxeon
* Date: 2009-12-25
* Last modify Date: 2009-12-25
* Function: 员工考勤信息对象实体封装类
* CopyRight (c) zendlab.com Company 2009-2012 All rights reserved
**************************************************/
@Entity()
@Table(name = "signLog")
public class SignLog implements Serializable {
/**.
*序列化id
*/
private static final long serialVersionUID = 1L;
/**.
*记录ID
*/
private int id;
/**.
* 员工工号
*/
private int emID;
/**.
* 上班时间
*/
private Date logInTime;
/**.
* 下班时间
*/
private Date logOutTime;
/**.
* 版本控制
*/
private int revision;
/**.
* 构造函数
*/
public SignLog() {
}
/**.
* 构造函数
*/
public SignLog(int id) {
super();
this.id = id;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getEmID() {
return emID;
}
public void setEmID(int emID) {
this.emID = emID;
}
@JSON(format="yyyy-MM-dd' 'HH:mm:ss")
public Date getLogInTime() {
return logInTime;
}
public void setLogInTime(Date logInTime) {
this.logInTime = logInTime;
}
@JSON(format="yyyy-MM-dd' 'HH:mm:ss")
public Date getLogOutTime() {
return logOutTime;
}
public void setLogOutTime(Date logOutTime) {
this.logOutTime = logOutTime;
}
@Version
public int getRevision() {
return revision;
}
public void setRevision(int revision) {
this.revision = revision;
}
}
控制器中的代码:
private static final long serialVersionUID = 1L;
@Resource(name = "signLogServiceImpl")
private SignLogService signLogService;
private List signLogs;
private SignLog signLog;
public SignLogService getSignLogService() {
return signLogService;
}
public void setSignLogService(SignLogService signLogService) {
this.signLogService = signLogService;
}
public List getSignLogs() {
return signLogs;
}
public void setSignLogs(List signLogs) {
this.signLogs = signLogs;
}
@JSON(format="yyyy-MM-dd' 'HH:mm:ss")
public SignLog getSignLog() {
return signLog;
}
public void setSignLog(SignLog signLog) {
this.signLog = signLog;
}
@Override
public int getLimit() {
return super.getLimit();
}
@Override
public int getStart() {
return super.getStart();
}
@Override
public String getMsg() {
return super.getMsg();
}
@Override
public Boolean getSuccess() {
return super.getSuccess();
}
@Override
public long getTotal() {
return super.getTotal();
}
/**.
* 考勤列表查询
* @return String
* @throws Exception
*/
public final String signLogList() throws Exception {
....
}