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

davsclaus pushed a commit to branch backport/26036-to-camel-4.22.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit d8838a96d752cc46a9d3e600c3487f99362b99ff
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Sep 2 18:13:26 2026 +0200

    CAMEL-24585: Fix catalog validateLanguageExpression NPE for simple 
expressions using jsonpath/jq/xpath functions
    
    Guard LanguageSupport.property() against a null type converter so simple
    expressions embedding a delegating language function (${jsonpath(...)},
    ${jq(...)}, ${xpath(...)}) validate against the bare tooling CamelContext
    used by the catalog. When no type converter is available the value is
    returned as-is, mirroring the existing camelContext == null branch;
    runtime behavior is unchanged.
    
    Closes #26036
    
    Co-authored-by: Claude Opus 4.8 <[email protected]>
    (cherry picked from commit bf9a6095a4ccf893e9ef53b5d3c9c4819af6f0ed)
---
 .../test/java/org/apache/camel/catalog/CamelCatalogTest.java | 12 ++++++++++++
 .../main/java/org/apache/camel/support/LanguageSupport.java  | 11 +++++++----
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git 
a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
 
b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
index f5217b7dbe86..884f82ed94a2 100644
--- 
a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
+++ 
b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
@@ -1242,6 +1242,18 @@ public class CamelCatalogTest {
         assertEquals("$.store.book[?(@.price < 10)]", result.getText());
     }
 
+    @Test
+    public void testValidateSimpleJSonPathFunction() {
+        // CAMEL-24585: a simple expression that delegates to the jsonpath 
language must validate
+        // even though the tooling uses a bare CamelContext without a type 
converter
+        LanguageValidationResult result = 
catalog.validateLanguageExpression(null, "simple", "${jsonpath($.foo)}");
+        assertTrue(result.isSuccess());
+        assertEquals("${jsonpath($.foo)}", result.getText());
+
+        result = catalog.validateLanguagePredicate(null, "simple", 
"${jsonpath($.store.book[?(@.price < 10)])} != null");
+        assertTrue(result.isSuccess());
+    }
+
     @Test
     public void testValidateJQLanguage() {
         LanguageValidationResult result = 
catalog.validateLanguagePredicate(null, "jq", ".foo == \"bar\"");
diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/LanguageSupport.java
 
b/core/camel-support/src/main/java/org/apache/camel/support/LanguageSupport.java
index 0794b2d22d20..dd7125bd096f 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/LanguageSupport.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/LanguageSupport.java
@@ -24,6 +24,7 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.ExpressionIllegalSyntaxException;
 import org.apache.camel.IsSingleton;
 import org.apache.camel.NoSuchBeanException;
+import org.apache.camel.TypeConverter;
 import org.apache.camel.spi.Language;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.TimeUtils;
@@ -176,11 +177,13 @@ public abstract class LanguageSupport implements 
Language, IsSingleton, CamelCon
         if (value == null) {
             return null;
         }
-        if (camelContext != null) {
-            return camelContext.getTypeConverter().convertTo(type, value);
-        } else {
-            return (T) value;
+        TypeConverter converter = camelContext != null ? 
camelContext.getTypeConverter() : null;
+        if (converter != null) {
+            return converter.convertTo(type, value);
         }
+        // no type converter is available (e.g. when using a bare CamelContext 
for tooling/validation
+        // that has not been initialized) so return the value as-is
+        return (T) value;
     }
 
 }

Reply via email to