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/11 17:36:01 UTC
svn commit: r703675 - in /jakarta/jmeter/trunk:
src/protocol/http/org/apache/jmeter/protocol/http/sampler/WebServiceSampler.java
xdocs/changes.xml
Author: sebb
Date: Sat Oct 11 08:36:01 2008
New Revision: 703675
URL: http://svn.apache.org/viewvc?rev=703675&view=rev
Log:
Webservice(SOAP) Sampler improvements
- better content-type handling
- fetch actual response headers
- save request data earlier so can still be seen if connect fails
Modified:
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/WebServiceSampler.java
jakarta/jmeter/trunk/xdocs/changes.xml
Modified: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/WebServiceSampler.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/WebServiceSampler.java?rev=703675&r1=703674&r2=703675&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/WebServiceSampler.java (original)
+++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/WebServiceSampler.java Sat Oct 11 08:36:01 2008
@@ -49,6 +49,7 @@
import org.apache.log.Logger;
import org.apache.soap.Envelope;
import org.apache.soap.messaging.Message;
+import org.apache.soap.rpc.SOAPContext;
import org.apache.soap.transport.SOAPTransport;
import org.apache.soap.transport.http.SOAPHTTPConnection;
import org.apache.soap.util.xml.XMLParserUtils;
@@ -96,6 +97,7 @@
private static final String PROXY_PASS =
JMeterUtils.getPropDefault(JMeter.HTTP_PROXY_PASS,""); // $NON-NLS-1$
+ private static final String ENCODING = "UTF-8"; // $NON-NLS-1$ TODO should this be a variable?
/*
* Random class for generating random numbers.
@@ -391,7 +393,13 @@
TextFile tfile = new TextFile(file);
fileContents = tfile.getText();
}
- doc = XDB.parse(new FileInputStream(file));
+ FileInputStream fileInputStream = null;
+ try {
+ fileInputStream = new FileInputStream(file);
+ doc = XDB.parse(fileInputStream);
+ } finally {
+ IOUtils.closeQuietly(fileInputStream);
+ }
} else {// must be a "here" document
fileContents = getXmlData();
if (fileContents != null && fileContents.length() > 0) {
@@ -430,6 +438,12 @@
if (rdoc == null) {
throw new SOAPException("Could not create document", null);
}
+ // set the response defaults
+ result.setDataEncoding(ENCODING);
+ result.setContentType("text/xml"); // $NON-NLS-1$
+ result.setDataType(SampleResult.TEXT);
+ result.setSamplerData(fileContents);// WARNING - could be large
+
Envelope msgEnv = Envelope.unmarshall(rdoc);
// create a new message
Message msg = new Message();
@@ -497,19 +511,20 @@
}
SOAPTransport st = msg.getSOAPTransport();
- result.setDataType(SampleResult.TEXT);
BufferedReader br = null;
- // check to see if SOAPTransport is not nul and receive is
- // also not null. hopefully this will improve the error
- // reporting. 5/13/05 peter lin
if (st != null && st.receive() != null) {
br = st.receive();
+ SOAPContext sc = st.getResponseSOAPContext();
+ // Set details from the actual response
+ // Needs to be done before response can be stored
+ final String contentType = sc.getContentType();
+ result.setContentType(contentType);
+ result.setEncodingAndType(contentType);
if (getReadResponse()) {
StringWriter sw = new StringWriter();
IOUtils.copy(br, sw);
result.sampleEnd();
- // set the response
- result.setResponseData(sw.toString().getBytes());
+ result.setResponseData(sw.toString().getBytes(result.getDataEncodingWithDefault()));
} else {
// by not reading the response
// for real, it improves the
@@ -520,30 +535,22 @@
}
result.setSuccessful(true);
result.setResponseCodeOK();
- result.setResponseHeaders(this.convertSoapHeaders(st.getHeaders()));
} else {
result.sampleEnd();
result.setSuccessful(false);
if (st != null){
- result.setResponseData(st.getResponseSOAPContext().getContentType().getBytes());
+ final String contentType = st.getResponseSOAPContext().getContentType();
+ result.setContentType(contentType);
+ result.setEncodingAndType(contentType);
+ result.setResponseData(st.getResponseSOAPContext().toString().getBytes());
}
- result.setResponseHeaders("error");
}
- // 1-22-04 updated the sampler so that when read
- // response is set, it also sets SamplerData with
- // the XML message, so users can see what was
- // sent. if read response is not checked, it will
- // not set sampler data with the request message.
- // peter lin.
- // Removed URL, as that is already stored elsewere
- result.setSamplerData(fileContents);// WARNING - could be large
- if (st!= null){
- result.setEncodingAndType(st.getResponseSOAPContext().getContentType());
+ if (st != null) {
+ SOAPContext sc = st.getResponseSOAPContext();
+ result.setResponseHeaders(convertSoapHeaders(sc.getRootPart().getAllHeaderLines()));
+ } else {
+ result.setResponseHeaders("error");
}
- // setting this is just a formality, since
- // soap will return a descriptive error
- // message, soap errors within the response
- // are preferred.
if (br != null) {
br.close();
}
@@ -613,6 +620,19 @@
return buf.toString();
}
+ /**
+ * Process headerLines
+ * @param en enumeration of Strings
+ * @return String containing the lines
+ */
+ private String convertSoapHeaders(Enumeration en) {
+ StringBuffer buf = new StringBuffer(100);
+ while (en.hasMoreElements()) {
+ buf.append(en.nextElement()).append("\n"); //$NON-NLS-1$
+ }
+ return buf.toString();
+ }
+
public String getTimeout() {
return getPropertyAsString(TIMEOUT);
}
Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=703675&r1=703674&r2=703675&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Sat Oct 11 08:36:01 2008
@@ -111,7 +111,7 @@
<li>Bug 45887 - TCPSampler: timeout property incorrectly set</li>
<li>Bug 45928 - AJP/1.3 Sampler doesn't retrieve his label from messages.properties</li>
<li>Bug 45904 - Allow 'Not' Response Assertion to succeed with null sample</li>
-<li>HTTP and SOAP sampler character encodings updated to be more consistent</li>
+<li>HTTP, SOAP/XML-RPC and WebService(SOAP) sampler character encodings updated to be more consistent</li>
<li>Bug 45976 - incomplete result file when using remote testing with more than 1 server</li>
<li>Bug 45425 - JDBC Request does not support Unicode (changed sampler to use UTF-8)</li>
</ul>
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org