日期:2014-05-17  浏览次数:20742 次

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配置文件贴出来