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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]