This is an automated email from the ASF dual-hosted git repository.

pkarwasz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 2f430add5a645bd263e0f345aeae1eb8a0f52d93
Author: Gary Gregory <[email protected]>
AuthorDate: Sat Feb 5 15:09:08 2022 -0500

    Log4j 1.2 bridge missing some ThrowableInformation constructors.
    
    Conflicts:
        
log4j-1.2-api/src/main/java/org/apache/log4j/spi/ThrowableInformation.java
---
 .../org/apache/log4j/spi/ThrowableInformation.java | 46 +++++++++++++++++-----
 src/changes/changes.xml                            |  3 ++
 2 files changed, 39 insertions(+), 10 deletions(-)

diff --git 
a/log4j-1.2-api/src/main/java/org/apache/log4j/spi/ThrowableInformation.java 
b/log4j-1.2-api/src/main/java/org/apache/log4j/spi/ThrowableInformation.java
index e9c9776..de81a1a 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/spi/ThrowableInformation.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/spi/ThrowableInformation.java
@@ -16,29 +16,42 @@
  */
 package org.apache.log4j.spi;
 
-import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.List;
 
+import org.apache.log4j.Category;
 import org.apache.logging.log4j.core.util.Throwables;
 
 /**
- * Class Description goes here.
+ * Log4j's internal representation of throwables.
  */
 public class ThrowableInformation implements java.io.Serializable {
 
     static final long serialVersionUID = -4748765566864322735L;
 
     private transient Throwable throwable;
-    private final Method toStringList;
+    private transient Category category;
+    private String[] rep;
+    private Method toStringList;
 
-    @SuppressWarnings("unchecked")
-    public
-    ThrowableInformation(Throwable throwable) {
+    /**
+     * Constructs new instance.
+     *
+     * @since 1.2.15
+     * @param r String representation of throwable.
+     */
+    public ThrowableInformation(final String[] r) {
+        this.rep = rep != null ? r.clone() : null;
+    }
+
+    /**
+     * Constructs new instance.
+     */
+    public ThrowableInformation(Throwable throwable) {
         this.throwable = throwable;
         Method method = null;
         try {
-            Class throwables = 
Class.forName("org.apache.logging.log4j.core.util.Throwables");
+            final Class<?> throwables = 
Class.forName("org.apache.logging.log4j.core.util.Throwables");
             method = throwables.getMethod("toStringList", Throwable.class);
         } catch (ClassNotFoundException | NoSuchMethodException ex) {
             // Ignore the exception if Log4j-core is not present.
@@ -46,6 +59,19 @@ public class ThrowableInformation implements 
java.io.Serializable {
         this.toStringList = method;
     }
 
+    /**
+     * Constructs a new instance.
+     *
+     * @param throwable throwable, may not be null.
+     * @param category category used to obtain ThrowableRenderer, may be null.
+     * @since 1.2.16
+     */
+    public ThrowableInformation(final Throwable throwable, final Category 
category) {
+        this(throwable);
+        this.category = category;
+        this.rep = null;
+    }
+
     public
     Throwable getThrowable() {
         return throwable;
@@ -55,15 +81,15 @@ public class ThrowableInformation implements 
java.io.Serializable {
         if (toStringList != null && throwable != null) {
             try {
                 @SuppressWarnings("unchecked")
+                final
                 List<String> elements = (List<String>) 
toStringList.invoke(null, throwable);
                 if (elements != null) {
                     return elements.toArray(new String[0]);
                 }
-            } catch (IllegalAccessException | InvocationTargetException ex) {
+            } catch (final ReflectiveOperationException ex) {
                 // Ignore the exception.
             }
         }
-        return null;
+        return rep;
     }
 }
-
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 276677f..7d288e7 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -328,6 +328,9 @@
       <action dev="ggregory" type="fix" due-to="Gary Gregory">
         Log4j 1.2 bridge missing DefaultThrowableRenderer.
       </action>
+      <action dev="ggregory" type="fix" due-to="Gary Gregory">
+        Log4j 1.2 bridge missing some ThrowableInformation constructors.
+      </action>
       <action dev="ggregory" type="fix">
         JndiManager reverts to 2.17.0 behavior: Read the system property for 
each call.
       </action>

Reply via email to