0

Eclipse で Spring アプリケーションをデバッグしていると、長い例外チェーンが発生します。たとえば、私は

ファイル [...Tester.xml] で定義された名前 '...' の Bean の作成中にエラーが発生しました: プロパティ値の設定中にエラーが発生しました。ネストされた例外は org.springframework.beans.PropertyBatchUpdateException; です。ネストされた PropertyAccessExceptions (1) は次のとおりです。
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: プロパティ '...' が例外をスローしました。ネストされた例外は java.lang.IllegalArgumentException: ...

等々。Spring 内の例外を伴う複数のスタック。これは興味深いものではありません。以下のどこかに私の例外があるはずですが、Spring はそれらを表示しません。

そして、例外をクリックして、いつものように問題の場所に移動することはできません。

すべての例外を出力するSpringの言い方は?

アップデート

以下は完全な出力です。発生した場所がIllegalArgumentException切り捨てられた可能性があることがわかります。

スレッド「メイン」での例外 org.springframework.beans.factory.BeanCreationException: ファイルで定義された名前 'mybean' を持つ Bean の作成中にエラーが発生しました [D:\mypath\myconfig.xml]: プロパティ値の設定中にエラーが発生しました。ネストされた例外は org.springframework.beans.PropertyBatchUpdateException; です。ネストされた PropertyAccessExceptions (1) は次のとおりです。
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: プロパティ '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: プロパティ 'target.partner' が例外をスローしました。ネストされた例外は java.lang.IllegalArgumentException: 明示的なコンストラクターの不正なフレーム長 1 です
    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

複数の例外が存在する可能性があるため、特定の例外のスタック トレースを調べるには、 PropertyBatchUpdateExceptionand 呼び出しをキャッチする必要があります。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 に答える