0

XML ファイルは、SOAP 要求 (いくつかの構成値) を介して一時的な値を格納するための一時的なキャッシュとして使用されています。複数のスレッドがこのファイルを使用するため、既に更新されている場合はファイルに書き込みたくありません。コードの最初のパスでは、キャッシュが null を返し、その後ファイルが更新されることを期待しています。ただし、InvocationTargetExceptionfinally ブロックを終了するときにエラーが発生し、プログラムが失敗します。CacheValuesnullオブジェクトが例外をスローする理由がわかりません。

public class TempCache{
     private final ReadWriteLock myLock = new ReentrantReadWriteLock();
     private final MyCache cache = XmlCache.getInstance(); //creates singleton         
                                                           //instance, but doesn't 
                                                           //set values upon 
                                                           //initialization...

     public CacheValues getCache(){
         Lock lock = myLock.readLock();
         CacheValues cv = null;

         try{
             lock.lock();
             cv = cache.getCacheValues();  //returns null on the first pass...

         }finally{
             lock.unlock();
         }                    // exception thrown here

         if(cv == null){
             refreshCache(); //submits SOAP request to set the xml cache values
         }

   ...
}
4

1 に答える 1

1

リフレクションが使用されている場合に InvocationTargetException が発生し、java.lang.reflect.Method. これは、プロキシ クラスまたは他のインターセプト、インストルメント クラスで発生する可能性があります。

呼び出し時に InvocationTargetException にラップされた例外が発生しgetCause()、スタック トレースを使用または参照して、元の例外を取得できます。

于 2013-08-26T15:39:47.980 に答える