Revision: 931 http://jwebunit.svn.sourceforge.net/jwebunit/?rev=931&view=rev Author: henryju Date: 2011-10-10 14:51:03 +0000 (Mon, 10 Oct 2011) Log Message: ----------- Simplify retrieve of the response body according to browsermob guys.
Modified Paths: -------------- trunk/jwebunit-webdriver-plugin/src/main/java/net/sourceforge/jwebunit/webdriver/WebDriverTestingEngineImpl.java Modified: trunk/jwebunit-webdriver-plugin/src/main/java/net/sourceforge/jwebunit/webdriver/WebDriverTestingEngineImpl.java =================================================================== --- trunk/jwebunit-webdriver-plugin/src/main/java/net/sourceforge/jwebunit/webdriver/WebDriverTestingEngineImpl.java 2011-10-04 08:35:15 UTC (rev 930) +++ trunk/jwebunit-webdriver-plugin/src/main/java/net/sourceforge/jwebunit/webdriver/WebDriverTestingEngineImpl.java 2011-10-10 14:51:03 UTC (rev 931) @@ -18,15 +18,8 @@ */ package net.sourceforge.jwebunit.webdriver; -import org.apache.http.conn.BasicManagedEntity; - -import com.gargoylesoftware.htmlunit.util.NameValuePair; - -import java.io.ByteArrayInputStream; - import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.WebResponse; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; @@ -53,17 +46,15 @@ import net.sourceforge.jwebunit.javascript.JavascriptConfirm; import net.sourceforge.jwebunit.javascript.JavascriptPrompt; import net.sourceforge.jwebunit.util.TestContext; -import org.apache.commons.io.input.ProxyInputStream; +import org.apache.commons.io.IOUtils; import org.apache.http.Header; -import org.apache.http.HttpEntity; import org.apache.http.HttpException; import org.apache.http.HttpRequest; import org.apache.http.HttpRequestInterceptor; import org.apache.http.HttpResponse; import org.apache.http.HttpResponseInterceptor; import org.apache.http.HttpStatus; -import org.apache.http.entity.HttpEntityWrapper; -import org.apache.http.message.BasicHttpResponse; +import org.apache.http.entity.BufferedHttpEntity; import org.apache.http.protocol.HttpContext; import org.apache.regexp.RE; import org.apache.regexp.RESyntaxException; @@ -102,7 +93,6 @@ private static final int DEFAULT_PORT = 8183; private static final Random RANDOM = new Random(); private HttpResponse response; - private BasicBufferedHttpEntity entity; // The xpath string that identifie the current form // ie : @name='myForm' private String formIdent; @@ -167,15 +157,8 @@ proxyServer.start(); proxyServer.addResponseInterceptor(new HttpResponseInterceptor() { public void process(HttpResponse response, HttpContext context) throws HttpException, IOException { + response.setEntity(new BufferedHttpEntity(response.getEntity())); WebDriverTestingEngineImpl.this.response = response; - if (response instanceof BasicHttpResponse) { - BasicHttpResponse basicResponse = (BasicHttpResponse) response; - WebDriverTestingEngineImpl.this.entity = new BasicBufferedHttpEntity(response.getEntity()); - basicResponse.setEntity(WebDriverTestingEngineImpl.this.entity); - } - else { - logger.error("Response is of type {}. Impossible to buffer content.", response.getClass().getSimpleName()); - } } }); proxyServer.addRequestInterceptor(new HttpRequestInterceptor() { @@ -197,70 +180,6 @@ throw new RuntimeException("Unable to start BrowserMob proxy after " + TRY_COUNT + " retries"); } - private class BasicBufferedHttpEntity extends HttpEntityWrapper { - - private BufferedInputStream bis; - - public BasicBufferedHttpEntity(HttpEntity wrapped) { - super(wrapped); - } - - @Override - public InputStream getContent() throws IOException { - if (bis == null) { - bis = new BufferedInputStream(super.getContent()); - } - return bis; - } - - public byte[] getBufferedContent() { - return bis.getBuffer(); - } - - } - - private class BufferedInputStream extends ProxyInputStream { - - private ByteArrayOutputStream bos = new ByteArrayOutputStream(); - - public BufferedInputStream(InputStream proxy) { - super(proxy); - } - - - public byte[] getBuffer() { - return bos.toByteArray(); - } - - @Override - public int read() throws IOException { - int b = super.read(); - if (b != -1) { - bos.write(b); - } - return b; - } - - @Override - public int read(byte[] array) throws IOException { - int len = super.read(array); - if (len > 0) { - bos.write(array, 0, len); - } - return len; - } - - @Override - public int read(byte[] array, int off, int len) throws IOException { - int len2 = super.read(array, off, len); - if (len2 > 0) { - bos.write(array, 0, len2); - } - return len2; - } - - } - private static int getRandomPort() { synchronized (RANDOM) { return DEFAULT_PORT + RANDOM.nextInt(1000); @@ -849,18 +768,12 @@ if (response.getEntity().getContentEncoding() != null) { encoding = response.getEntity().getContentEncoding().getValue(); } - - if (response.getEntity() instanceof BasicBufferedHttpEntity) { - try { - return new String(((BasicBufferedHttpEntity) response.getEntity()).getBufferedContent(), - encoding); - } - catch (IOException e) { - throw new RuntimeException(e); - } + + try { + return IOUtils.toString(response.getEntity().getContent(), encoding); } - else { - return driver.getPageSource(); + catch (IOException e) { + throw new RuntimeException(e); } } @@ -873,14 +786,21 @@ } public InputStream getInputStream() { - if (entity != null) { - return new ByteArrayInputStream(entity.getBufferedContent()); + try { + return response.getEntity().getContent(); } - throw new UnsupportedOperationException("Not supported yet."); + catch (Exception e) { + throw new TestingEngineResponseException(e); + } } public InputStream getInputStream(URL url) throws TestingEngineResponseException { - throw new UnsupportedOperationException("Not supported yet."); + try { + return url.openStream();//TODO support proxy + } + catch (IOException e) { + throw new TestingEngineResponseException(e); + } } public boolean hasTable(String tableSummaryNameOrId) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2dcopy1 _______________________________________________ JWebUnit-development mailing list JWebUnit-development@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jwebunit-development