You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2008/10/06 02:26:45 UTC

svn commit: r701906 - /jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/SoapSampler.java

Author: sebb
Date: Sun Oct  5 17:26:45 2008
New Revision: 701906

URL: http://svn.apache.org/viewvc?rev=701906&view=rev
Log:
Ensure file is closed
Use UTF-8 for body encoding of string input
Pick up rest of request headers

Modified:
    jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/SoapSampler.java

Modified: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/SoapSampler.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/SoapSampler.java?rev=701906&r1=701905&r2=701906&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/SoapSampler.java (original)
+++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/SoapSampler.java Sun Oct  5 17:26:45 2008
@@ -21,6 +21,7 @@
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.methods.PostMethod;
 import org.apache.commons.httpclient.methods.RequestEntity;
+import org.apache.commons.io.IOUtils;
 import org.apache.jmeter.protocol.http.control.CacheManager;
 import org.apache.jmeter.protocol.http.control.Header;
 import org.apache.jmeter.protocol.http.control.HeaderManager;
@@ -164,18 +165,14 @@
                 }
 
                 public void writeRequest(OutputStream out) throws IOException {
-                    byte[] buf = new byte[1024];
-                    // 1k - the previous 100k made no sense (there's tons of buffers
-                    // elsewhere in the chain) and it caused OOM when many concurrent
-                    // uploads were being done. Could be fixed by increasing the evacuation
-                    // ratio in bin/jmeter[.bat], but this is better.
-                    int read;
-                    InputStream in = new FileInputStream(xmlFile);
-                    while ((read = in.read(buf)) > 0) {
-                        out.write(buf, 0, read);
+                    InputStream in = null;
+                    try{
+                        in = new FileInputStream(xmlFile);
+                        IOUtils.copy(in, out);
+                        out.flush();
+                    } finally {
+                        IOUtils.closeQuietly(in);
                     }
-                    in.close();
-                    out.flush();
                 }
 
                 public long getContentLength() {
@@ -190,7 +187,8 @@
                 }
 
                 public String getContentType() {
-                    return "text/xml";
+                    // TODO do we need to add a charset for the file contents?
+                    return "text/xml"; // $NON-NLS-1$
                 }
             });
         } else {
@@ -201,9 +199,9 @@
                 }
 
                 public void writeRequest(OutputStream out) throws IOException {
-                    PrintWriter printer = new PrintWriter(out);
-                    printer.print(getXmlData());
-                    printer.flush();
+                    // charset must agree with content-type below
+                    IOUtils.write(getXmlData(), out, "utf-8"); // $NON-NLS-1$
+                    out.flush();
                 }
 
                 public long getContentLength() {
@@ -211,7 +209,7 @@
                 }
 
                 public String getContentType() {
-                    return "text/xml";
+                    return "text/xml; charset=utf-8"; // $NON-NLS-1$
                 }
             });
         }
@@ -240,8 +238,9 @@
             client = setupConnection(url, httpMethod, res);
 
             res.setQueryString(sendPostData(httpMethod,content_len));
-            res.setRequestHeaders(getConnectionHeaders(httpMethod));
             int statusCode = client.executeMethod(httpMethod);
+            // Some headers are set by executeMethod()
+            res.setRequestHeaders(getConnectionHeaders(httpMethod));
 
             // Request sent. Now get the response:
             instream = httpMethod.getResponseBodyAsStream();



---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org