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>