This is an automated email from the ASF dual-hosted git repository.
orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new f9048eb0a82 (chores) consolidate duplicated code for printing the
stack traces
f9048eb0a82 is described below
commit f9048eb0a82262e42cd234fe07c653e8159cc8a6
Author: Otavio Rodolfo Piske <[email protected]>
AuthorDate: Fri Aug 23 10:00:05 2024 +0200
(chores) consolidate duplicated code for printing the stack traces
---
.../camel/converter/crypto/PGPDataFormatTest.java | 20 +++-------
.../camel/component/http/HeaderFilteringTest.java | 8 +---
.../jetty/JettyHttpEndpointDisconnectTest.java | 13 +++----
.../ncd/NoClassDefFoundErrorWrapExceptionTest.java | 10 +----
.../knative/http/KnativeHttpConsumer.java | 33 +++++++---------
.../health/CamelMicroProfileHealthHelper.java | 10 ++---
.../netty/http/DefaultNettyHttpBinding.java | 9 ++---
.../platform/http/main/MainHttpServer.java | 8 +---
.../http/vertx/VertxPlatformHttpSupport.java | 9 ++---
.../undertow/DefaultUndertowHttpBinding.java | 9 ++---
.../component/xmlsecurity/XmlSignatureTest.java | 16 ++------
.../camel/impl/console/HealthDevConsole.java | 15 +++-----
.../camel/impl/console/RouteControllerConsole.java | 13 ++-----
.../apache/camel/impl/console/RouteDevConsole.java | 15 +++-----
.../NoClassDefFoundErrorWrapExceptionTest.java | 10 +----
.../camel/management/mbean/ManagedCamelHealth.java | 12 +-----
.../mbean/ManagedSupervisingRouteController.java | 8 +---
.../org/apache/camel/support/ExceptionHelper.java | 44 ++++++++++++++++++++++
.../org/apache/camel/support/LanguageHelper.java | 13 +------
.../org/apache/camel/support/MessageHelper.java | 11 ++----
.../processor/DefaultExchangeFormatter.java | 8 ++--
21 files changed, 114 insertions(+), 180 deletions(-)
diff --git
a/components/camel-crypto-pgp/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatTest.java
b/components/camel-crypto-pgp/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatTest.java
index 2917a09c3a3..0f03b442477 100644
---
a/components/camel-crypto-pgp/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatTest.java
+++
b/components/camel-crypto-pgp/src/test/java/org/apache/camel/converter/crypto/PGPDataFormatTest.java
@@ -22,8 +22,6 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.UnsupportedEncodingException;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Arrays;
@@ -38,6 +36,7 @@ import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.support.ExceptionHelper;
import org.apache.camel.util.IOHelper;
import org.bouncycastle.bcpg.BCPGOutputStream;
import org.bouncycastle.bcpg.CompressionAlgorithmTags;
@@ -804,17 +803,17 @@ public class PGPDataFormatTest extends
AbstractPGPDataFormatTest {
Exception e = (Exception)
mock.getExchanges().get(0).getProperty(Exchange.EXCEPTION_CAUGHT);
assertNotNull(e, "Expected excpetion " + cl.getName() + " missing");
if (e.getClass() != cl) {
- String stackTrace = getStrackTrace(e);
+ String stackTrace = ExceptionHelper.stackTraceToString(e);
fail("Exception " + cl.getName() + " excpected, but was " +
e.getClass().getName() + ": " + stackTrace);
}
if (expectedMessagePart != null) {
if (e.getMessage() == null) {
- fail("Expected excption does not contain a message. Stack
trace: " + getStrackTrace(e));
+ fail("Expected excption does not contain a message. Stack
trace: " + ExceptionHelper.stackTraceToString(e));
} else {
if (!e.getMessage().contains(expectedMessagePart)) {
fail("Expected excption message does not contain a
expected message part " + expectedMessagePart
+ ". Stack trace: "
- + getStrackTrace(e));
+ + ExceptionHelper.stackTraceToString(e));
}
}
}
@@ -824,18 +823,9 @@ public class PGPDataFormatTest extends
AbstractPGPDataFormatTest {
if (expectedCauseClass != cause.getClass()) {
fail("Cause exception " + expectedCauseClass.getName() + "
expected, but was " + cause.getClass().getName()
+ ": "
- + getStrackTrace(e));
+ + ExceptionHelper.stackTraceToString(e));
}
}
}
- public static String getStrackTrace(Exception e) throws
UnsupportedEncodingException {
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- PrintWriter w = new PrintWriter(os);
- e.printStackTrace(w);
- w.close();
- String stackTrace = new String(os.toByteArray(), "UTF-8");
- return stackTrace;
- }
-
}
diff --git
a/components/camel-http/src/test/java/org/apache/camel/component/http/HeaderFilteringTest.java
b/components/camel-http/src/test/java/org/apache/camel/component/http/HeaderFilteringTest.java
index 611387fec5c..c0279264aa5 100644
---
a/components/camel-http/src/test/java/org/apache/camel/component/http/HeaderFilteringTest.java
+++
b/components/camel-http/src/test/java/org/apache/camel/component/http/HeaderFilteringTest.java
@@ -19,8 +19,6 @@ package org.apache.camel.component.http;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.charset.StandardCharsets;
@@ -34,6 +32,7 @@ import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.spi.RestConfiguration;
import org.apache.camel.support.DefaultExchange;
import org.apache.camel.support.DefaultMessage;
+import org.apache.camel.support.ExceptionHelper;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -103,10 +102,7 @@ public class HeaderFilteringTest {
exchange.sendResponseHeaders(200, 0);
} catch (final AssertionError error) {
- final StringWriter out = new StringWriter();
- error.printStackTrace(new PrintWriter(out));
-
- final String failure = out.toString();
+ final String failure =
ExceptionHelper.stackTraceToString(error);
final byte[] failureBytes =
failure.getBytes(StandardCharsets.UTF_8);
exchange.sendResponseHeaders(500, failureBytes.length);
responseBody.write(failureBytes);
diff --git
a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpEndpointDisconnectTest.java
b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpEndpointDisconnectTest.java
index c278541bd14..41cb338d569 100644
---
a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpEndpointDisconnectTest.java
+++
b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpEndpointDisconnectTest.java
@@ -16,11 +16,9 @@
*/
package org.apache.camel.component.jetty;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jetty12.JettyHttpComponent12;
+import org.apache.camel.support.ExceptionHelper;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.parallel.Isolated;
@@ -45,11 +43,10 @@ public class JettyHttpEndpointDisconnectTest extends
BaseJettyTest {
if (t == null) {
t = new Throwable("Unable to find connector
creation");
}
- StringWriter sw = new StringWriter();
- try (PrintWriter pw = new PrintWriter(sw)) {
- t.printStackTrace(pw);
- }
- sb.append(key).append(": ").append(sw);
+
+ final String stackTrace =
ExceptionHelper.stackTraceToString(t);
+
+ sb.append(key).append(": ").append(stackTrace);
}
return sb.toString();
});
diff --git
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/error/ncd/NoClassDefFoundErrorWrapExceptionTest.java
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/error/ncd/NoClassDefFoundErrorWrapExceptionTest.java
index f1d48d61b3b..2c8e8d8c122 100644
---
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/error/ncd/NoClassDefFoundErrorWrapExceptionTest.java
+++
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/error/ncd/NoClassDefFoundErrorWrapExceptionTest.java
@@ -16,14 +16,12 @@
*/
package org.apache.camel.component.jms.issues.error.ncd;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
import org.apache.camel.CamelContext;
import org.apache.camel.ConsumerTemplate;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.AbstractJMSTest;
+import org.apache.camel.support.ExceptionHelper;
import org.apache.camel.test.infra.core.CamelContextExtension;
import org.apache.camel.test.infra.core.DefaultCamelContextExtension;
import org.junit.jupiter.api.BeforeEach;
@@ -49,11 +47,7 @@ public class NoClassDefFoundErrorWrapExceptionTest extends
AbstractJMSTest {
template.requestBody("activemq:NoClassDefFoundErrorWrapExceptionTest?transferException=true",
"Hello World");
fail("Should throw exception");
} catch (Exception e) {
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
- e.printStackTrace(pw);
-
- String s = sw.toString();
+ final String s = ExceptionHelper.stackTraceToString(e);
assertTrue(s.contains("java.lang.LinkageError"));
assertTrue(s.contains("Cannot do this"));
assertTrue(s.contains("org.apache.camel.component.jms.issues.error.ncd.ProcessorFail.process"));
diff --git
a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumer.java
b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumer.java
index c77df64579f..a8ee6485f61 100644
---
a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumer.java
+++
b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumer.java
@@ -16,8 +16,6 @@
*/
package org.apache.camel.component.knative.http;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.util.Locale;
@@ -45,9 +43,9 @@ import org.apache.camel.component.knative.spi.KnativeResource;
import org.apache.camel.component.knative.spi.KnativeTransportConfiguration;
import org.apache.camel.spi.HeaderFilterStrategy;
import org.apache.camel.support.DefaultConsumer;
+import org.apache.camel.support.ExceptionHelper;
import org.apache.camel.support.ExchangeHelper;
import org.apache.camel.support.MessageHelper;
-import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -331,23 +329,18 @@ public class KnativeHttpConsumer extends DefaultConsumer {
if (exception != null) {
// we failed due an exception so print it as plain text
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
-
- try {
- exception.printStackTrace(pw);
-
- // the body should then be the stacktrace
- body = sw.toString().getBytes(StandardCharsets.UTF_8);
- // force content type to be text/plain as that is what the
stacktrace is
- message.setHeader(Exchange.CONTENT_TYPE, "text/plain");
-
- // and mark the exception as failure handled, as we handled it
by returning
- // it as the response
- ExchangeHelper.setFailureHandled(message.getExchange());
- } finally {
- IOHelper.close(pw, sw);
- }
+
+ final String stackTrace =
ExceptionHelper.stackTraceToString(exception);
+
+ // the body should then be the stacktrace
+ body = stackTrace.getBytes(StandardCharsets.UTF_8);
+ // force content type to be text/plain as that is what the
stacktrace is
+ message.setHeader(Exchange.CONTENT_TYPE, "text/plain");
+
+ // and mark the exception as failure handled, as we handled it by
returning
+ // it as the response
+ ExchangeHelper.setFailureHandled(message.getExchange());
+
}
return body != null
diff --git
a/components/camel-microprofile/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthHelper.java
b/components/camel-microprofile/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthHelper.java
index aa86fbdc428..4ab85f35432 100644
---
a/components/camel-microprofile/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthHelper.java
+++
b/components/camel-microprofile/camel-microprofile-health/src/main/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthHelper.java
@@ -16,12 +16,11 @@
*/
package org.apache.camel.microprofile.health;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.util.Set;
import org.apache.camel.health.HealthCheck;
import org.apache.camel.health.HealthCheck.Result;
+import org.apache.camel.support.ExceptionHelper;
import org.eclipse.microprofile.health.HealthCheckResponseBuilder;
/**
@@ -61,11 +60,8 @@ final class CamelMicroProfileHealthHelper {
result.getError().ifPresent(error -> {
builder.withData("error.message", error.getMessage());
- final StringWriter stackTraceWriter = new StringWriter();
- try (final PrintWriter pw = new PrintWriter(stackTraceWriter,
true)) {
- error.printStackTrace(pw);
- builder.withData("error.stacktrace",
stackTraceWriter.toString());
- }
+ final String s = ExceptionHelper.stackTraceToString(error);
+ builder.withData("error.stacktrace", s);
});
}
}
diff --git
a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
index 0b99bd8e22e..2139fcf27f6 100644
---
a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
+++
b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
@@ -19,8 +19,6 @@ package org.apache.camel.component.netty.http;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.ObjectOutputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URLDecoder;
@@ -52,6 +50,7 @@ import org.apache.camel.RuntimeCamelException;
import org.apache.camel.TypeConverter;
import org.apache.camel.component.netty.NettyConverter;
import org.apache.camel.spi.HeaderFilterStrategy;
+import org.apache.camel.support.ExceptionHelper;
import org.apache.camel.support.ExchangeHelper;
import org.apache.camel.support.MessageHelper;
import org.apache.camel.support.ObjectHelper;
@@ -461,12 +460,10 @@ public class DefaultNettyHttpBinding implements
NettyHttpBinding, Cloneable {
message.setHeader(NettyHttpConstants.CONTENT_TYPE,
NettyHttpConstants.CONTENT_TYPE_JAVA_SERIALIZED_OBJECT);
} else {
// we failed due an exception so print it as plain text
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
- cause.printStackTrace(pw);
+ final String stackTrace =
ExceptionHelper.stackTraceToString(cause);
// the body should then be the stacktrace
- body = NettyConverter.toByteBuffer(sw.toString().getBytes());
+ body = NettyConverter.toByteBuffer(stackTrace.getBytes());
// force content type to be text/plain as that is what the
stacktrace is
message.setHeader(NettyHttpConstants.CONTENT_TYPE,
"text/plain");
}
diff --git
a/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/MainHttpServer.java
b/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/MainHttpServer.java
index d53aa48d101..94a03fcf682 100644
---
a/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/MainHttpServer.java
+++
b/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/MainHttpServer.java
@@ -19,8 +19,6 @@ package org.apache.camel.component.platform.http.main;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.ArrayList;
@@ -71,6 +69,7 @@ import org.apache.camel.spi.ReloadStrategy;
import org.apache.camel.spi.Resource;
import org.apache.camel.spi.ResourceLoader;
import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.ExceptionHelper;
import org.apache.camel.support.LoggerHelper;
import org.apache.camel.support.PluginHelper;
import org.apache.camel.support.ResolverHelper;
@@ -743,10 +742,7 @@ public class MainHttpServer extends ServiceSupport
implements CamelContextAware,
}
private static String errorStackTrace(Throwable e) {
- StringWriter sw = new StringWriter();
- e.printStackTrace(new PrintWriter(sw));
-
- String trace = sw.toString();
+ String trace = ExceptionHelper.stackTraceToString(e);
// because the stacktrace is printed in json we need to make it safe
trace = trace.replace('"', '\'');
trace = trace.replace('\t', ' ');
diff --git
a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpSupport.java
b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpSupport.java
index 96c8d893d0b..6ef9d71e958 100644
---
a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpSupport.java
+++
b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpSupport.java
@@ -17,8 +17,6 @@
package org.apache.camel.component.platform.http.vertx;
import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.Iterator;
@@ -42,6 +40,7 @@ import org.apache.camel.Message;
import org.apache.camel.NoTypeConversionAvailableException;
import org.apache.camel.TypeConverter;
import org.apache.camel.spi.HeaderFilterStrategy;
+import org.apache.camel.support.ExceptionHelper;
import org.apache.camel.support.ExchangeHelper;
import org.apache.camel.support.MessageHelper;
import org.apache.camel.support.ObjectHelper;
@@ -115,12 +114,10 @@ public final class VertxPlatformHttpSupport {
message.setHeader(Exchange.CONTENT_TYPE,
DEFAULT_CONTENT_TYPE_ON_EXCEPTION);
} else {
// we failed due an exception so print it as plain text
- final StringWriter sw = new StringWriter();
- final PrintWriter pw = new PrintWriter(sw);
- exception.printStackTrace(pw);
+ final String stackTrace =
ExceptionHelper.stackTraceToString(exception);
// the body should then be the stacktrace
- body =
ByteBuffer.wrap(sw.toString().getBytes(StandardCharsets.UTF_8));
+ body =
ByteBuffer.wrap(stackTrace.getBytes(StandardCharsets.UTF_8));
// force content type to be text/plain as that is what the
stacktrace is
message.setHeader(Exchange.CONTENT_TYPE,
DEFAULT_CONTENT_TYPE_ON_EXCEPTION);
}
diff --git
a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java
b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java
index 1c411f399f3..114a9e95be6 100644
---
a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java
+++
b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java
@@ -19,8 +19,6 @@ package org.apache.camel.component.undertow;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.ReadableByteChannel;
@@ -51,6 +49,7 @@ import org.apache.camel.attachment.AttachmentMessage;
import org.apache.camel.attachment.DefaultAttachment;
import org.apache.camel.spi.HeaderFilterStrategy;
import org.apache.camel.support.DefaultMessage;
+import org.apache.camel.support.ExceptionHelper;
import org.apache.camel.support.ExchangeHelper;
import org.apache.camel.support.MessageHelper;
import org.apache.camel.support.ObjectHelper;
@@ -372,12 +371,10 @@ public class DefaultUndertowHttpBinding implements
UndertowHttpBinding {
message.setHeader(UndertowConstants.CONTENT_TYPE,
"application/x-java-serialized-object");
} else {
// we failed due an exception so print it as plain text
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
- exception.printStackTrace(pw);
+ final String stackTrace =
ExceptionHelper.stackTraceToString(exception);
// the body should then be the stacktrace
- body = ByteBuffer.wrap(sw.toString().getBytes());
+ body = ByteBuffer.wrap(stackTrace.getBytes());
// force content type to be text/plain as that is what the
stacktrace is
message.setHeader(UndertowConstants.CONTENT_TYPE,
"text/plain");
}
diff --git
a/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/XmlSignatureTest.java
b/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/XmlSignatureTest.java
index 52386b6424a..a48395a6f7b 100644
---
a/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/XmlSignatureTest.java
+++
b/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/XmlSignatureTest.java
@@ -16,10 +16,8 @@
*/
package org.apache.camel.component.xmlsecurity;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.security.Key;
@@ -99,6 +97,7 @@ import
org.apache.camel.component.xmlsecurity.util.ValidationFailedHandlerIgnore
import
org.apache.camel.component.xmlsecurity.util.XmlSignature2Message2MessageWithTimestampProperty;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.spi.Registry;
+import org.apache.camel.support.ExceptionHelper;
import org.apache.camel.support.processor.validation.SchemaValidationException;
import org.apache.camel.test.junit5.CamelTestSupport;
import org.junit.jupiter.api.Disabled;
@@ -1341,7 +1340,7 @@ public class XmlSignatureTest extends CamelTestSupport {
Exception e = (Exception)
mock.getExchanges().get(0).getProperty(Exchange.EXCEPTION_CAUGHT);
assertNotNull(e, "Expected excpetion " + cl.getName() + " missing");
if (e.getClass() != cl) {
- String stackTrace = getStrackTrace(e);
+ String stackTrace = ExceptionHelper.stackTraceToString(e);
fail("Exception " + cl.getName() + " excpected, but was " +
e.getClass().getName() + ": " + stackTrace);
}
if (expectedMessage != null) {
@@ -1353,20 +1352,11 @@ public class XmlSignatureTest extends CamelTestSupport {
if (expectedCauseClass != cause.getClass()) {
fail("Cause exception " + expectedCauseClass.getName() + "
expected, but was " + cause.getClass().getName()
+ ": "
- + getStrackTrace(e));
+ + ExceptionHelper.stackTraceToString(e));
}
}
}
- private static String getStrackTrace(Exception e) throws
UnsupportedEncodingException {
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- PrintWriter w = new PrintWriter(os);
- e.printStackTrace(w);
- w.close();
- String stackTrace = new String(os.toByteArray(), "UTF-8");
- return stackTrace;
- }
-
private MockEndpoint setupExceptionMock() {
MockEndpoint mock = getMockEndpoint("mock:exception");
mock.setExpectedMessageCount(1);
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/HealthDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/HealthDevConsole.java
index b71b44322e6..1ec502746cc 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/HealthDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/HealthDevConsole.java
@@ -16,8 +16,6 @@
*/
package org.apache.camel.impl.console;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
@@ -26,6 +24,7 @@ import java.util.stream.Stream;
import org.apache.camel.health.HealthCheck;
import org.apache.camel.health.HealthCheckHelper;
import org.apache.camel.spi.annotations.DevConsole;
+import org.apache.camel.support.ExceptionHelper;
import org.apache.camel.support.console.AbstractDevConsole;
import org.apache.camel.util.json.JsonArray;
import org.apache.camel.util.json.JsonObject;
@@ -61,11 +60,10 @@ public class HealthDevConsole extends AbstractDevConsole {
if ("full".equals(exposureLevel)) {
if (res.getError().isPresent()) {
Throwable cause = res.getError().get();
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
- cause.printStackTrace(pw);
+ final String stackTrace =
ExceptionHelper.stackTraceToString(cause);
+
sb.append("\n\n");
- sb.append(sw);
+ sb.append(stackTrace);
sb.append("\n\n");
}
}
@@ -116,10 +114,7 @@ public class HealthDevConsole extends AbstractDevConsole {
Throwable cause = res.getError().orElse(null);
if (cause != null) {
JsonArray arr2 = new JsonArray();
- StringWriter writer = new StringWriter();
- cause.printStackTrace(new PrintWriter(writer));
- writer.flush();
- String trace = writer.toString();
+ final String trace =
ExceptionHelper.stackTraceToString(cause);
jo.put("stackTrace", arr2);
Collections.addAll(arr2, trace.split("\n"));
}
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteControllerConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteControllerConsole.java
index 2aa91770f0a..6555d865ca4 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteControllerConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteControllerConsole.java
@@ -16,8 +16,6 @@
*/
package org.apache.camel.impl.console;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -30,6 +28,7 @@ import org.apache.camel.Route;
import org.apache.camel.spi.RouteController;
import org.apache.camel.spi.SupervisingRouteController;
import org.apache.camel.spi.annotations.DevConsole;
+import org.apache.camel.support.ExceptionHelper;
import org.apache.camel.support.console.AbstractDevConsole;
import org.apache.camel.util.TimeUtils;
import org.apache.camel.util.URISupport;
@@ -112,10 +111,7 @@ public class RouteControllerConsole extends
AbstractDevConsole {
if (includeError && cause != null) {
error = cause.getMessage();
if (includeStacktrace) {
- StringWriter writer = new StringWriter();
- cause.printStackTrace(new PrintWriter(writer));
- writer.flush();
- stacktrace = writer.toString();
+ stacktrace = ExceptionHelper.stackTraceToString(cause);
}
}
@@ -226,10 +222,7 @@ public class RouteControllerConsole extends
AbstractDevConsole {
jo.put("error", Jsoner.escape(error));
if (includeStacktrace) {
JsonArray arr2 = new JsonArray();
- StringWriter writer = new StringWriter();
- cause.printStackTrace(new PrintWriter(writer));
- writer.flush();
- String trace = writer.toString();
+ final String trace =
ExceptionHelper.stackTraceToString(cause);
jo.put("stackTrace", arr2);
Collections.addAll(arr2, trace.split("\n"));
}
diff --git
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
index 57df94a720f..749c4060f99 100644
---
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
+++
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java
@@ -16,8 +16,6 @@
*/
package org.apache.camel.impl.console;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -35,6 +33,7 @@ import org.apache.camel.api.management.ManagedCamelContext;
import org.apache.camel.api.management.mbean.ManagedProcessorMBean;
import org.apache.camel.api.management.mbean.ManagedRouteMBean;
import org.apache.camel.spi.annotations.DevConsole;
+import org.apache.camel.support.ExceptionHelper;
import org.apache.camel.support.LoggerHelper;
import org.apache.camel.support.PatternHelper;
import org.apache.camel.support.console.AbstractDevConsole;
@@ -108,11 +107,10 @@ public class RouteDevConsole extends AbstractDevConsole {
Throwable cause = mrb.getLastError().getException();
if (cause != null) {
sb.append(String.format("\n Error Message: %s",
cause.getMessage()));
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
- cause.printStackTrace(pw);
+
+ final String stackTrace =
ExceptionHelper.stackTraceToString(cause);
sb.append("\n\n");
- sb.append(sw);
+ sb.append(stackTrace);
sb.append("\n\n");
}
}
@@ -273,10 +271,7 @@ public class RouteDevConsole extends AbstractDevConsole {
if (cause != null) {
eo.put("message", cause.getMessage());
JsonArray arr2 = new JsonArray();
- StringWriter writer = new StringWriter();
- cause.printStackTrace(new PrintWriter(writer));
- writer.flush();
- String trace = writer.toString();
+ final String trace =
ExceptionHelper.stackTraceToString(cause);
eo.put("stackTrace", arr2);
Collections.addAll(arr2, trace.split("\n"));
}
diff --git
a/core/camel-core/src/test/java/org/apache/camel/util/NoClassDefFoundErrorWrapExceptionTest.java
b/core/camel-core/src/test/java/org/apache/camel/util/NoClassDefFoundErrorWrapExceptionTest.java
index a3085df0873..82157aff870 100644
---
a/core/camel-core/src/test/java/org/apache/camel/util/NoClassDefFoundErrorWrapExceptionTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/util/NoClassDefFoundErrorWrapExceptionTest.java
@@ -16,11 +16,9 @@
*/
package org.apache.camel.util;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.support.ExceptionHelper;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -34,11 +32,7 @@ public class NoClassDefFoundErrorWrapExceptionTest extends
ContextTestSupport {
template.requestBody("seda:start", "Hello World");
fail("Should throw exception");
} catch (Exception e) {
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
- e.printStackTrace(pw);
-
- String s = sw.toString();
+ final String s = ExceptionHelper.stackTraceToString(e);
assertTrue(s.contains("java.lang.LinkageError"));
assertTrue(s.contains("Cannot do this"));
assertTrue(s.contains("org.apache.camel.util.ProcessorFail.process"));
diff --git
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelHealth.java
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelHealth.java
index 88add644506..088d83f1c79 100644
---
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelHealth.java
+++
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelHealth.java
@@ -16,9 +16,6 @@
*/
package org.apache.camel.management.mbean;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.util.Collection;
import java.util.Collections;
import java.util.Optional;
@@ -38,6 +35,7 @@ import org.apache.camel.health.HealthCheckHelper;
import org.apache.camel.health.HealthCheckRegistry;
import org.apache.camel.health.HealthCheckRepository;
import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.support.ExceptionHelper;
public class ManagedCamelHealth implements ManagedCamelHealthMBean {
private final CamelContext context;
@@ -111,13 +109,7 @@ public class ManagedCamelHealth implements
ManagedCamelHealthMBean {
String stacktrace = "";
if (result.getError().isPresent()) {
- try (StringWriter stackTraceWriter = new StringWriter();
- PrintWriter pw = new PrintWriter(stackTraceWriter,
true)) {
- result.getError().get().printStackTrace(pw);
- stacktrace = stackTraceWriter.getBuffer().toString();
- } catch (IOException exception) {
- // ignore
- }
+ stacktrace =
ExceptionHelper.stackTraceToString(result.getError().get());
}
CompositeData data = new CompositeDataSupport(
diff --git
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedSupervisingRouteController.java
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedSupervisingRouteController.java
index 504b498d764..004eeb28be9 100644
---
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedSupervisingRouteController.java
+++
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedSupervisingRouteController.java
@@ -16,8 +16,6 @@
*/
package org.apache.camel.management.mbean;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
@@ -37,6 +35,7 @@ import org.apache.camel.api.management.ManagedResource;
import org.apache.camel.api.management.mbean.CamelOpenMBeanTypes;
import
org.apache.camel.api.management.mbean.ManagedSupervisingRouteControllerMBean;
import org.apache.camel.spi.SupervisingRouteController;
+import org.apache.camel.support.ExceptionHelper;
import org.apache.camel.util.TimeUtils;
import org.apache.camel.util.backoff.BackOffTimer;
@@ -224,10 +223,7 @@ public class ManagedSupervisingRouteController extends
ManagedService implements
if (cause != null) {
error = cause.getMessage();
if (includeStacktrace) {
- StringWriter writer = new StringWriter();
- cause.printStackTrace(new PrintWriter(writer));
- writer.flush();
- stacktrace = writer.toString();
+ stacktrace = ExceptionHelper.stackTraceToString(cause);
}
}
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/ExceptionHelper.java
b/core/camel-support/src/main/java/org/apache/camel/support/ExceptionHelper.java
new file mode 100644
index 00000000000..d1e6849546b
--- /dev/null
+++
b/core/camel-support/src/main/java/org/apache/camel/support/ExceptionHelper.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.support;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+/**
+ * Utilities for handling with Exception objects
+ */
+public class ExceptionHelper {
+
+ private ExceptionHelper() {
+
+ }
+
+ /**
+ * Dumps the stack trace from the given exception to a String
+ *
+ * @param e the exception to print the stack trace
+ * @return A string instance with the stack trace for the given exception
+ */
+ public static String stackTraceToString(Throwable e) {
+ final StringWriter writer = new StringWriter();
+ final PrintWriter printWriter = new PrintWriter(writer, true);
+ e.printStackTrace(printWriter);
+ return writer.toString();
+ }
+}
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/LanguageHelper.java
b/core/camel-support/src/main/java/org/apache/camel/support/LanguageHelper.java
index 7725136bb95..e2e37bf38f8 100644
---
a/core/camel-support/src/main/java/org/apache/camel/support/LanguageHelper.java
+++
b/core/camel-support/src/main/java/org/apache/camel/support/LanguageHelper.java
@@ -17,8 +17,6 @@
package org.apache.camel.support;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
@@ -34,7 +32,6 @@ import org.apache.camel.ExchangePropertyKey;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.spi.ExchangeFormatter;
import org.apache.camel.support.processor.DefaultExchangeFormatter;
-import org.apache.camel.util.IOHelper;
import org.apache.camel.util.TimeUtils;
public final class LanguageHelper {
@@ -79,15 +76,7 @@ public final class LanguageHelper {
*/
public static String exceptionStacktrace(Exchange exchange) {
Exception exception = exception(exchange);
- if (exception != null) {
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
- exception.printStackTrace(pw);
- IOHelper.close(pw, sw);
- return sw.toString();
- } else {
- return null;
- }
+ return ExceptionHelper.stackTraceToString(exception);
}
/**
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
b/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
index 876f4f970fa..e0254811abe 100644
---
a/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
+++
b/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
@@ -20,9 +20,7 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.io.PrintWriter;
import java.io.Reader;
-import java.io.StringWriter;
import java.io.Writer;
import java.lang.reflect.Array;
import java.util.Collection;
@@ -1119,9 +1117,7 @@ public final class MessageHelper {
sb.append(" message=\"").append(msg).append("\"");
}
sb.append(">\n");
- StringWriter sw = new StringWriter();
- exception.printStackTrace(new PrintWriter(sw));
- String trace = sw.toString();
+ final String trace = ExceptionHelper.stackTraceToString(exception);
// must always xml encode
sb.append(StringHelper.xmlEncode(trace));
sb.append(prefix).append("</exception>");
@@ -1168,9 +1164,8 @@ public final class MessageHelper {
}
String msg = exception.getMessage();
jo.put("message", msg);
- StringWriter sw = new StringWriter();
- exception.printStackTrace(new PrintWriter(sw));
- String trace = sw.toString();
+
+ final String trace = ExceptionHelper.stackTraceToString(exception);
try {
jo.put("stackTrace", Jsoner.escape(trace));
} catch (Exception e) {
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/processor/DefaultExchangeFormatter.java
b/core/camel-support/src/main/java/org/apache/camel/support/processor/DefaultExchangeFormatter.java
index e9f919d5b45..7b1b8fa453f 100644
---
a/core/camel-support/src/main/java/org/apache/camel/support/processor/DefaultExchangeFormatter.java
+++
b/core/camel-support/src/main/java/org/apache/camel/support/processor/DefaultExchangeFormatter.java
@@ -16,8 +16,6 @@
*/
package org.apache.camel.support.processor;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.Future;
@@ -30,6 +28,7 @@ import org.apache.camel.spi.Configurer;
import org.apache.camel.spi.ExchangeFormatter;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
+import org.apache.camel.support.ExceptionHelper;
import org.apache.camel.support.ExchangeHelper;
import org.apache.camel.support.MessageHelper;
import org.apache.camel.util.ObjectHelper;
@@ -235,9 +234,8 @@ public class DefaultExchangeFormatter implements
ExchangeFormatter {
style(sb,
"ExceptionMessage").append(exception.getMessage());
}
if (showAll || showStackTrace) {
- StringWriter sw = new StringWriter();
- exception.printStackTrace(new PrintWriter(sw));
- style(sb, "StackTrace").append(sw);
+ final String stackTrace =
ExceptionHelper.stackTraceToString(exception);
+ style(sb, "StackTrace").append(stackTrace);
}
}
}