You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2020/12/17 20:30:47 UTC

[jmeter] branch master updated: Bug 65004 - HTTP(S) Test Script recorder computes wrong HTTP Request breaking the application

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....@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>