You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2026/10/01 06:26:33 UTC

(camel) 10/12: CAMEL-25208: camel-jbang - an XML file that is not well formed says so without the parser's position text

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch feature/CAMEL-25208-code-assist
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 523be67ca1f8b6b8af9ad2daf6fba9dd2678240a
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Sep 30 23:18:29 2026 +0200

    CAMEL-25208: camel-jbang - an XML file that is not well formed says so without the parser's position text
    
    Found testing in the TUI: the message of an XML route file that does not
    parse ended with the parser's "(position: TEXT seen ... @11:9)", which
    the line of the diagnostic already says.
    
    Co-Authored-By: Claude Opus 5.5 (1M context) <no...@anthropic.com>
    Signed-off-by: Claus Ibsen <cl...@gmail.com>
---
 .../camel/dsl/jbang/core/commands/ai/RouteModel.java      |  5 ++++-
 .../camel/dsl/jbang/core/commands/ai/RouteAssistTest.java | 15 +++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ai/RouteModel.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ai/RouteModel.java
index bce759548ada..57c60bf10132 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ai/RouteModel.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ai/RouteModel.java
@@ -238,7 +238,10 @@ public final class RouteModel {
     private static String firstLine(Throwable e) {
         String msg = String.valueOf(e.getMessage());
         int nl = msg.indexOf('\n');
-        return nl > 0 ? msg.substring(0, nl).trim() : msg.trim();
+        msg = nl > 0 ? msg.substring(0, nl).trim() : msg.trim();
+        // the parser appends where it is ("(position: TEXT seen ...</roues>... @11:9)"), which the line already says
+        int position = msg.indexOf(" (position:");
+        return position > 0 ? msg.substring(0, position) : msg;
     }
 
     /** The local name and the default namespace of the root element; null when there is none. */
diff --git a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ai/RouteAssistTest.java b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ai/RouteAssistTest.java
index 015e7ac22f5c..94acb8b75f63 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ai/RouteAssistTest.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ai/RouteAssistTest.java
@@ -342,6 +342,21 @@ class RouteAssistTest {
         assertThat(errors.get(0).message()).contains("fitler");
     }
 
+    @Test
+    void anXmlFileThatIsNotWellFormed() {
+        String xml = """
+                <routes xmlns="http://camel.apache.org/schema/xml-io">
+                    <route>
+                        <from uri="timer:tick"/>
+                    </route>
+                </roues>
+                """;
+        List<Diagnostic> errors = errors("routes.xml", xml);
+        assertThat(errors).hasSize(1);
+        assertThat(errors.get(0).line()).isEqualTo(5);
+        assertThat(errors.get(0).message()).contains("</roues>").doesNotContain("position:");
+    }
+
     @Test
     void aSpringXmlFileIsNotRead() {
         String xml = """