src/java.net.http/share/classes/jdk/internal/net/http/HttpRequestImpl.java
branchhttp-client-branch
changeset 56342 5c2ea761455b
parent 56254 4b2272dfe720
child 56343 2aa07dd36870
--- 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,