public class ThrowableProxy
extends java.lang.Object
implements java.io.Serializable
A proxy is used to represent a throwable that may not exist in a different class loader or JVM. When an application deserializes a ThrowableProxy, the throwable may not be set, but the throwable's information is preserved in other fields of the proxy like the message and stack trace.
TODO: Move this class to org.apache.logging.log4j.core because it is used from LogEvent.
TODO: Deserialize: Try to rebuild Throwable if the target exception is in this class loader?
Modifier and Type | Class and Description |
---|---|
(package private) static class |
ThrowableProxy.CacheEntry
Cached StackTracePackageElement and ClassLoader.
|
Modifier and Type | Field and Description |
---|---|
private static java.lang.String |
CAUSED_BY_LABEL |
private ThrowableProxy |
causeProxy |
private int |
commonElementCount |
private static ThrowableProxy[] |
EMPTY_THROWABLE_PROXY_ARRAY |
private static char |
EOL |
private static java.lang.String |
EOL_STR |
private ExtendedStackTraceElement[] |
extendedStackTrace |
private java.lang.String |
localizedMessage |
private java.lang.String |
message |
private java.lang.String |
name |
private static long |
serialVersionUID |
private static java.lang.String |
SUPPRESSED_LABEL |
private ThrowableProxy[] |
suppressedProxies |
private static java.lang.String |
TAB |
private java.lang.Throwable |
throwable |
private static java.lang.String |
WRAPPED_BY_LABEL |
Modifier | Constructor and Description |
---|---|
private |
ThrowableProxy()
For JSON and XML IO via Jackson.
|
|
ThrowableProxy(java.lang.Throwable throwable)
Constructs the wrapper for the Throwable that includes packaging data.
|
private |
ThrowableProxy(java.lang.Throwable throwable,
java.util.Set<java.lang.Throwable> visited)
Constructs the wrapper for the Throwable that includes packaging data.
|
private |
ThrowableProxy(java.lang.Throwable parent,
java.util.Stack<java.lang.Class<?>> stack,
java.util.Map<java.lang.String,ThrowableProxy.CacheEntry> map,
java.lang.Throwable cause,
java.util.Set<java.lang.Throwable> suppressedVisited,
java.util.Set<java.lang.Throwable> causeVisited)
Constructs the wrapper for a Throwable that is referenced as the cause by another Throwable.
|
Modifier and Type | Method and Description |
---|---|
private void |
appendSuppressedCount(java.lang.StringBuilder sb,
java.lang.String prefix,
int count,
TextRenderer textRenderer,
java.lang.String suffix,
java.lang.String lineSeparator) |
boolean |
equals(java.lang.Object obj) |
private void |
formatCause(java.lang.StringBuilder sb,
java.lang.String prefix,
ThrowableProxy cause,
java.util.List<java.lang.String> ignorePackages,
TextRenderer textRenderer,
java.lang.String suffix,
java.lang.String lineSeparator) |
private void |
formatElements(java.lang.StringBuilder sb,
java.lang.String prefix,
int commonCount,
java.lang.StackTraceElement[] causedTrace,
ExtendedStackTraceElement[] extStackTrace,
java.util.List<java.lang.String> ignorePackages,
TextRenderer textRenderer,
java.lang.String suffix,
java.lang.String lineSeparator) |
private void |
formatEntry(ExtendedStackTraceElement extStackTraceElement,
java.lang.StringBuilder sb,
java.lang.String prefix,
TextRenderer textRenderer,
java.lang.String suffix,
java.lang.String lineSeparator) |
private void |
formatSuppressed(java.lang.StringBuilder sb,
java.lang.String prefix,
ThrowableProxy[] suppressedProxies,
java.util.List<java.lang.String> ignorePackages,
TextRenderer textRenderer,
java.lang.String suffix,
java.lang.String lineSeparator) |
private void |
formatThrowableProxy(java.lang.StringBuilder sb,
java.lang.String prefix,
java.lang.String causeLabel,
ThrowableProxy throwableProxy,
java.util.List<java.lang.String> ignorePackages,
TextRenderer textRenderer,
java.lang.String suffix,
java.lang.String lineSeparator) |
void |
formatWrapper(java.lang.StringBuilder sb,
ThrowableProxy cause,
java.util.List<java.lang.String> ignorePackages,
java.lang.String suffix)
Formats the specified Throwable.
|
void |
formatWrapper(java.lang.StringBuilder sb,
ThrowableProxy cause,
java.util.List<java.lang.String> ignorePackages,
TextRenderer textRenderer,
java.lang.String suffix)
Formats the specified Throwable.
|
void |
formatWrapper(java.lang.StringBuilder sb,
ThrowableProxy cause,
java.util.List<java.lang.String> ignorePackages,
TextRenderer textRenderer,
java.lang.String suffix,
java.lang.String lineSeparator)
Formats the specified Throwable.
|
void |
formatWrapper(java.lang.StringBuilder sb,
ThrowableProxy cause,
java.lang.String suffix)
Formats the specified Throwable.
|
ThrowableProxy |
getCauseProxy() |
java.lang.String |
getCauseStackTraceAsString(java.util.List<java.lang.String> packages,
java.lang.String suffix)
Formats the Throwable that is the cause of this Throwable.
|
java.lang.String |
getCauseStackTraceAsString(java.util.List<java.lang.String> ignorePackages,
TextRenderer textRenderer,
java.lang.String suffix)
Formats the Throwable that is the cause of this Throwable.
|
java.lang.String |
getCauseStackTraceAsString(java.util.List<java.lang.String> ignorePackages,
TextRenderer textRenderer,
java.lang.String suffix,
java.lang.String lineSeparator)
Formats the Throwable that is the cause of this Throwable.
|
java.lang.String |
getCauseStackTraceAsString(java.lang.String suffix)
Formats the Throwable that is the cause of this Throwable.
|
int |
getCommonElementCount()
Returns the number of elements that are being omitted because they are common with the parent Throwable's stack
trace.
|
ExtendedStackTraceElement[] |
getExtendedStackTrace()
Gets the stack trace including packaging information.
|
java.lang.String |
getExtendedStackTraceAsString()
Formats the stack trace including packaging information.
|
java.lang.String |
getExtendedStackTraceAsString(java.util.List<java.lang.String> ignorePackages,
java.lang.String suffix)
Formats the stack trace including packaging information.
|
java.lang.String |
getExtendedStackTraceAsString(java.util.List<java.lang.String> ignorePackages,
TextRenderer textRenderer,
java.lang.String suffix)
Formats the stack trace including packaging information.
|
java.lang.String |
getExtendedStackTraceAsString(java.util.List<java.lang.String> ignorePackages,
TextRenderer textRenderer,
java.lang.String suffix,
java.lang.String lineSeparator)
Formats the stack trace including packaging information.
|
java.lang.String |
getExtendedStackTraceAsString(java.lang.String suffix)
Formats the stack trace including packaging information.
|
java.lang.String |
getLocalizedMessage() |
java.lang.String |
getMessage() |
java.lang.String |
getName()
Return the FQCN of the Throwable.
|
java.lang.StackTraceElement[] |
getStackTrace() |
ThrowableProxy[] |
getSuppressedProxies()
Gets proxies for suppressed exceptions.
|
java.lang.String |
getSuppressedStackTrace(java.lang.String suffix)
Formats the suppressed Throwables.
|
java.lang.Throwable |
getThrowable()
The throwable or null if this object is deserialized from XML or JSON.
|
int |
hashCode() |
private boolean |
ignoreElement(java.lang.StackTraceElement element,
java.util.List<java.lang.String> ignorePackages) |
private java.lang.Class<?> |
loadClass(java.lang.ClassLoader lastLoader,
java.lang.String className)
Loads classes not located via Reflection.getCallerClass.
|
private java.lang.Class<?> |
loadClass(java.lang.String className) |
(package private) void |
renderOn(java.lang.StringBuilder output,
TextRenderer textRenderer) |
private void |
renderSuffix(java.lang.String suffix,
java.lang.StringBuilder sb,
TextRenderer textRenderer) |
private ThrowableProxy.CacheEntry |
toCacheEntry(java.lang.StackTraceElement stackTraceElement,
java.lang.Class<?> callerClass,
boolean exact)
Construct the CacheEntry from the Class's information.
|
(package private) ExtendedStackTraceElement[] |
toExtendedStackTrace(java.util.Stack<java.lang.Class<?>> stack,
java.util.Map<java.lang.String,ThrowableProxy.CacheEntry> map,
java.lang.StackTraceElement[] rootTrace,
java.lang.StackTraceElement[] stackTrace)
Resolve all the stack entries in this stack trace that are not common with the parent.
|
java.lang.String |
toString() |
private ThrowableProxy[] |
toSuppressedProxies(java.lang.Throwable thrown,
java.util.Set<java.lang.Throwable> suppressedVisited) |
private static final java.lang.String TAB
private static final java.lang.String CAUSED_BY_LABEL
private static final java.lang.String SUPPRESSED_LABEL
private static final java.lang.String WRAPPED_BY_LABEL
private static final ThrowableProxy[] EMPTY_THROWABLE_PROXY_ARRAY
private static final char EOL
private static final java.lang.String EOL_STR
private static final long serialVersionUID
private final ThrowableProxy causeProxy
private int commonElementCount
private final ExtendedStackTraceElement[] extendedStackTrace
private final java.lang.String localizedMessage
private final java.lang.String message
private final java.lang.String name
private final ThrowableProxy[] suppressedProxies
private final transient java.lang.Throwable throwable
private ThrowableProxy()
public ThrowableProxy(java.lang.Throwable throwable)
throwable
- The Throwable to wrap, must not be null.private ThrowableProxy(java.lang.Throwable throwable, java.util.Set<java.lang.Throwable> visited)
throwable
- The Throwable to wrap, must not be null.visited
- The set of visited suppressed exceptions.private ThrowableProxy(java.lang.Throwable parent, java.util.Stack<java.lang.Class<?>> stack, java.util.Map<java.lang.String,ThrowableProxy.CacheEntry> map, java.lang.Throwable cause, java.util.Set<java.lang.Throwable> suppressedVisited, java.util.Set<java.lang.Throwable> causeVisited)
parent
- The Throwable referencing this Throwable.stack
- The Class stack.map
- The cache containing the packaging data.cause
- The Throwable to wrap.suppressedVisited
- TODOcauseVisited
- TODOpublic boolean equals(java.lang.Object obj)
equals
in class java.lang.Object
private void formatCause(java.lang.StringBuilder sb, java.lang.String prefix, ThrowableProxy cause, java.util.List<java.lang.String> ignorePackages, TextRenderer textRenderer, java.lang.String suffix, java.lang.String lineSeparator)
private void formatThrowableProxy(java.lang.StringBuilder sb, java.lang.String prefix, java.lang.String causeLabel, ThrowableProxy throwableProxy, java.util.List<java.lang.String> ignorePackages, TextRenderer textRenderer, java.lang.String suffix, java.lang.String lineSeparator)
void renderOn(java.lang.StringBuilder output, TextRenderer textRenderer)
private void formatSuppressed(java.lang.StringBuilder sb, java.lang.String prefix, ThrowableProxy[] suppressedProxies, java.util.List<java.lang.String> ignorePackages, TextRenderer textRenderer, java.lang.String suffix, java.lang.String lineSeparator)
private void formatElements(java.lang.StringBuilder sb, java.lang.String prefix, int commonCount, java.lang.StackTraceElement[] causedTrace, ExtendedStackTraceElement[] extStackTrace, java.util.List<java.lang.String> ignorePackages, TextRenderer textRenderer, java.lang.String suffix, java.lang.String lineSeparator)
private void renderSuffix(java.lang.String suffix, java.lang.StringBuilder sb, TextRenderer textRenderer)
private void appendSuppressedCount(java.lang.StringBuilder sb, java.lang.String prefix, int count, TextRenderer textRenderer, java.lang.String suffix, java.lang.String lineSeparator)
private void formatEntry(ExtendedStackTraceElement extStackTraceElement, java.lang.StringBuilder sb, java.lang.String prefix, TextRenderer textRenderer, java.lang.String suffix, java.lang.String lineSeparator)
public void formatWrapper(java.lang.StringBuilder sb, ThrowableProxy cause, java.lang.String suffix)
sb
- StringBuilder to contain the formatted Throwable.cause
- The Throwable to format.suffix
- public void formatWrapper(java.lang.StringBuilder sb, ThrowableProxy cause, java.util.List<java.lang.String> ignorePackages, java.lang.String suffix)
sb
- StringBuilder to contain the formatted Throwable.cause
- The Throwable to format.ignorePackages
- The List of packages to be suppressed from the trace.suffix
- public void formatWrapper(java.lang.StringBuilder sb, ThrowableProxy cause, java.util.List<java.lang.String> ignorePackages, TextRenderer textRenderer, java.lang.String suffix)
sb
- StringBuilder to contain the formatted Throwable.cause
- The Throwable to format.ignorePackages
- The List of packages to be suppressed from the stack trace.textRenderer
- The text renderer.suffix
- Append this to the end of each stack frame.public void formatWrapper(java.lang.StringBuilder sb, ThrowableProxy cause, java.util.List<java.lang.String> ignorePackages, TextRenderer textRenderer, java.lang.String suffix, java.lang.String lineSeparator)
sb
- StringBuilder to contain the formatted Throwable.cause
- The Throwable to format.ignorePackages
- The List of packages to be suppressed from the stack trace.textRenderer
- The text renderer.suffix
- Append this to the end of each stack frame.lineSeparator
- The end-of-line separator.public ThrowableProxy getCauseProxy()
public java.lang.String getCauseStackTraceAsString(java.lang.String suffix)
suffix
- public java.lang.String getCauseStackTraceAsString(java.util.List<java.lang.String> packages, java.lang.String suffix)
packages
- The List of packages to be suppressed from the trace.suffix
- Append this to the end of each stack frame.public java.lang.String getCauseStackTraceAsString(java.util.List<java.lang.String> ignorePackages, TextRenderer textRenderer, java.lang.String suffix)
ignorePackages
- The List of packages to be suppressed from the trace.textRenderer
- The text renderer.suffix
- Append this to the end of each stack frame.public java.lang.String getCauseStackTraceAsString(java.util.List<java.lang.String> ignorePackages, TextRenderer textRenderer, java.lang.String suffix, java.lang.String lineSeparator)
ignorePackages
- The List of packages to be suppressed from the stack trace.textRenderer
- The text renderer.suffix
- Append this to the end of each stack frame.lineSeparator
- The end-of-line separator.public int getCommonElementCount()
public ExtendedStackTraceElement[] getExtendedStackTrace()
public java.lang.String getExtendedStackTraceAsString()
public java.lang.String getExtendedStackTraceAsString(java.lang.String suffix)
suffix
- Append this to the end of each stack frame.public java.lang.String getExtendedStackTraceAsString(java.util.List<java.lang.String> ignorePackages, java.lang.String suffix)
ignorePackages
- List of packages to be ignored in the trace.suffix
- Append this to the end of each stack frame.public java.lang.String getExtendedStackTraceAsString(java.util.List<java.lang.String> ignorePackages, TextRenderer textRenderer, java.lang.String suffix)
ignorePackages
- List of packages to be ignored in the trace.textRenderer
- The message renderer.suffix
- Append this to the end of each stack frame.public java.lang.String getExtendedStackTraceAsString(java.util.List<java.lang.String> ignorePackages, TextRenderer textRenderer, java.lang.String suffix, java.lang.String lineSeparator)
ignorePackages
- List of packages to be ignored in the trace.textRenderer
- The message renderer.suffix
- Append this to the end of each stack frame.lineSeparator
- The end-of-line separator.public java.lang.String getLocalizedMessage()
public java.lang.String getMessage()
public java.lang.String getName()
public java.lang.StackTraceElement[] getStackTrace()
public ThrowableProxy[] getSuppressedProxies()
public java.lang.String getSuppressedStackTrace(java.lang.String suffix)
suffix
- public java.lang.Throwable getThrowable()
public int hashCode()
hashCode
in class java.lang.Object
private boolean ignoreElement(java.lang.StackTraceElement element, java.util.List<java.lang.String> ignorePackages)
private java.lang.Class<?> loadClass(java.lang.ClassLoader lastLoader, java.lang.String className)
lastLoader
- The ClassLoader that loaded the Class that called this Class.className
- The name of the Class.private java.lang.Class<?> loadClass(java.lang.String className)
private ThrowableProxy.CacheEntry toCacheEntry(java.lang.StackTraceElement stackTraceElement, java.lang.Class<?> callerClass, boolean exact)
stackTraceElement
- The stack trace elementcallerClass
- The Class.exact
- True if the class was obtained via Reflection.getCallerClass.ExtendedStackTraceElement[] toExtendedStackTrace(java.util.Stack<java.lang.Class<?>> stack, java.util.Map<java.lang.String,ThrowableProxy.CacheEntry> map, java.lang.StackTraceElement[] rootTrace, java.lang.StackTraceElement[] stackTrace)
stack
- The callers Class stack.map
- The cache of CacheEntry objects.rootTrace
- The first stack trace resolve or null.stackTrace
- The stack trace being resolved.public java.lang.String toString()
toString
in class java.lang.Object
private ThrowableProxy[] toSuppressedProxies(java.lang.Throwable thrown, java.util.Set<java.lang.Throwable> suppressedVisited)