--- a/src/java.net.http/share/classes/jdk/internal/net/http/HttpRequestImpl.java Thu Mar 22 09:48:27 2018 +0000
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/HttpRequestImpl.java Thu Mar 22 14:45:30 2018 +0000
@@ -36,6 +36,7 @@
import java.time.Duration;
import java.util.List;
import java.util.Locale;
+import java.util.Objects;
import java.util.Optional;
import java.net.http.HttpClient;
import java.net.http.HttpHeaders;
@@ -101,8 +102,11 @@
.replace("\r", "\\r")
.replace("\t", "\\t")
+ "\"");
+ URI requestURI = Objects.requireNonNull(request.uri(),
+ "uri must be non null");
+ Duration timeout = request.timeout().orElse(null);
this.method = method == null ? "GET" : method;
- this.userHeaders = ImmutableHeaders.of(request.headers());
+ this.userHeaders = ImmutableHeaders.validate(request.headers());
if (request instanceof HttpRequestImpl) {
// all cases exception WebSocket should have a new system headers
this.isWebSocket = ((HttpRequestImpl) request).isWebSocket;
@@ -112,10 +116,12 @@
this.systemHeaders = new HttpHeadersImpl();
}
} else {
+ HttpRequestBuilderImpl.checkURI(requestURI);
this.systemHeaders = new HttpHeadersImpl();
+ checkTimeout(timeout);
}
this.systemHeaders.setHeader("User-Agent", USER_AGENT);
- this.uri = request.uri();
+ this.uri = requestURI;
if (isWebSocket) {
// WebSocket determines and sets the proxy itself
this.proxy = ((HttpRequestImpl) request).proxy;
@@ -128,11 +134,18 @@
this.expectContinue = request.expectContinue();
this.secure = uri.getScheme().toLowerCase(Locale.US).equals("https");
this.requestPublisher = request.bodyPublisher().orElse(null);
- this.timeout = request.timeout().orElse(null);
+ this.timeout = timeout;
this.version = request.version();
this.authority = null;
}
+ private static void checkTimeout(Duration duration) {
+ if (duration != null) {
+ if (duration.isNegative() || Duration.ZERO.equals(duration))
+ throw new IllegalArgumentException("Invalid duration: " + duration);
+ }
+ }
+
/** Returns a new instance suitable for redirection. */
public static HttpRequestImpl newInstanceForRedirection(URI uri,
String method,