This is an automated email from the ASF dual-hosted git repository.
davsclaus 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 6bc21eb180e CAMEL-22299: camel-platform-http-main - Use
camel-json-util for building json response
6bc21eb180e is described below
commit 6bc21eb180e2ec27e208ae63dd81052b4af45f02
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Jul 31 12:55:36 2025 +0200
CAMEL-22299: camel-platform-http-main - Use camel-json-util for building
json response
---
.../platform/http/main/ManagementHttpServer.java | 71 +++++++++-------------
1 file changed, 28 insertions(+), 43 deletions(-)
diff --git
a/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/ManagementHttpServer.java
b/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/ManagementHttpServer.java
index 478f469b463..23a35f56fd9 100644
---
a/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/ManagementHttpServer.java
+++
b/components/camel-platform-http-main/src/main/java/org/apache/camel/component/platform/http/main/ManagementHttpServer.java
@@ -90,7 +90,9 @@ import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.StopWatch;
import org.apache.camel.util.StringHelper;
import org.apache.camel.util.TimeUtils;
+import org.apache.camel.util.json.JsonArray;
import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -614,32 +616,30 @@ public class ManagementHttpServer extends ServiceSupport
implements CamelContext
res = HealthCheckHelper.invokeReadiness(camelContext,
level);
}
- StringBuilder sb = new StringBuilder();
- sb.append("{\n");
+ JsonObject root = new JsonObject();
// are we UP
boolean up = HealthCheckHelper.isResultsUp(res, rdy);
if ("oneline".equals(level)) {
// only brief status
- healthCheckStatus(sb, up);
+ healthCheckStatus(root, up);
} else if ("full".equals(level)) {
// include all details
List<HealthCheck.Result> list = new ArrayList<>(res);
- healthCheckDetails(sb, list, up, level, includeStackTrace,
includeData);
+ healthCheckDetails(root, list, up, level,
includeStackTrace, includeData);
} else {
// include only DOWN details
List<HealthCheck.Result> downs = res.stream().filter(r ->
r.getState().equals(HealthCheck.State.DOWN))
.collect(Collectors.toList());
- healthCheckDetails(sb, downs, up, level,
includeStackTrace, includeData);
+ healthCheckDetails(root, downs, up, level,
includeStackTrace, includeData);
}
- sb.append("}\n");
if (!up) {
// we need to fail with a http status so lets use 500
ctx.response().setStatusCode(503);
}
- ctx.end(sb.toString());
+ ctx.end(root.toJson());
}
};
// use blocking handler as the task can take longer time to complete
@@ -898,78 +898,63 @@ public class ManagementHttpServer extends ServiceSupport
implements CamelContext
"Cannot create PlatformHttpPluginRegistry. Make sure
camel-platform-http JAR is on classpath."));
}
- private static void healthCheckStatus(StringBuilder sb, boolean up) {
+ private static void healthCheckStatus(JsonObject jo, boolean up) {
if (up) {
- sb.append(" \"status\": \"UP\"");
+ jo.put("status", "UP");
} else {
- sb.append(" \"status\": \"DOWN\"");
+ jo.put("status", "DOWN");
}
}
private static void healthCheckDetails(
- StringBuilder sb, List<HealthCheck.Result> checks, boolean up,
String level, String includeStackTrace,
+ JsonObject jo, List<HealthCheck.Result> checks, boolean up, String
level, String includeStackTrace,
String includeData) {
- healthCheckStatus(sb, up);
+ healthCheckStatus(jo, up);
if (!checks.isEmpty()) {
- sb.append(",\n");
- sb.append(" \"checks\": [\n");
+ JsonArray arr = new JsonArray();
+ jo.put("checks", arr);
for (int i = 0; i < checks.size(); i++) {
HealthCheck.Result d = checks.get(i);
- sb.append(" {\n");
- reportHealthCheck(sb, d, level, includeStackTrace,
includeData);
- if (i < checks.size() - 1) {
- sb.append(" },\n");
- } else {
- sb.append(" }\n");
- }
+ reportHealthCheck(arr, d, level, includeStackTrace,
includeData);
}
- sb.append(" ]\n");
}
}
private static void reportHealthCheck(
- StringBuilder sb, HealthCheck.Result d, String level, String
includeStackTrace, String includeData) {
- sb.append(" \"name\":
\"").append(d.getCheck().getId()).append("\",\n");
- sb.append(" \"status\":
\"").append(d.getState()).append("\"");
+ JsonArray arr, HealthCheck.Result d, String level, String
includeStackTrace, String includeData) {
+
+ JsonObject jo = new JsonObject();
+ arr.add(jo);
+
+ jo.put("name", d.getCheck().getId());
+ jo.put("status", d.getState().name());
if (("full".equals(level) || "true".equals(includeStackTrace)) &&
d.getError().isPresent()) {
// include error message in full exposure
- sb.append(",\n");
String msg = allCausedByErrorMessages(d.getError().get());
- sb.append(" \"error-message\": \"").append(msg)
- .append("\"");
+ jo.put("error-message", Jsoner.escape(msg));
if ("true".equals(includeStackTrace)) {
- sb.append(",\n");
- sb.append(" \"error-stacktrace\":
\"").append(errorStackTrace(d.getError().get()))
- .append("\"");
+ jo.put("error-stacktrace",
Jsoner.escape(errorStackTrace(d.getError().get())));
}
}
if (d.getMessage().isPresent()) {
- sb.append(",\n");
- sb.append(" \"message\":
\"").append(d.getMessage().get()).append("\"");
+ jo.put("message", Jsoner.escape(d.getMessage().get()));
}
// only include data if was enabled
if (("true".equals(includeData)) && d.getDetails() != null &&
!d.getDetails().isEmpty()) {
- sb.append(",\n");
// lets use sorted keys
Iterator<String> it = new
TreeSet<>(d.getDetails().keySet()).iterator();
- sb.append(" \"data\": {\n");
+ JsonObject jo2 = new JsonObject();
+ jo.put("data", jo2);
while (it.hasNext()) {
String k = it.next();
Object v = d.getDetails().get(k);
if (v == null) {
v = ""; // in case of null value
}
- boolean last = !it.hasNext();
- sb.append(" \"").append(k).append("\":
\"").append(v).append("\"");
- if (!last) {
- sb.append(",");
- }
- sb.append("\n");
+ jo2.put(k, v);
}
- sb.append(" }");
}
- sb.append("\n");
}
private static String allCausedByErrorMessages(Throwable e) {