You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by vg...@apache.org on 2005/09/27 00:33:04 UTC

svn commit: r291771 - /cocoon/trunk/src/java/org/apache/cocoon/util/location/LocatedException.java

Author: vgritsenko
Date: Mon Sep 26 15:32:55 2005
New Revision: 291771

URL: http://svn.apache.org/viewcvs?rev=291771&view=rev
Log:
remove reflection: trunk is java 1.4 only.

Modified:
    cocoon/trunk/src/java/org/apache/cocoon/util/location/LocatedException.java

Modified: cocoon/trunk/src/java/org/apache/cocoon/util/location/LocatedException.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/util/location/LocatedException.java?rev=291771&r1=291770&r2=291771&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/util/location/LocatedException.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/util/location/LocatedException.java Mon Sep 26 15:32:55 2005
@@ -1,12 +1,12 @@
 /*
  * Copyright 2005 The Apache Software Foundation.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -15,7 +15,6 @@
  */
 package org.apache.cocoon.util.location;
 
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -23,69 +22,53 @@
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.apache.commons.lang.exception.NestableException;
 
-
 /**
  * A cascading and located <code>Exception</code>. It is also {@link MultiLocatable} to easily build
  * stack traces.
- * 
+ *
  * @since 2.1.8
  * @version $Id$
  */
-public class LocatedException extends NestableException implements LocatableException, MultiLocatable {
+public class LocatedException extends NestableException
+                              implements LocatableException, MultiLocatable {
 
     private List locations;
 
     public LocatedException(String message) {
         this(message, null, null);
     }
-    
+
     public LocatedException(String message, Throwable cause) {
         this(message, cause, null);
     }
-    
+
     public LocatedException(String message, Location location) {
         this(message, null, location);
     }
-    
+
     public LocatedException(String message, Throwable cause, Location location) {
         super(message, cause);
         ensureCauseChainIsSet(cause);
         addCauseLocations(this, cause);
         addLocation(location);
     }
-    
-    private static Method INIT_CAUSE_METHOD = null;
-    static {
-        try {
-            INIT_CAUSE_METHOD = Throwable.class.getMethod("initCause", new Class[] { Throwable.class} );
-        } catch(Exception e) {
-            // JDK < 1.4: ignore
-        }
-    }
-    
+
     /**
-     * Crawl the cause chain and ensure causes are properly set using "initCause" on JDK >= 1.4.
-     * This is needed because some exceptions (e.g. SAXException) don't have a getCause() that is
-     * used to print stacktraces.
+     * Crawl the cause chain and ensure causes are properly set using {@ link Throwable#initCause}.
+     * This is needed because some exceptions (e.g. SAXException) don't have a {@ link Throwable#getCause}
+     * that is used to print stacktraces.
      */
     public static void ensureCauseChainIsSet(Throwable thr) {
-        if (INIT_CAUSE_METHOD == null)
-            return;
-        
         // Loop either until null or encountering exceptions that use this method.
-        while(thr != null && !(thr instanceof LocatedRuntimeException) && !(thr instanceof LocatedException)) {
+        while (thr != null && !(thr instanceof LocatedRuntimeException) && !(thr instanceof LocatedException)) {
             Throwable parent = ExceptionUtils.getCause(thr);
-            if (parent != null) {
-                try {
-                    INIT_CAUSE_METHOD.invoke(thr, new Object[]{ parent });
-                } catch(Exception e) {
-                    // can happen if parent already set on exception
-                }
+            if (thr.getCause() == null && parent != null) {
+                thr.initCause(parent);
             }
             thr = parent;
         }
     }
-    
+
     /**
      * Add to the location stack all locations of an exception chain. This allows to have all possible
      * location information in the stacktrace, as some exceptions like SAXParseException don't output
@@ -96,7 +79,7 @@
      * <p>
      * This method is static as a convenience for {@link LocatedRuntimeException other implementations}
      * of locatable exceptions.
-     * 
+     *
      * @param self the current locatable exception
      * @param cause a cause of <code>self</code>
      */
@@ -136,10 +119,10 @@
     /**
      * Standard way of building the message of a {@link LocatableException}, as a Java-like
      * stack trace of locations.
-     * 
+     *
      * @param message the exception's message, given by <code>super.getMessage()</code> (can be null)
      * @param locations the location list (can be null)
-     * 
+     *
      * @return the message, or <code>null</code> no message and locations were given.
      */
     public static String getMessage(String message, List locations) {
@@ -158,7 +141,7 @@
     public String getMessage() {
         return getMessage(super.getMessage(), locations);
     }
-    
+
     public void addLocation(Location loc) {
         if (LocationUtils.isUnknown(loc))
             return;