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

vladimirsitnikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jmeter.git


The following commit(s) were added to refs/heads/master by this push:
     new 77675e0b8e fix: support trailing empty default values in JSON 
Extractor(#6448)
77675e0b8e is described below

commit 77675e0b8e6fa8a81a101777c450acc97927b781
Author: Raul Almeida <[email protected]>
AuthorDate: Wed Apr 23 10:00:46 2025 -0300

    fix: support trailing empty default values in JSON Extractor(#6448)
    
    See https://errorprone.info/bugpattern/StringSplitter
---
 .../extractor/json/jsonpath/JSONPostProcessor.java |  2 +-
 .../jmeter/extractor/TestJSONPostProcessor.java    | 29 ++++++++++++++++++++++
 2 files changed, 30 insertions(+), 1 deletion(-)

diff --git 
a/src/components/src/main/java/org/apache/jmeter/extractor/json/jsonpath/JSONPostProcessor.java
 
b/src/components/src/main/java/org/apache/jmeter/extractor/json/jsonpath/JSONPostProcessor.java
index 390fd22af5..0626d1c164 100644
--- 
a/src/components/src/main/java/org/apache/jmeter/extractor/json/jsonpath/JSONPostProcessor.java
+++ 
b/src/components/src/main/java/org/apache/jmeter/extractor/json/jsonpath/JSONPostProcessor.java
@@ -70,7 +70,7 @@ public class JSONPostProcessor
         List<String> jsonResponses = extractJsonResponse(context, vars);
         String[] refNames = getRefNames().split(SEPARATOR);
         String[] jsonPathExpressions = 
getJsonPathExpressions().split(SEPARATOR);
-        String[] defaultValues = getDefaultValues().split(SEPARATOR);
+        String[] defaultValues = getDefaultValues().split(SEPARATOR, -1);
         int[] matchNumbers = getMatchNumbersAsInt(defaultValues.length);
 
         validateSameLengthOfArguments(refNames, jsonPathExpressions, 
defaultValues);
diff --git 
a/src/components/src/test/java/org/apache/jmeter/extractor/TestJSONPostProcessor.java
 
b/src/components/src/test/java/org/apache/jmeter/extractor/TestJSONPostProcessor.java
index 7705bee083..d88bbfac06 100644
--- 
a/src/components/src/test/java/org/apache/jmeter/extractor/TestJSONPostProcessor.java
+++ 
b/src/components/src/test/java/org/apache/jmeter/extractor/TestJSONPostProcessor.java
@@ -317,6 +317,35 @@ class TestJSONPostProcessor {
         assertEquals("3", vars.get(VAR_NAME + "_matchNr"));
     }
 
+    @Test
+    void testProcessDefaultsWithAllEmptyStrings() {
+        JMeterContext context = JMeterContextService.getContext();
+        // Use match number 1 for simplicity
+        JSONPostProcessor processor = setupProcessor(context, "1", false);
+        JMeterVariables vars = new JMeterVariables();
+        context.setVariables(vars);
+
+        // Set up sample result that won't match JSON Paths
+        SampleResult sampleResult = createSampleResult("{}"); // Empty JSON
+        context.setPreviousResult(sampleResult);
+
+        // Configure the processor
+        // Three paths and names, corresponding to the three empty defaults
+        processor.setJsonPathExpressions("$.key1;$.key2;$.key3");
+        processor.setRefNames("var1;var2;var3");
+        // *** Default values string containing only separators ***
+        // This should split into ["", "", ""] with the fix
+        processor.setDefaultValues(";;"); // Represents 3 empty default values
+        processor.setScopeAll(); // Ensure it processes the main sample
+
+        // Process the sample
+        processor.process();
+
+        // Assertions: Verify all variables received an empty string default
+        assertEquals("", vars.get("var1"), "Variable var1 should get the first 
(empty) default value");
+        assertEquals("", vars.get("var2"), "Variable var2 should get the 
second (empty) default value");
+        assertEquals("", vars.get("var3"), "Variable var3 should get the third 
(empty) default value");
+    }
 
     private static JSONPostProcessor setupProcessor(JMeterContext context, 
String matchNumbers) {
         return setupProcessor(context, matchNumbers, true);

Reply via email to