Author: pmouawad
Date: Thu Mar 17 12:36:26 2016
New Revision: 1735410

URL: http://svn.apache.org/viewvc?rev=1735410&view=rev
Log:
Bug 59188 - JSON Post Processor: Error processing JSON content ..., 
message:java.lang.String cannot be cast to java.util.List (affects nightly 
build before 3.0) 
Bugzilla Id: 59188

Modified:
    
jmeter/trunk/src/components/org/apache/jmeter/extractor/json/jsonpath/JSONManager.java
    
jmeter/trunk/src/components/org/apache/jmeter/extractor/json/jsonpath/JSONPostProcessor.java
    
jmeter/trunk/src/components/org/apache/jmeter/extractor/json/render/RenderAsJsonRenderer.java
    jmeter/trunk/xdocs/changes.xml

Modified: 
jmeter/trunk/src/components/org/apache/jmeter/extractor/json/jsonpath/JSONManager.java
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/extractor/json/jsonpath/JSONManager.java?rev=1735410&r1=1735409&r2=1735410&view=diff
==============================================================================
--- 
jmeter/trunk/src/components/org/apache/jmeter/extractor/json/jsonpath/JSONManager.java
 (original)
+++ 
jmeter/trunk/src/components/org/apache/jmeter/extractor/json/jsonpath/JSONManager.java
 Thu Mar 17 12:36:26 2016
@@ -23,7 +23,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import com.jayway.jsonpath.Configuration;
 import com.jayway.jsonpath.JsonPath;
+import com.jayway.jsonpath.Option;
 
 /**
  * Handles the extractions
@@ -31,6 +33,8 @@ import com.jayway.jsonpath.JsonPath;
  * @since 3.0
  */
 public class JSONManager {
+    private static final Configuration DEFAULT_CONFIGURATION =
+            
Configuration.defaultConfiguration().addOptions(Option.ALWAYS_RETURN_LIST);
     /**
      * This Map can hardly grow above 10 elements as it is used within 
JSONPostProcessor to 
      * store the computed JsonPath for the set of JSON Path Expressions.
@@ -59,9 +63,10 @@ public class JSONManager {
      * @return List of String extracted data
      * @throws ParseException
      */
-    public List<String> extractWithJsonPath(String jsonString, String jsonPath)
+    public List<Object> extractWithJsonPath(String jsonString, String jsonPath)
             throws ParseException {
         JsonPath jsonPathParser = getJsonPath(jsonPath);
-        return jsonPathParser.read(jsonString);
+        return jsonPathParser.read(jsonString, 
+                DEFAULT_CONFIGURATION);
     }
 }

Modified: 
jmeter/trunk/src/components/org/apache/jmeter/extractor/json/jsonpath/JSONPostProcessor.java
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/extractor/json/jsonpath/JSONPostProcessor.java?rev=1735410&r1=1735409&r2=1735410&view=diff
==============================================================================
--- 
jmeter/trunk/src/components/org/apache/jmeter/extractor/json/jsonpath/JSONPostProcessor.java
 (original)
+++ 
jmeter/trunk/src/components/org/apache/jmeter/extractor/json/jsonpath/JSONPostProcessor.java
 Thu Mar 17 12:36:26 2016
