当前位置: 代码迷 >> Java Web开发 >> getSession().createQuery()发生java.lang.reflect.InvocationTargetException异常
  详细解决方案

getSession().createQuery()发生java.lang.reflect.InvocationTargetException异常

热度:7940   发布时间:2013-02-25 21:13:58.0
getSession().createQuery()发生java.lang.reflect.InvocationTargetException错误
我刚学SSH的,所以不知道什么原因
Spring和Hibernate已经配置好了,我新建一个Junit测试Spring和hibernate工作情况,发现一切正常
Java code
ApplicationContext ctx = new FileSystemXmlApplicationContext("XXXXX.xml");        EmpService abccc = (EmpService)ctx.getBean("empService");        System.out.println(abccc.validLogin("123","123"));

现在加入了struts,在其中一个action中发现错误
Java code
int result = empService.validLogin(getUserName(), getPassWord());

这句话有错误,错误内容是
Java code
java.lang.reflect.InvocationTargetException    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)    java.lang.reflect.Method.invoke(Method.java:597)

我设置了断点跟踪,发现是在DAOImpl文件中发生的一个错误
Java code
        log.debug("finding MgrTable instance by Name And Passworld");        try {            String queryString = "from MgrTable as model where model.empName"+                    "= ? and model.empPass= ?";            Query queryObject = getSession().createQuery(queryString);            queryObject.setParameter(0, name);            queryObject.setParameter(1, passWorld);            if (queryObject.list().size()>0) {                return (MgrTable)queryObject.list().get(0);            }else {                return null;            }                    } catch (RuntimeException re) {            log.error("find by Name And Passworld failed", re);            throw re;        }

其中的Query queryObject = getSession().createQuery(queryString);
执行getSession()一切正常,但是执行createQuery()函数的时候发现发生了错误,很奇怪的是为什么单元测试一切正常,但是通过web执行后却发生错误。高手给点思路,本人太菜了

------解决方案--------------------------------------------------------
这个异常,一般是由于调用Mathod类的invoke()方法,该方法所代表的指定方法抛出异常时,或者调用Constructor类的newInstance()方法,该方法所代表的底层构造方法抛出异常时,由java.lang.reflect.InvocationTargetExceptio异常包装后作为新的异常抛出而产生,默认异常信息是NULL。
所以我怀疑是使用反射的方式调用构造函数时,由于数据或者其他问题造成了构造方法抛出异常,以InvocationTargetException异常的方式显示出来。
问题出在:
java.lang.reflect.InvocationTargetException
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
仔细检查一下,应该能解决
------解决方案--------------------------------------------------------
可能是参数传递问题~
------解决方案--------------------------------------------------------
单元测试的时候你用FileSystemXmlApplicationContext容器 谁知道你现在是怎么做的
------解决方案--------------------------------------------------------
最好是把你的spring配置文件贴出来
  相关解决方案