You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2016/06/03 19:30:30 UTC
svn commit: r1746749 - in /httpcomponents/httpclient/branches/4.5.x:
fluent-hc/src/main/java/org/apache/http/client/fluent/
httpclient/src/main/java/org/apache/http/client/utils/
httpclient/src/test/java/org/apache/http/client/utils/
Author: olegk
Date: Fri Jun 3 19:30:30 2016
New Revision: 1746749
URL: http://svn.apache.org/viewvc?rev=1746749&view=rev
Log:
HTTPCLIENT-1746: improved argument validation in URLEncodedUtils
Modified:
httpcomponents/httpclient/branches/4.5.x/fluent-hc/src/main/java/org/apache/http/client/fluent/Request.java
httpcomponents/httpclient/branches/4.5.x/httpclient/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java
httpcomponents/httpclient/branches/4.5.x/httpclient/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java
Modified: httpcomponents/httpclient/branches/4.5.x/fluent-hc/src/main/java/org/apache/http/client/fluent/Request.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/branches/4.5.x/fluent-hc/src/main/java/org/apache/http/client/fluent/Request.java?rev=1746749&r1=1746748&r2=1746749&view=diff
==============================================================================
--- httpcomponents/httpclient/branches/4.5.x/fluent-hc/src/main/java/org/apache/http/client/fluent/Request.java (original)
+++ httpcomponents/httpclient/branches/4.5.x/fluent-hc/src/main/java/org/apache/http/client/fluent/Request.java Fri Jun 3 19:30:30 2016
@@ -357,7 +357,7 @@ public class Request {
paramList.add(param);
}
final ContentType contentType = ContentType.create(URLEncodedUtils.CONTENT_TYPE, charset);
- final String s = URLEncodedUtils.format(paramList, charset != null ? charset.name() : null);
+ final String s = URLEncodedUtils.format(paramList, charset);
return bodyString(s, contentType);
}
Modified: httpcomponents/httpclient/branches/4.5.x/httpclient/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/branches/4.5.x/httpclient/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java?rev=1746749&r1=1746748&r2=1746749&view=diff
==============================================================================
--- httpcomponents/httpclient/branches/4.5.x/httpclient/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java (original)
+++ httpcomponents/httpclient/branches/4.5.x/httpclient/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java Fri Jun 3 19:30:30 2016
@@ -73,6 +73,13 @@ public class URLEncodedUtils {
private static final String NAME_VALUE_SEPARATOR = "=";
/**
+ * @deprecated 4.5 Use {@link #parse(URI, Charset)}
+ */
+ public static List <NameValuePair> parse(final URI uri, final String charsetName) {
+ return parse(uri, charsetName != null ? Charset.forName(charsetName) : null);
+ }
+
+ /**
* Returns a list of {@link NameValuePair NameValuePairs} as built from the URI's query portion. For example, a URI
* of {@code http://example.org/path/to/file?a=1&b=2&c=3} would return a list of three NameValuePairs, one for a=1,
* one for b=2, and one for c=3. By convention, {@code '&'} and {@code ';'} are accepted as parameter separators.
@@ -84,13 +91,16 @@ public class URLEncodedUtils {
* @param uri
* URI to parse
* @param charset
- * Charset name to use while parsing the query
+ * Charset to use while parsing the query
* @return a list of {@link NameValuePair} as built from the URI's query portion.
+ *
+ * @since 4.5
*/
- public static List <NameValuePair> parse(final URI uri, final String charset) {
+ public static List <NameValuePair> parse(final URI uri, final Charset charset) {
+ Args.notNull(uri, "URI");
final String query = uri.getRawQuery();
if (query != null && !query.isEmpty()) {
- return parse(query, Charset.forName(charset));
+ return parse(query, charset);
}
return Collections.emptyList();
}
@@ -109,6 +119,7 @@ public class URLEncodedUtils {
*/
public static List <NameValuePair> parse(
final HttpEntity entity) throws IOException {
+ Args.notNull(entity, "HTTP entity");
final ContentType contentType = ContentType.get(entity);
if (contentType == null || !contentType.getMimeType().equalsIgnoreCase(CONTENT_TYPE)) {
return Collections.emptyList();
@@ -144,6 +155,7 @@ public class URLEncodedUtils {
* {@code application/x-www-form-urlencoded}.
*/
public static boolean isEncoded(final HttpEntity entity) {
+ Args.notNull(entity, "HTTP entity");
final Header h = entity.getContentType();
if (h != null) {
final HeaderElement[] elems = h.getElements();
@@ -232,6 +244,9 @@ public class URLEncodedUtils {
* @since 4.2
*/
public static List<NameValuePair> parse(final String s, final Charset charset) {
+ if (s == null) {
+ return Collections.emptyList();
+ }
final CharArrayBuffer buffer = new CharArrayBuffer(s.length());
buffer.append(s);
return parse(buffer, charset, QP_SEP_A, QP_SEP_S);
@@ -384,6 +399,7 @@ public class URLEncodedUtils {
final Iterable<? extends NameValuePair> parameters,
final char parameterSeparator,
final Charset charset) {
+ Args.notNull(parameters, "Parameters");
final StringBuilder result = new StringBuilder();
for (final NameValuePair parameter : parameters) {
final String encodedName = encodeFormFields(parameter.getName(), charset);
Modified: httpcomponents/httpclient/branches/4.5.x/httpclient/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/branches/4.5.x/httpclient/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java?rev=1746749&r1=1746748&r2=1746749&view=diff
==============================================================================
--- httpcomponents/httpclient/branches/4.5.x/httpclient/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java (original)
+++ httpcomponents/httpclient/branches/4.5.x/httpclient/src/test/java/org/apache/http/client/utils/TestURLEncodedUtils.java Fri Jun 3 19:30:30 2016
@@ -28,6 +28,7 @@
package org.apache.http.client.utils;
import java.net.URI;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -350,46 +351,46 @@ public class TestURLEncodedUtils {
@Test
public void testFormatString() throws Exception { // as above, using String
final List <NameValuePair> params = new ArrayList <NameValuePair>();
- Assert.assertEquals(0, URLEncodedUtils.format(params, "US-ASCII").length());
+ Assert.assertEquals(0, URLEncodedUtils.format(params, StandardCharsets.US_ASCII).length());
params.clear();
params.add(new BasicNameValuePair("Name0", null));
- Assert.assertEquals("Name0", URLEncodedUtils.format(params, "US-ASCII"));
+ Assert.assertEquals("Name0", URLEncodedUtils.format(params, StandardCharsets.US_ASCII));
params.clear();
params.add(new BasicNameValuePair("Name1", "Value1"));
- Assert.assertEquals("Name1=Value1", URLEncodedUtils.format(params, "US-ASCII"));
+ Assert.assertEquals("Name1=Value1", URLEncodedUtils.format(params, StandardCharsets.US_ASCII));
params.clear();
params.add(new BasicNameValuePair("Name2", ""));
- Assert.assertEquals("Name2=", URLEncodedUtils.format(params, "US-ASCII"));
+ Assert.assertEquals("Name2=", URLEncodedUtils.format(params, StandardCharsets.US_ASCII));
params.clear();
params.add(new BasicNameValuePair("Name4", "Value 4&"));
- Assert.assertEquals("Name4=Value+4%26", URLEncodedUtils.format(params, "US-ASCII"));
+ Assert.assertEquals("Name4=Value+4%26", URLEncodedUtils.format(params, StandardCharsets.US_ASCII));
params.clear();
params.add(new BasicNameValuePair("Name4", "Value+4&"));
- Assert.assertEquals("Name4=Value%2B4%26", URLEncodedUtils.format(params, "US-ASCII"));
+ Assert.assertEquals("Name4=Value%2B4%26", URLEncodedUtils.format(params, StandardCharsets.US_ASCII));
params.clear();
params.add(new BasicNameValuePair("Name4", "Value 4& =4"));
- Assert.assertEquals("Name4=Value+4%26+%3D4", URLEncodedUtils.format(params, "US-ASCII"));
+ Assert.assertEquals("Name4=Value+4%26+%3D4", URLEncodedUtils.format(params, StandardCharsets.US_ASCII));
params.clear();
params.add(new BasicNameValuePair("Name5", "aaa"));
params.add(new BasicNameValuePair("Name6", "bbb"));
- Assert.assertEquals("Name5=aaa&Name6=bbb", URLEncodedUtils.format(params, "US-ASCII"));
+ Assert.assertEquals("Name5=aaa&Name6=bbb", URLEncodedUtils.format(params, StandardCharsets.US_ASCII));
params.clear();
params.add(new BasicNameValuePair("Name7", "aaa"));
params.add(new BasicNameValuePair("Name7", "b,b"));
params.add(new BasicNameValuePair("Name7", "ccc"));
- Assert.assertEquals("Name7=aaa&Name7=b%2Cb&Name7=ccc", URLEncodedUtils.format(params, "US-ASCII"));
+ Assert.assertEquals("Name7=aaa&Name7=b%2Cb&Name7=ccc", URLEncodedUtils.format(params, StandardCharsets.US_ASCII));
params.clear();
params.add(new BasicNameValuePair("Name8", "xx, yy ,zz"));
- Assert.assertEquals("Name8=xx%2C++yy++%2Czz", URLEncodedUtils.format(params, "US-ASCII"));
+ Assert.assertEquals("Name8=xx%2C++yy++%2Czz", URLEncodedUtils.format(params, StandardCharsets.US_ASCII));
}
private List <NameValuePair> parse (final String params) {
@@ -397,7 +398,7 @@ public class TestURLEncodedUtils {
}
private List <NameValuePair> parseString (final String uri) throws Exception {
- return URLEncodedUtils.parse(new URI("?"+uri), "UTF-8");
+ return URLEncodedUtils.parse(new URI("?"+uri), StandardCharsets.UTF_8);
}
private static void assertNameValuePair (