This is an automated email from the ASF dual-hosted git repository.
jungm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomee.git
The following commit(s) were added to refs/heads/main by this push:
new d6b880f60a dont emit stacktrace on error
d6b880f60a is described below
commit d6b880f60ae99e621f826a0eec7d742b70b55a2e
Author: Markus Jung <[email protected]>
AuthorDate: Sat Aug 29 21:22:10 2026 +0200
dont emit stacktrace on error
---
.../openejb/server/httpd/HttpResponseImpl.java | 46 +++-------------------
.../openejb/server/httpd/OpenEJBHttpServer.java | 3 +-
.../server/httpd/OpenEJBHttpServerTest.java | 28 +++++++++++++
3 files changed, 34 insertions(+), 43 deletions(-)
diff --git
a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java
b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java
index 19c83c80db..bd0c708ad3 100644
---
a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java
+++
b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java
@@ -39,7 +39,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.StringTokenizer;
import static java.util.Collections.singletonList;
@@ -585,11 +584,11 @@ public class HttpResponseImpl implements HttpResponse {
/**
* creates an error with user defined variables
*
- * @param message the message of the error
- * @param t a Throwable to print a stack trace to
+ * @param message the message of the error, logged when debug logging is
enabled
+ * @param t the cause of the error, logged when debug logging is
enabled
* @return the HttpResponseImpl that this error belongs to
*/
- protected static HttpResponseImpl createError(String message, final
Throwable t) {
+ protected static HttpResponseImpl createError(final String message, final
Throwable t) {
final HttpResponseImpl res = new HttpResponseImpl(500, "Internal
Server Error", "text/html");
final PrintWriter body;
try {
@@ -604,45 +603,10 @@ public class HttpResponseImpl implements HttpResponse {
body.println("<br><br>");
if (LOGGER.isDebugEnabled()) { // this is not an error, don't log it
by default
- LOGGER.error(String.valueOf(t), t);
+ LOGGER.error(message, t);
}
- if (message != null) {
- final StringTokenizer msg = new StringTokenizer(message, "\n\r");
-
- while (msg.hasMoreTokens()) {
- body.print(msg.nextToken());
- body.println("<br>");
- }
- }
-
- if (t != null) {
-
- PrintWriter writer = null;
-
- try {
- body.println("<br><br>");
- body.println("Stack Trace:<br>");
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- writer = new PrintWriter(baos);
- t.printStackTrace(writer);
- writer.flush();
-
- message = new String(baos.toByteArray());
- final StringTokenizer msg = new StringTokenizer(message,
"\n\r");
-
- while (msg.hasMoreTokens()) {
- body.print(msg.nextToken());
- body.println("<br>");
- }
- } catch (final Exception e) {
- //no-op
- } finally {
- if (writer != null) {
- writer.close();
- }
- }
- }
+ body.println("The server encountered an internal error.");
body.println("</body>");
body.println("</html>");
diff --git
a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java
b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java
index 4f83cc4a97..1cf463852f 100644
---
a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java
+++
b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java
@@ -271,8 +271,7 @@ public class OpenEJBHttpServer implements HttpServer {
res.setCode(400);
res.setResponseString("Could not read the request");
try {
- res.getWriter().println(t.getMessage());
- t.printStackTrace(res.getWriter());
+ res.getWriter().println("Bad request");
} catch (IOException e) {
// no-op
}
diff --git
a/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/OpenEJBHttpServerTest.java
b/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/OpenEJBHttpServerTest.java
index 959ff518d8..ef3d1b0440 100644
---
a/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/OpenEJBHttpServerTest.java
+++
b/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/OpenEJBHttpServerTest.java
@@ -28,7 +28,11 @@ import org.apache.openejb.util.NetworkUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.net.HttpURLConnection;
+import java.net.Socket;
import java.net.URL;
import java.security.Principal;
import java.util.ArrayList;
@@ -39,6 +43,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
@EnableServices({"httpejbd"})
@RunWith(ApplicationComposer.class)
@@ -74,6 +79,29 @@ public class OpenEJBHttpServerTest {
}
}
+ @Test
+ public void malformedRequestResponseContainsNoServerDetails() throws
Exception {
+ final String response;
+ try (final Socket socket = new Socket("localhost", nextAvailablePort))
{
+ final OutputStream out = socket.getOutputStream();
+ out.write("GET /foo
HTTP/1.1\r\nno-colon-header\r\n\r\n".getBytes());
+ out.flush();
+ socket.shutdownOutput();
+ final InputStream in = socket.getInputStream();
+ final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+ final byte[] chunk = new byte[1024];
+ int read;
+ while ((read = in.read(chunk)) != -1) {
+ buffer.write(chunk, 0, read);
+ }
+ response = buffer.toString();
+ }
+ assertTrue(response, response.startsWith("HTTP/1.1 500 "));
+ assertFalse(response, response.contains("Exception"));
+ assertFalse(response, response.contains("org.apache.openejb"));
+ assertFalse(response, response.contains("\tat "));
+ }
+
@Configuration
public Properties props() {
nextAvailablePort = NetworkUtil.getNextAvailablePort();