@@ -104,7 +104,7 @@ public class JSONPostProcessor extends A
                     vars.put(currentRefName, defaultValues[i]);
                 } else {
 
-                    List<String> extractedValues = localMatcher.get()
+                    List<Object> extractedValues = localMatcher.get()
                             .extractWithJsonPath(jsonResponse, 
currentJsonPath);
                     // if no values extracted, default value added
                     if (extractedValues.isEmpty()) {
@@ -125,8 +125,9 @@ public class JSONPostProcessor extends A
                                         new 
StringBuilder(getComputeConcatenation()
                                                 ? extractedValues.size() * 20
                                                 : 1);
-                                for (String stringExtracted : extractedValues) 
{
-                                    vars.put(currentRefName + "_" + index, 
stringExtracted);
+                                for (Object stringExtracted : extractedValues) 
{
+                                    vars.put(currentRefName + "_" + index, 
+                                            stringExtracted != null ? 
stringExtracted.toString() : ""); //$NON-NLS-1$
                                     if (getComputeConcatenation()) {
                                         concat.append(stringExtracted)
                                                 
.append(JSONPostProcessor.JSON_CONCATENATION_SEPARATOR);
@@ -140,7 +141,9 @@ public class JSONPostProcessor extends A
                             } else if (matchNumber == 0) {
                                 // Random extraction
                                 int matchSize = extractedValues.size();
-                                vars.put(currentRefName, 
extractedValues.get(JMeterUtils.getRandomInt(matchSize)));
+                                Object obj = 
extractedValues.get(JMeterUtils.getRandomInt(matchSize));
+                                vars.put(currentRefName, 
+                                        obj != null ? obj.toString() : ""); 
//$NON-NLS-1$
                             } else {
                                 // extract at position
                                 if (matchNumber > extractedValues.size()) {
@@ -152,14 +155,20 @@ public class JSONPostProcessor extends A
                                     }
                                     vars.put(currentRefName, defaultValues[i]);
                                 } else {
-                                    vars.put(currentRefName, 
extractedValues.get(matchNumber - 1));
+                                    Object obj = 
extractedValues.get(matchNumber - 1);
+                                    vars.put(currentRefName, 
+                                            obj != null ? obj.toString() : 
""); //$NON-NLS-1$
                                 }
                             }
                         } else {
                             // else just one value extracted
-                            vars.put(currentRefName, extractedValues.get(0));
+                            Object obj = extractedValues.get(0);
+                            String objAsString = 
+                                    obj != null ? obj.toString() : ""; 
//$NON-NLS-1$
+                            vars.put(currentRefName, 
+                                    objAsString); 
                             if (matchNumber < 0 && getComputeConcatenation()) {
-                                vars.put(currentRefName + ALL_SUFFIX, 
extractedValues.get(0));
+                                vars.put(currentRefName + ALL_SUFFIX, 
objAsString);
                             }
                         }
                         vars.put(currentRefName + REF_MATCH_NR, 
Integer.toString(extractedValues.size()));

Modified: 
jmeter/trunk/src/components/org/apache/jmeter/extractor/json/render/RenderAsJsonRenderer.java
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/extractor/json/render/RenderAsJsonRenderer.java?rev=1735410&r1=1735409&r2=1735410&view=diff
==============================================================================
--- 
jmeter/trunk/src/components/org/apache/jmeter/extractor/json/render/RenderAsJsonRenderer.java
 (original)
+++ 
jmeter/trunk/src/components/org/apache/jmeter/extractor/json/render/RenderAsJsonRenderer.java
 Thu Mar 17 12:36:26 2016
@@ -119,14 +119,16 @@ public class RenderAsJsonRenderer implem
 
     private String process(String textToParse) {
         try {
-            List<String> matchStrings = extractWithJSonPath(textToParse, 
jsonPathExpressionField.getText());
+            List<Object> matchStrings = extractWithJSonPath(textToParse, 
jsonPathExpressionField.getText());
             if (matchStrings.size() == 0) {
                 return "NO MATCH"; //$NON-NLS-1$
             } else {
                 StringBuilder builder = new StringBuilder();
                 int i = 0;
-                for (String text : matchStrings) {
-                    
builder.append("Result[").append(i++).append("]=").append(text).append("\n"); 
//$NON-NLS-1$ $NON-NLS-2$ $NON-NLS-3$
+                for (Object obj : matchStrings) {
+                    String objAsString =
+                            obj != null ? obj.toString() : ""; //$NON-NLS-1$
+                    
builder.append("Result[").append(i++).append("]=").append(objAsString).append("\n");
 //$NON-NLS-1$ $NON-NLS-2$ $NON-NLS-3$
                 }
 
                 return builder.toString();
@@ -136,7 +138,7 @@ public class RenderAsJsonRenderer implem
         }
     }
     
-    private List<String> extractWithJSonPath(String textToParse, String 
expression) throws ParseException {
+    private List<Object> extractWithJSonPath(String textToParse, String 
expression) throws ParseException {
         JSONManager jsonManager = new JSONManager();
         return jsonManager.extractWithJsonPath(textToParse, expression);
     }

Modified: jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1735410&r1=1735409&r2=1735410&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml (original)
+++ jmeter/trunk/xdocs/changes.xml Thu Mar 17 12:36:26 2016
@@ -374,6 +374,7 @@ Summary
 <li><bug>58079</bug>Do not cache HTTP samples that have a Vary header when 
using a HTTP CacheManager.</li>
 <li><bug>58912</bug>Response assertion gui : Deleting more than 1 selected row 
deletes only one row. Contributed by Benoit Wiart (benoit dot wiart at 
gmail.com)</li>
 <li><bug>59187</bug>JSON Post Processor : java.lang.NoClassDefFoundError: 
net/minidev/asm/FieldFilter at 
net.minidev.json.reader.JsonWriter.(JsonWriter.java:157) (affects nightly build 
before 3.0 release)</li>
+<li><bug>59188</bug>JSON Post Processor: Error processing JSON content ..., 
message:java.lang.String cannot be cast to java.util.List (affects nightly 
build before 3.0). Based on a patch contributed by Maxime Chassagneux 
(maxime.chassagneux at gmail.com)</li>
 </ul>
 
 <h3>Functions</h3>


Reply via email to