@@ -54,8 +54,8 @@ private static final class RequestImpl implements Request {
54
54
private URI rawUri ;
55
55
private InetAddress address ;
56
56
private InetAddress localAddress ;
57
- private FluentCaseInsensitiveStringsMap headers = new FluentCaseInsensitiveStringsMap () ;
58
- private Collection <Cookie > cookies = new ArrayList < Cookie >() ;
57
+ private FluentCaseInsensitiveStringsMap headers ;
58
+ private Collection <Cookie > cookies ;
59
59
private byte [] byteData ;
60
60
private String stringData ;
61
61
private InputStream streamData ;
@@ -213,12 +213,23 @@ private URI toURI(boolean encode) {
213
213
214
214
/* @Override */
215
215
public FluentCaseInsensitiveStringsMap getHeaders () {
216
+ if (headers == null ) {
217
+ headers = new FluentCaseInsensitiveStringsMap ();
218
+ }
216
219
return headers ;
217
220
}
218
221
222
+ @ Override
223
+ public boolean hasHeaders () {
224
+ return headers != null && !headers .isEmpty ();
225
+ }
226
+
219
227
/* @Override */
220
228
public Collection <Cookie > getCookies () {
221
- return Collections .unmodifiableCollection (cookies );
229
+ if (cookies == null ) {
230
+ cookies = Collections .unmodifiableCollection (Collections .<Cookie >emptyList ());
231
+ }
232
+ return cookies ;
222
233
}
223
234
224
235
/* @Override */
@@ -322,12 +333,13 @@ public String toString() {
322
333
sb .append ("\t " );
323
334
sb .append (method );
324
335
sb .append ("\t headers:" );
325
- if (headers != null ) {
326
- for (String name : headers .keySet ()) {
336
+ final FluentCaseInsensitiveStringsMap headersLocal = getHeaders ();
337
+ if (headersLocal != null ) {
338
+ for (String name : headersLocal .keySet ()) {
327
339
sb .append ("\t " );
328
340
sb .append (name );
329
341
sb .append (":" );
330
- sb .append (headers .getJoinedValue (name , ", " ));
342
+ sb .append (headersLocal .getJoinedValue (name , ", " ));
331
343
}
332
344
}
333
345
sb .append ("\t params:" );
@@ -436,7 +448,7 @@ public T setVirtualHost(String virtualHost) {
436
448
}
437
449
438
450
public T setHeader (String name , String value ) {
439
- request .headers .replace (name , value );
451
+ request .getHeaders () .replace (name , value );
440
452
return derived .cast (this );
441
453
}
442
454
@@ -446,17 +458,21 @@ public T addHeader(String name, String value) {
446
458
value = "" ;
447
459
}
448
460
449
- request .headers .add (name , value );
461
+ request .getHeaders () .add (name , value );
450
462
return derived .cast (this );
451
463
}
452
464
453
465
public T setHeaders (FluentCaseInsensitiveStringsMap headers ) {
454
- request .headers = (headers == null ? new FluentCaseInsensitiveStringsMap () : new FluentCaseInsensitiveStringsMap (headers ));
466
+ if (headers != null ) {
467
+ request .headers = new FluentCaseInsensitiveStringsMap (headers );
468
+ }
455
469
return derived .cast (this );
456
470
}
457
471
458
472
public T setHeaders (Map <String , Collection <String >> headers ) {
459
- request .headers = (headers == null ? new FluentCaseInsensitiveStringsMap () : new FluentCaseInsensitiveStringsMap (headers ));
473
+ if (headers != null ) {
474
+ request .headers = new FluentCaseInsensitiveStringsMap (headers );
475
+ }
460
476
return derived .cast (this );
461
477
}
462
478
@@ -466,6 +482,9 @@ public T setContentLength(int length) {
466
482
}
467
483
468
484
public T addCookie (Cookie cookie ) {
485
+ if (request .cookies == null ) {
486
+ request .cookies = new ArrayList <Cookie >();
487
+ }
469
488
request .cookies .add (cookie );
470
489
return derived .cast (this );
471
490
}
@@ -639,7 +658,10 @@ public T setConnectionPoolKeyStrategy(ConnectionPoolKeyStrategy connectionPoolKe
639
658
public Request build () {
640
659
if ((request .length < 0 ) && (request .streamData == null ) && allowBody (request .getMethod ())) {
641
660
// can't concatenate content-length
642
- String contentLength = request .headers .getFirstValue ("Content-Length" );
661
+ String contentLength = null ;
662
+ if (request .headers != null && request .headers .isEmpty ()) {
663
+ contentLength = request .headers .getFirstValue ("Content-Length" );
664
+ }
643
665
644
666
if (contentLength != null ) {
645
667
try {
@@ -649,6 +671,9 @@ public Request build() {
649
671
}
650
672
}
651
673
}
674
+ if (request .cookies != null ) {
675
+ request .cookies = Collections .unmodifiableCollection (request .cookies );
676
+ }
652
677
return request ;
653
678
}
654
679
@@ -660,6 +685,11 @@ public T addOrReplaceCookie(Cookie cookie) {
660
685
String cookieKey = cookie .getName ();
661
686
boolean replace = false ;
662
687
int index = 0 ;
688
+ if (request .cookies == null ) {
689
+ request .cookies = new ArrayList <Cookie >();
690
+ request .cookies .add (cookie );
691
+ return derived .cast (this );
692
+ }
663
693
for (Cookie c : request .cookies ) {
664
694
if (c .getName ().equals (cookieKey )) {
665
695
replace = true ;
0 commit comments