This is an automated email from the ASF dual-hosted git repository. pmouawad 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 acca046 Bug 65004 - HTTP(S) Test Script recorder computes wrong HTTP Request breaking the application acca046 is described below commit acca046473657083e6b139402652d4b78c5229cb Author: pmouawad <p.moua...@ubik-ingenierie.com> AuthorDate: Thu Dec 17 21:27:29 2020 +0100 Bug 65004 - HTTP(S) Test Script recorder computes wrong HTTP Request breaking the application --- .../protocol/http/proxy/DefaultSamplerCreator.java | 30 +++++++++++++++++++--- xdocs/changes.xml | 1 + 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/DefaultSamplerCreator.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/DefaultSamplerCreator.java index f91f01a..13c6503 100644 --- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/DefaultSamplerCreator.java +++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/DefaultSamplerCreator.java @@ -55,6 +55,9 @@ import org.xml.sax.SAXParseException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + /** * Default implementation that handles classical HTTP textual + Multipart requests */ @@ -69,6 +72,7 @@ public class DefaultSamplerCreator extends AbstractSamplerCreator { private static final int SAMPLER_NAME_NAMING_MODE_SUFFIX = 2; // $NON-NLS-1$ private static final int SAMPLER_NAME_NAMING_MODE_FORMATTER = 3; // $NON_NLS-1$ + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); /** * */ @@ -248,7 +252,8 @@ public class DefaultSamplerCreator extends AbstractSamplerCreator { // used when postData is pure xml (eg. an xml-rpc call) or for PUT } else if (postData.trim().startsWith("<?") || HTTPConstants.PUT.equals(sampler.getMethod()) - || isPotentialXml(postData)) { + || isPotentialXml(postData) + || isPotentialJson(postData)) { sampler.addNonEncodedArgument("", postData, ""); } else if (contentType == null || (contentType.startsWith(HTTPConstants.APPLICATION_X_WWW_FORM_URLENCODED) && @@ -277,11 +282,28 @@ public class DefaultSamplerCreator extends AbstractSamplerCreator { } /** + * Tries parsing to see if content is JSON + * @param postData String + * @return boolean + */ + public static boolean isPotentialJson(final String postData) throws IOException { + boolean valid = true; + try{ + OBJECT_MAPPER.readTree(postData); + } catch(JsonProcessingException e){ + valid = false; + } + log.debug("Is Post data {} JSON ? {}", postData, valid); + return valid; + } + + /** * Tries parsing to see if content is xml * @param postData String * @return boolean */ private static boolean isPotentialXml(String postData) { + boolean isXml; try { SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); @@ -292,10 +314,12 @@ public class DefaultSamplerCreator extends AbstractSamplerCreator { xmlReader.setContentHandler(detectionHandler); xmlReader.setErrorHandler(detectionHandler); xmlReader.parse(new InputSource(new StringReader(postData))); - return !detectionHandler.isErrorDetected(); + isXml = !detectionHandler.isErrorDetected(); } catch (ParserConfigurationException | SAXException | IOException e) { - return false; + isXml = false; } + log.debug("Is Post data {} XML ? {}", postData, isXml); + return isXml; } private static final class ErrorDetectionHandler extends DefaultHandler { diff --git a/xdocs/changes.xml b/xdocs/changes.xml index f77317a..6480a77 100644 --- a/xdocs/changes.xml +++ b/xdocs/changes.xml @@ -137,6 +137,7 @@ Summary <ul> <li><bug>64955</bug>Keystore password not reset on reload</li> <li><bug>65002</bug>HTTP(S) Test Script recorder creates an invalid Basic authentication URL. Contributed by Ubik Load Pack (https://ubikloadpack.com)</li> + <li><bug>65004</bug>HTTP(S) Test Script recorder computes wrong HTTP Request breaking the application. Contributed by Ubik Load Pack (https://ubikloadpack.com)</li> </ul> <h3>Other Samplers</h3>