Log Message:
-----------
More refactoring and deprecation to use WebRequestSettings.
WebRequestSettings now has get/setAdditionalHeaders, patch submitted by Daniel Gredler.
INCOMPATIBLE CHANGE: Third party extenders of WebConnection will need to implement getResponse(WebRequestSettings) in place of other getResponse methods, which have been deprecated and given default implementations that call this method.
Modified Files:
--------------
htmlunit/src/java/com/gargoylesoftware/htmlunit:
WebConnection.java
(http://cvs.sourceforge.net/viewcvs.py/htmlunit/htmlunit/src/java/com/gargoylesoftware/htmlunit/WebConnection.java)
MockWebConnection.java
(http://cvs.sourceforge.net/viewcvs.py/htmlunit/htmlunit/src/java/com/gargoylesoftware/htmlunit/MockWebConnection.java)
HttpWebConnection.java
(http://cvs.sourceforge.net/viewcvs.py/htmlunit/htmlunit/src/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java)
WebClient.java
(http://cvs.sourceforge.net/viewcvs.py/htmlunit/htmlunit/src/java/com/gargoylesoftware/htmlunit/WebClient.java)
WebRequestSettings.java
(http://cvs.sourceforge.net/viewcvs.py/htmlunit/htmlunit/src/java/com/gargoylesoftware/htmlunit/WebRequestSettings.java)
htmlunit/src/java/com/gargoylesoftware/htmlunit/html:
HtmlPage.java
(http://cvs.sourceforge.net/viewcvs.py/htmlunit/htmlunit/src/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java)
htmlunit/src/xdocs:
changes.xml
(http://cvs.sourceforge.net/viewcvs.py/htmlunit/htmlunit/src/xdocs/changes.xml)
htmlunit/src/test/java/com/gargoylesoftware/htmlunit:
HTMLParserTest.java
(http://cvs.sourceforge.net/viewcvs.py/htmlunit/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/HTMLParserTest.java)
htmlunit/src/java/com/gargoylesoftware/htmlunit/util:
DebuggingWebConnection.java
(http://cvs.sourceforge.net/viewcvs.py/htmlunit/htmlunit/src/java/com/gargoylesoftware/htmlunit/util/DebuggingWebConnection.java)
Revision Data
-------------
Index: HtmlPage.java
===================================================================
RCS file: /cvsroot/htmlunit/htmlunit/src/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java,v
retrieving revision 1.106
retrieving revision 1.107
diff -Lsrc/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java -Lsrc/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java -u -d -r1.106 -r1.107
--- src/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java
+++ src/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java
@@ -61,9 +61,9 @@
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.ScriptEngine;
import com.gargoylesoftware.htmlunit.ScriptResult;
-import com.gargoylesoftware.htmlunit.SubmitMethod;
import com.gargoylesoftware.htmlunit.TextUtil;
import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.WebRequestSettings;
import com.gargoylesoftware.htmlunit.WebResponse;
import com.gargoylesoftware.htmlunit.WebWindow;
import com.gargoylesoftware.htmlunit.javascript.host.Event;
@@ -806,8 +806,8 @@
getPageEncoding();
try {
url = getFullyQualifiedUrl(urlString);
- final WebResponse webResponse= getWebClient().loadWebResponse(
- url, SubmitMethod.GET, Collections.EMPTY_LIST);
+ final WebRequestSettings requestSettings = new WebRequestSettings(url);
+ final WebResponse webResponse = getWebClient().loadWebResponse(requestSettings);
if( webResponse.getStatusCode() == 200 ) {
final String contentType = webResponse.getContentType();
final String contentCharset = webResponse.getContentCharSet();
Index: WebRequestSettings.java
===================================================================
RCS file: /cvsroot/htmlunit/htmlunit/src/java/com/gargoylesoftware/htmlunit/WebRequestSettings.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -Lsrc/java/com/gargoylesoftware/htmlunit/WebRequestSettings.java -Lsrc/java/com/gargoylesoftware/htmlunit/WebRequestSettings.java -u -d -r1.4 -r1.5
--- src/java/com/gargoylesoftware/htmlunit/WebRequestSettings.java
+++ src/java/com/gargoylesoftware/htmlunit/WebRequestSettings.java
@@ -40,6 +40,7 @@
import java.net.URL;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import org.apache.commons.lang.ClassUtils;
@@ -55,6 +56,7 @@
private SubmitMethod submitMethod_ = SubmitMethod.GET;
private FormEncodingType encodingType_ = FormEncodingType.URL_ENCODED;
private List requestParameters_ = Collections.EMPTY_LIST;
+ private Map additionalHeaders_ = Collections.EMPTY_MAP;
/**
* @param target The URL for this request
@@ -127,6 +129,19 @@
public void setSubmitMethod(final SubmitMethod submitMethod) {
submitMethod_ = submitMethod;
}
+ /**
+ * @return Returns the additionalHeaders.
+ */
+ public Map getAdditionalHeaders() {
+ return additionalHeaders_;
+ }
+
+ /**
+ * @param additionalHeaders The additionalHeaders to set.
+ */
+ public void setAdditionalHeaders(final Map additionalHeaders) {
+ this.additionalHeaders_ = additionalHeaders;
+ }
/**
* Return a string representation of this object
Index: WebConnection.java
===================================================================
RCS file: /cvsroot/htmlunit/htmlunit/src/java/com/gargoylesoftware/htmlunit/WebConnection.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -Lsrc/java/com/gargoylesoftware/htmlunit/WebConnection.java -Lsrc/java/com/gargoylesoftware/htmlunit/WebConnection.java -u -d -r1.10 -r1.11
--- src/java/com/gargoylesoftware/htmlunit/WebConnection.java
+++ src/java/com/gargoylesoftware/htmlunit/WebConnection.java
@@ -84,6 +84,15 @@
proxyPort_ = proxyPort;
}
+ /**
+ * Submit a request and retrieve a response
+ *
+ * @param webRequestSettings Settings to make the request with
+ * @return See above
+ * @exception IOException If an IO error occurs
+ */
+ public abstract WebResponse getResponse(final WebRequestSettings webRequestSettings)
+ throws IOException;
/**
* Submit a request and retrieve a response
@@ -94,14 +103,21 @@
* @param requestHeaders Any headers that need to be put into the request.
* @return See above
* @exception IOException If an IO error occurs
+ * @deprecated Use {@link #getResponse(WebRequestSettings)}
*/
- public abstract WebResponse getResponse(
+ public WebResponse getResponse(
final URL url,
final SubmitMethod submitMethod,
final List parameters,
final Map requestHeaders )
throws
- IOException;
+ IOException {
+ final WebRequestSettings wrs = new WebRequestSettings(url);
+ wrs.setSubmitMethod(submitMethod);
+ wrs.setRequestParameters(parameters);
+ wrs.setAdditionalHeaders(requestHeaders);
+ return getResponse(wrs);
+ }
/**
* Submit a request and retrieve a response
@@ -113,15 +129,23 @@
* @param requestHeaders Any headers that need to be put into the request.
* @return See above
* @exception IOException If an IO error occurs
+ * @deprecated Use {@link #getResponse(WebRequestSettings)}
*/
- public abstract WebResponse getResponse(
+ public WebResponse getResponse(
final URL url,
final FormEncodingType encType,
final SubmitMethod submitMethod,
final List parameters,
final Map requestHeaders )
throws
- IOException;
+ IOException {
+ final WebRequestSettings wrs = new WebRequestSettings(url);
+ wrs.setEncodingType(encType);
+ wrs.setSubmitMethod(submitMethod);
+ wrs.setRequestParameters(parameters);
+ wrs.setAdditionalHeaders(requestHeaders);
+ return getResponse(wrs);
+ }
/**
* Return the web client
Index: MockWebConnection.java
===================================================================
RCS file: /cvsroot/htmlunit/htmlunit/src/java/com/gargoylesoftware/htmlunit/MockWebConnection.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -Lsrc/java/com/gargoylesoftware/htmlunit/MockWebConnection.java -Lsrc/java/com/gargoylesoftware/htmlunit/MockWebConnection.java -u -d -r1.16 -r1.17
--- src/java/com/gargoylesoftware/htmlunit/MockWebConnection.java
+++ src/java/com/gargoylesoftware/htmlunit/MockWebConnection.java
@@ -149,42 +149,17 @@
}
/**
- * Submit a request to the processor
- *
- * @param url The url of the server
- * @param method The submit method. Ie SubmitMethod.GET
- * @param parameters Any parameters
- * @param requestParameters Any headers that need to be put into the request.
- * @return See above
- * @throws IOException (only for extending classes)
- */
- public WebResponse getResponse(
- final URL url,
- final SubmitMethod method,
- final List parameters,
- final Map requestParameters ) throws IOException {
-
- return this.getResponse(url, FormEncodingType.URL_ENCODED, method, parameters, requestParameters);
- }
-
- /**
* Submit a request and retrieve a response
*
- * @param url The url of the server
- * @param encType form encoding type to use for POST method
- * @param method The submit method. Ie SubmitMethod.GET
- * @param parameters Any parameters
- * @param requestHeaders Any headers that need to be put into the request.
+ * @param webRequestSettings Settings to make the request with
* @return See above
* @throws IOException (only for extending classes)
*/
- public WebResponse getResponse(
- final URL url,
- final FormEncodingType encType,
- final SubmitMethod method,
- final List parameters,
- final Map requestHeaders ) throws IOException {
-
+ public WebResponse getResponse(final WebRequestSettings webRequestSettings) throws IOException {
+ final URL url = webRequestSettings.getURL();
+ final SubmitMethod method = webRequestSettings.getSubmitMethod();
+ final List parameters = webRequestSettings.getRequestParameters();
+
getLog().debug("Getting response for " + url.toExternalForm());
lastMethod_ = method;
Index: WebClient.java
===================================================================
RCS file: /cvsroot/htmlunit/htmlunit/src/java/com/gargoylesoftware/htmlunit/WebClient.java,v
retrieving revision 1.101
retrieving revision 1.102
diff -Lsrc/java/com/gargoylesoftware/htmlunit/WebClient.java -Lsrc/java/com/gargoylesoftware/htmlunit/WebClient.java -u -d -r1.101 -r1.102
--- src/java/com/gargoylesoftware/htmlunit/WebClient.java
+++ src/java/com/gargoylesoftware/htmlunit/WebClient.java
@@ -1531,12 +1531,15 @@
* @param parameters Any parameters that are being passed into the request
* @throws IOException if an IO problem occurs
* @return The WebResponse
+ * @deprecated Use {@link #loadWebResponse(WebRequestSettings)}
*/
public final WebResponse loadWebResponse(
final URL url, final SubmitMethod method, final List parameters)
throws
IOException {
- return this.loadWebResponse(url, FormEncodingType.URL_ENCODED, method, parameters);
+ final WebRequestSettings wrs= new WebRequestSettings(url, method);
+ wrs.setRequestParameters(parameters);
+ return loadWebResponse(wrs);
}
/**
@@ -1547,22 +1550,42 @@
* @param parameters Any parameters that are being passed into the request
* @throws IOException if an IO problem occurs
* @return The WebResponse
+ * @deprecated Use {@link #loadWebResponse(WebRequestSettings)}
*/
public final WebResponse loadWebResponse(
final URL url, final FormEncodingType encType, final SubmitMethod method, final List parameters)
throws
IOException {
-
+ final WebRequestSettings wrs = new WebRequestSettings(url, method);
+ wrs.setEncodingType(encType);
+ wrs.setRequestParameters(parameters);
+ return loadWebResponse(wrs);
+ }
+ /**
+ * Load a {@link WebResponse} from the server
+ * @param webRequestSettings settings to use when making the request
+ * @throws IOException if an IO problem occurs
+ * @return The WebResponse
+ */
+ public final WebResponse loadWebResponse(final WebRequestSettings webRequestSettings)
+ throws
+ IOException {
+ final URL url = webRequestSettings.getURL();
+ final SubmitMethod method = webRequestSettings.getSubmitMethod();
+ final List parameters = webRequestSettings.getRequestParameters();
+
Assert.notNull("url", url);
Assert.notNull("method", method);
Assert.notNull("parameters", parameters);
getLog().debug("Load response for " + url.toExternalForm());
+ //TODO: this should probably be handled inside of WebRequestSettings and
+ // could cause a bug if anything above here reads the url again
final URL fixedUrl = encodeUrl(url);
+ webRequestSettings.setURL(fixedUrl);
- final WebResponse webResponse
- = getWebConnection().getResponse( fixedUrl, encType, method, parameters, requestHeaders_ );
+ final WebResponse webResponse = getWebConnection().getResponse(webRequestSettings);
final int statusCode = webResponse.getStatusCode();
if( statusCode >= 301 && statusCode <=307 && isRedirectEnabled() ) {
@@ -1598,11 +1621,14 @@
}
else if( ( statusCode == 301 || statusCode == 307 )
&& method.equals(SubmitMethod.GET) ) {
-
- return loadWebResponse( newUrl, SubmitMethod.GET, parameters );
+
+ final WebRequestSettings wrs = new WebRequestSettings(newUrl);
+ wrs.setRequestParameters(parameters);
+ return loadWebResponse(wrs);
}
else if( statusCode == 302 || statusCode == 303 ) {
- return loadWebResponse( newUrl, SubmitMethod.GET, Collections.EMPTY_LIST );
+ final WebRequestSettings wrs = new WebRequestSettings(newUrl);
+ return loadWebResponse(wrs);
}
}
Index: HttpWebConnection.java
===================================================================
RCS file: /cvsroot/htmlunit/htmlunit/src/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java,v
retrieving revision 1.38
retrieving revision 1.39
diff -Lsrc/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java -Lsrc/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java -u -d -r1.38 -r1.39
--- src/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java
+++ src/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java
@@ -109,46 +109,23 @@
super(webClient, proxyHost, proxyPort);
}
- /**
- * Submit a request and retrieve a response
- *
- * @param parameters Any parameters
- * @param url The url of the server
- * @param submitMethod The submit method. Ie SubmitMethod.GET
- * @param requestHeaders Any headers that need to be put in the request.
- * @return See above
- * @exception IOException If an IO error occurs
- */
- public WebResponse getResponse(
- final URL url,
- final SubmitMethod submitMethod,
- final List parameters,
- final Map requestHeaders )
- throws
- IOException {
- return this.getResponse(url, FormEncodingType.URL_ENCODED, submitMethod, parameters, requestHeaders);
- }
/**
* Submit a request and retrieve a response
*
- * @param parameters Any parameters
- * @param url The url of the server
- * @param encType Encoding type of the form when done as a POST
- * @param submitMethod The submit method. Ie SubmitMethod.GET
- * @param requestHeaders Any headers that need to be put in the request.
+ * @param webRequestSettings Settings to make the request with
* @return See above
* @exception IOException If an IO error occurs
*/
- public WebResponse getResponse(
- final URL url,
- final FormEncodingType encType,
- final SubmitMethod submitMethod,
- final List parameters,
- final Map requestHeaders )
- throws
- IOException {
-
+ public WebResponse getResponse(final WebRequestSettings webRequestSettings)
+ throws IOException {
+
+ final URL url = webRequestSettings.getURL();
+ final FormEncodingType encType = webRequestSettings.getEncodingType();
+ final SubmitMethod submitMethod = webRequestSettings.getSubmitMethod();
+ final List parameters = webRequestSettings.getRequestParameters();
+ final Map requestHeaders = webRequestSettings.getAdditionalHeaders();
+
final HttpClient httpClient = getHttpClientFor( url );
try {
@@ -175,8 +152,12 @@
if( url.getQuery() != null ) {
buffer.append(url.getQuery());
}
-
- return getResponse( new URL(buffer.toString()), submitMethod, parameters, requestHeaders );
+ //TODO: There might be a bug here since the original encoding type is lost.
+ final WebRequestSettings newRequest = new WebRequestSettings(new URL(buffer.toString()));
+ newRequest.setSubmitMethod(submitMethod);
+ newRequest.setRequestParameters(parameters);
+ newRequest.setAdditionalHeaders(requestHeaders);
+ return getResponse(newRequest);
}
else {
e.printStackTrace();
Index: changes.xml
===================================================================
RCS file: /cvsroot/htmlunit/htmlunit/src/xdocs/changes.xml,v
retrieving revision 1.383
retrieving revision 1.384
diff -Lsrc/xdocs/changes.xml -Lsrc/xdocs/changes.xml -u -d -r1.383 -r1.384
--- src/xdocs/changes.xml
+++ src/xdocs/changes.xml
@@ -7,6 +7,13 @@
<body>
<release version="NextRelease" date="Unknown">
+ <action type="update" dev="yourgod">
+ More refactoring and deprecation to use WebRequestSettings.
+ WebRequestSettings now has get/setAdditionalHeaders, patch submitted by Daniel Gredler.
+ INCOMPATIBLE CHANGE: Third party extenders of WebConnection will need to
+ implement getResponse(WebRequestSettings) in place of other getResponse methods,
+ which have been deprecated and given default implementations that call this method.
+ </action>
<action type="update" dev="mguillem" id="1183971" due-to="Bruce Faulkner">
Javascript: fixed exception occuring while changing type of input created via document.createElement().
</action>
Index: HTMLParserTest.java
===================================================================
RCS file: /cvsroot/htmlunit/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/HTMLParserTest.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -Lsrc/test/java/com/gargoylesoftware/htmlunit/HTMLParserTest.java -Lsrc/test/java/com/gargoylesoftware/htmlunit/HTMLParserTest.java -u -d -r1.16 -r1.17
--- src/test/java/com/gargoylesoftware/htmlunit/HTMLParserTest.java
+++ src/test/java/com/gargoylesoftware/htmlunit/HTMLParserTest.java
@@ -43,7 +43,6 @@
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
import com.gargoylesoftware.htmlunit.html.HTMLParser;
@@ -192,10 +191,7 @@
final WebClient webClient = new WebClient();
final WebResponse webResponse = new HttpWebConnection(webClient).getResponse(
- htmlUnitSite,
- SubmitMethod.GET,
- Collections.EMPTY_LIST,
- Collections.EMPTY_MAP
+ new WebRequestSettings(htmlUnitSite)
);
final HtmlPage page = HTMLParser.parse(webResponse, webClient.getCurrentWindow());
Index: DebuggingWebConnection.java
===================================================================
RCS file: /cvsroot/htmlunit/htmlunit/src/java/com/gargoylesoftware/htmlunit/util/DebuggingWebConnection.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -Lsrc/java/com/gargoylesoftware/htmlunit/util/DebuggingWebConnection.java -Lsrc/java/com/gargoylesoftware/htmlunit/util/DebuggingWebConnection.java -u -d -r1.4 -r1.5
--- src/java/com/gargoylesoftware/htmlunit/util/DebuggingWebConnection.java
+++ src/java/com/gargoylesoftware/htmlunit/util/DebuggingWebConnection.java
@@ -41,17 +41,15 @@
import java.io.FileWriter;
import java.io.IOException;
import java.net.URL;
-import java.util.List;
-import java.util.Map;
import org.apache.commons.httpclient.HttpState;
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import com.gargoylesoftware.htmlunit.FormEncodingType;
import com.gargoylesoftware.htmlunit.SubmitMethod;
import com.gargoylesoftware.htmlunit.WebConnection;
+import com.gargoylesoftware.htmlunit.WebRequestSettings;
import com.gargoylesoftware.htmlunit.WebResponse;
/**
@@ -102,32 +100,11 @@
/**
* Calls the wrapped webconnection and save the received response.
- * @see com.gargoylesoftware.htmlunit.WebConnection#getResponse(URL,
- * FormEncodingType, SubmitMethod, List, Map)
- */
- public WebResponse getResponse(final URL url, final FormEncodingType encType,
- final SubmitMethod submitMethod, final List parameters, final Map requestHeaders)
- throws IOException {
- final WebResponse response = wrappedWebConnection_.getResponse(url, encType,
- submitMethod, parameters, requestHeaders);
- saveResponse(response, submitMethod);
-
- return response;
- }
-
-
- /**
- * Calls the wrapped webconnection and save the received response.
- * @see com.gargoylesoftware.htmlunit.WebConnection#getResponse(URL,
- * SubmitMethod, List, Map)
+ * @see com.gargoylesoftware.htmlunit.WebConnection#getResponse(WebRequestSettings)
*/
- public WebResponse getResponse(final URL url, final SubmitMethod submitMethod,
- final List parameters, final Map requestHeaders) throws IOException {
-
- final WebResponse response = wrappedWebConnection_.getResponse(url,
- submitMethod, parameters, requestHeaders);
- saveResponse(response, submitMethod);
-
+ public WebResponse getResponse(final WebRequestSettings webRequestSettings) throws IOException {
+ final WebResponse response = wrappedWebConnection_.getResponse(webRequestSettings);
+ saveResponse(response, webRequestSettings.getSubmitMethod());
return response;
}
|