This is an automated email from the ASF dual-hosted git repository.
remm pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.1.x by this push:
new 79469a8d86 Fix detailed view of a connector with auto port
79469a8d86 is described below
commit 79469a8d861ad34113ab33bf32906f3707a13456
Author: remm <[email protected]>
AuthorDate: Thu Jun 27 13:05:33 2024 +0200
Fix detailed view of a connector with auto port
Using the port in the mbean name for request processor is not
necessarily a bad idea, but this is only added after binding so there's
a difference with the connector mbean name.
---
.../apache/catalina/manager/StatusTransformer.java | 17 ++++++-
.../catalina/manager/TestStatusTransformer.java | 54 +++++++++++++++++++---
webapps/docs/changelog.xml | 8 ++++
3 files changed, 71 insertions(+), 8 deletions(-)
diff --git a/java/org/apache/catalina/manager/StatusTransformer.java
b/java/org/apache/catalina/manager/StatusTransformer.java
index bef7f8edb7..bfc83dc006 100644
--- a/java/org/apache/catalina/manager/StatusTransformer.java
+++ b/java/org/apache/catalina/manager/StatusTransformer.java
@@ -385,7 +385,7 @@ public class StatusTransformer {
"</th><th>" + args[17] + "</th></tr>");
for (ObjectName objectName : requestProcessors) {
- if (name.equals(objectName.getKeyProperty("worker"))) {
+ if
(name.equals(getConnectorName(objectName.getKeyProperty("worker")))) {
writer.print("<tr>");
writeProcessorState(writer, objectName, mBeanServer, mode);
writer.print("</tr>");
@@ -428,7 +428,7 @@ public class StatusTransformer {
writer.write("<workers>");
for (ObjectName objectName : requestProcessors) {
- if (name.equals(objectName.getKeyProperty("worker"))) {
+ if
(name.equals(getConnectorName(objectName.getKeyProperty("worker")))) {
writeProcessorState(writer, objectName, mBeanServer,
mode);
}
}
@@ -484,6 +484,19 @@ public class StatusTransformer {
}
+ /**
+ * Return the connector name without the port, for auto port connectors.
+ * @param name the connector name
+ * @return the name without the port for the auto connectors
+ */
+ protected static String getConnectorName(String name) {
+ if (name.indexOf("-auto-") > 0) {
+ return name.substring(0, name.lastIndexOf("-")) + "\"";
+ } else {
+ return name;
+ }
+ }
+
/**
* Write processor state.
*
diff --git a/test/org/apache/catalina/manager/TestStatusTransformer.java
b/test/org/apache/catalina/manager/TestStatusTransformer.java
index 3cd772fdd4..1a7ecfa4fc 100644
--- a/test/org/apache/catalina/manager/TestStatusTransformer.java
+++ b/test/org/apache/catalina/manager/TestStatusTransformer.java
@@ -17,6 +17,9 @@
package org.apache.catalina.manager;
import java.io.File;
+import java.io.StringReader;
+
+import javax.xml.parsers.DocumentBuilderFactory;
import org.junit.Assert;
import org.junit.Test;
@@ -28,11 +31,32 @@ import org.apache.catalina.startup.SimpleHttpClient;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.startup.TomcatBaseTest;
import org.apache.tomcat.util.json.JSONParser;
+import org.w3c.dom.Document;
+import org.w3c.dom.ls.DOMImplementationLS;
+import org.xml.sax.InputSource;
public class TestStatusTransformer extends TomcatBaseTest {
+ enum Mode {
+ HTML, XML, JSON
+ }
+
@Test
public void testJSON() throws Exception {
+ testStatusServlet(Mode.JSON);
+ }
+
+ @Test
+ public void testXML() throws Exception {
+ testStatusServlet(Mode.XML);
+ }
+
+ @Test
+ public void testHTML() throws Exception {
+ testStatusServlet(Mode.HTML);
+ }
+
+ protected void testStatusServlet(Mode mode) throws Exception {
Tomcat tomcat = getTomcatInstance();
// Add default servlet to make some requests
@@ -65,17 +89,35 @@ public class TestStatusTransformer extends TomcatBaseTest {
client.connect();
client.processRequest(true);
+ String requestline = null;
+ switch (mode) {
+ case XML -> requestline = "GET /status/all?XML=true HTTP/1.1";
+ case JSON -> requestline = "GET /status/all?JSON=true HTTP/1.1";
+ default -> requestline = "GET /status/all HTTP/1.1";
+ }
client.setRequest(new String[] {
- "GET /status/all?JSON=true HTTP/1.1" + CRLF +
+ requestline + CRLF +
"Host: localhost" + CRLF +
"Connection: Close" + CRLF + CRLF });
client.connect();
client.processRequest(true);
- String json = client.getResponseBody();
- System.out.println(json);
- JSONParser parser = new JSONParser(json);
- String result = parser.parse().toString();
- Assert.assertTrue(result.contains("name=localhost/"));
+ String body = client.getResponseBody();
+ if (mode.equals(Mode.JSON)) {
+ JSONParser parser = new JSONParser(body);
+ String result = parser.parse().toString();
+ Assert.assertTrue(result.contains("name=localhost/"));
+ } else if (mode.equals(Mode.XML)) {
+ try (StringReader reader = new StringReader(body)) {
+ Document xmlDocument =
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new
InputSource(reader));
+ String serialized = ((DOMImplementationLS)
xmlDocument.getImplementation()).createLSSerializer().writeToString(xmlDocument);
+
Assert.assertTrue(serialized.contains("http-nio-127.0.0.1-auto-"));
+ Assert.assertTrue(serialized.contains("stage=\"S\""));
+ }
+ } else {
+ Assert.assertTrue(body.contains("http-nio-127.0.0.1-auto-"));
+ // Verify that a request is being processed
+ Assert.assertTrue(body.contains("<strong>S</strong>"));
+ }
}
}
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index d5afb9b694..f2e93dff1d 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -172,6 +172,14 @@
</add>
</changelog>
</subsection>
+ <subsection name="Web applications">
+ <changelog>
+ <fix>
+ Fix status servlet detailed view of the connectors when using automatic
+ port. (remm)
+ </fix>
+ </changelog>
+ </subsection>
<subsection name="Other">
<changelog>
<update>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]