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
commit e3719648b603e95cd1413f7240372c39b4d89b1f Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Mar 30 11:13:55 2023 +0200 camel-jbang - Trace to show read position of stream cache body --- .../org/apache/camel/support/MessageHelper.java | 19 ++++++++++-- .../core/commands/action/CamelTraceAction.java | 35 ++++++++++++++++++++-- 2 files changed, 49 insertions(+), 5 deletions(-) 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 4a4b1b755df..c0617cf16d1 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 @@ -588,10 +588,17 @@ public final class MessageHelper { if (includeBody) { sb.append(prefix); sb.append(" <body"); - String type = ObjectHelper.classCanonicalName(message.getBody()); + Object body = message.getBody(); + String type = ObjectHelper.classCanonicalName(body); if (type != null) { sb.append(" type=\"").append(type).append("\""); } + if (body instanceof StreamCache) { + long pos = ((StreamCache) body).position(); + if (pos != -1) { + sb.append(" position=\"").append(pos).append("\""); + } + } sb.append(">"); String xml = extractBodyForLogging(message, null, allowCachedStreams, allowStreams, allowFiles, maxChars); @@ -959,11 +966,17 @@ public final class MessageHelper { if (includeBody) { JsonObject jb = new JsonObject(); jo.put("body", jb); - String type = ObjectHelper.classCanonicalName(message.getBody()); + Object body = message.getBody(); + String type = ObjectHelper.classCanonicalName(body); if (type != null) { jb.put("type", type); } - + if (body instanceof StreamCache) { + long pos = ((StreamCache) body).position(); + if (pos != -1) { + jb.put("position", pos); + } + } String data = extractBodyForLogging(message, null, allowCachedStreams, allowStreams, allowFiles, maxChars); if (data != null) { jb.put("value", Jsoner.escape(data)); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java index 25decbdf775..e49429b20cd 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelTraceAction.java @@ -740,7 +740,7 @@ public class CamelTraceAction extends ActionBaseCommand { // body and type JsonObject jo = r.message.getMap("body"); - TableRow bodyRow = new TableRow("Body", jo.getString("type"), null, jo.get("value")); + TableRow bodyRow = new TableRow("Body", jo.getString("type"), null, jo.get("value"), jo.getLong("position")); String tab5 = AsciiTable.getTable(AsciiTable.NO_BORDERS, List.of(bodyRow), Arrays.asList( new Column().dataAlign(HorizontalAlign.LEFT) .minWidth(showExchangeProperties ? 12 : 10).with(TableRow::kindAsString), @@ -896,18 +896,28 @@ public class CamelTraceAction extends ActionBaseCommand { String type; String key; Object value; + Long position; TableRow(String kind, String type, String key, Object value) { + this(kind, type, key, value, null); + } + + TableRow(String kind, String type, String key, Object value, Long position) { this.kind = kind; this.type = type; this.key = key; this.value = value; + this.position = position; } String valueAsString() { return value != null ? value.toString() : "null"; } + String positionAsString() { + return position != null ? position.toString() : "null"; + } + String valueAsStringPretty() { if (value == null) { return "null"; @@ -992,6 +1002,10 @@ public class CamelTraceAction extends ActionBaseCommand { s = type.substring(21); } else if (type.startsWith("java.lang.") || type.startsWith("java.util.")) { s = type.substring(10); + } else if (type.startsWith("org.apache.camel.support.")) { + s = type.substring(25); + } else if (type.startsWith("org.apache.camel.converter.stream.")) { + s = type.substring(34); } else { s = type; } @@ -1010,13 +1024,22 @@ public class CamelTraceAction extends ActionBaseCommand { s = type.substring(21); } else if (type.startsWith("java.lang.") || type.startsWith("java.util.")) { s = type.substring(10); + } else if (type.startsWith("org.apache.camel.support.")) { + s = type.substring(25); + } else if (type.startsWith("org.apache.camel.converter.stream.")) { + s = type.substring(34); } else { s = type; } s = "(" + s + ")"; int l = valueLength(); - if (l != -1) { + long p = posLength(); + if (l != -1 & p != -1) { + s = s + " (position: " + p + " length: " + l + ")"; + } else if (l != -1) { s = s + " (length: " + l + ")"; + } else if (p != -1) { + s = s + " (position: " + p + ")"; } if (loggingColor) { s = Ansi.ansi().fgBrightDefault().a(Ansi.Attribute.INTENSITY_FAINT).a(s).reset().toString(); @@ -1058,6 +1081,14 @@ public class CamelTraceAction extends ActionBaseCommand { } } + long posLength() { + if (position == null) { + return -1; + } else { + return position; + } + } + } }