0

当我在 Eclipse 中调试 Spring 应用程序时,我得到了很长的异常链。例如,我有

创建文件 [...Tester.xml] 中定义的名称为“...”的 bean 时出错:设置属性值时出错;嵌套异常是 org.springframework.beans.PropertyBatchUpdateException;嵌套的 PropertyAccessExceptions (1) 是:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property '...' 抛出异常;嵌套异常是 java.lang.IllegalArgumentException: ...

等等。Spring内部的多个堆栈异常,这很无趣。下面的某个地方应该是我的例外,但 Spring 没有显示它们。

而且我无法像往常一样单击异常并导航到问题位置。

怎么说Spring输出所有异常?

更新

下面是完整的输出。可以看出,发生的地方IllegalArgumentException很可能被截断了。

线程“主”org.springframework.beans.factory.BeanCreationException 中的异常:创建文件 [D:\mypath\myconfig.xml] 中定义的名称为“mybean”的 bean 时出错:设置属性值时出错;嵌套异常是 org.springframework.beans.PropertyBatchUpdateException;嵌套的 PropertyAccessExceptions (1) 是:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'myproperty' 抛出异常;嵌套异常是 java.lang.IllegalArgumentException:我的异常消息
    在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1361)
    在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)
    在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
    在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
    在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
    在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
    在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
    在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
    在 org.springframework.context.support.FileSystemXmlApplicationContext.(FileSystemXmlApplicationContext.java:140)
    在 org.springframework.context.support.FileSystemXmlApplicationContext.(FileSystemXmlApplicationContext.java:84)
    在 springtests.SpringRunner.main(SpringRunner.java:8)
引起:org.springframework.beans.PropertyBatchUpdateException;嵌套的 PropertyAccessExceptions (1) 是:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'target.partner' 抛出异常;嵌套异常是 java.lang.IllegalArgumentException: Illegal frame length 1 in显式构造函数
    在 org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:102)
    在 org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58)
    在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1358)
    ... 13 更多
4

1 回答 1

1

由于可能存在多个异常,因此您需要捕获PropertyBatchUpdateException并调用getPropertyAccessExceptions()以检查特定异常的堆栈跟踪。

编辑

其实我不太确定这里发生了什么

这是PropertyBatchUpdateExceptionprintStackTrace方法:

public void printStackTrace(PrintWriter pw) {
        synchronized (pw) {
            pw.println(getClass().getName() + "; nested PropertyAccessException details (" +
                    getExceptionCount() + ") are:");
            for (int i = 0; i < this.propertyAccessExceptions.length; i++) {
                pw.println("PropertyAccessException " + (i + 1) + ":");
                this.propertyAccessExceptions[i].printStackTrace(pw);
            }
        }
    }

它应该包括嵌套的堆栈跟踪。您使用的是最新版本的 Spring 吗?

编辑:

我可以建议的最好的方法是在调试模式下运行,然后在处设置断点AbstractAutowireCapableBeanFactory.java:1361并查看发生了什么。

于 2012-11-02T13:36:31.910 回答