Skip to content

Commit a7bb5ca

Browse files
committed
Remove unnecessary iteration over headers
The use of LinkedCaseInsensitiveMap, going back to 3.0, makes it unnecessary to iterate over keys which can cause ConcurrentModificationException. Closes gh-23460
1 parent 6d8bf34 commit a7bb5ca

File tree

5 files changed

+28
-25
lines changed

5 files changed

+28
-25
lines changed

spring-test/src/main/java/org/springframework/mock/web/HeaderValueHolder.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2018 the original author or authors.
2+
* Copyright 2002-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -91,8 +91,11 @@ public String toString() {
9191
* @param headers the Map of header names to HeaderValueHolders
9292
* @param name the name of the desired header
9393
* @return the corresponding HeaderValueHolder, or {@code null} if none found
94+
* @deprecated as of 5.1.10 in favor of using
95+
* {@link org.springframework.util.LinkedCaseInsensitiveMap}.
9496
*/
9597
@Nullable
98+
@Deprecated
9699
public static HeaderValueHolder getByName(Map<String, HeaderValueHolder> headers, String name) {
97100
Assert.notNull(name, "Header name must not be null");
98101
for (String headerName : headers.keySet()) {

spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,7 +1038,7 @@ else if (HttpHeaders.ACCEPT_LANGUAGE.equalsIgnoreCase(name) &&
10381038
}
10391039

10401040
private void doAddHeaderValue(String name, @Nullable Object value, boolean replace) {
1041-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
1041+
HeaderValueHolder header = this.headers.get(name);
10421042
Assert.notNull(value, "Header value must not be null");
10431043
if (header == null || replace) {
10441044
header = new HeaderValueHolder();
@@ -1078,7 +1078,7 @@ public void removeHeader(String name) {
10781078
*/
10791079
@Override
10801080
public long getDateHeader(String name) {
1081-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
1081+
HeaderValueHolder header = this.headers.get(name);
10821082
Object value = (header != null ? header.getValue() : null);
10831083
if (value instanceof Date) {
10841084
return ((Date) value).getTime();
@@ -1115,13 +1115,13 @@ private long parseDateHeader(String name, String value) {
11151115
@Override
11161116
@Nullable
11171117
public String getHeader(String name) {
1118-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
1118+
HeaderValueHolder header = this.headers.get(name);
11191119
return (header != null ? header.getStringValue() : null);
11201120
}
11211121

11221122
@Override
11231123
public Enumeration<String> getHeaders(String name) {
1124-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
1124+
HeaderValueHolder header = this.headers.get(name);
11251125
return Collections.enumeration(header != null ? header.getStringValues() : new LinkedList<>());
11261126
}
11271127

@@ -1132,7 +1132,7 @@ public Enumeration<String> getHeaderNames() {
11321132

11331133
@Override
11341134
public int getIntHeader(String name) {
1135-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
1135+
HeaderValueHolder header = this.headers.get(name);
11361136
Object value = (header != null ? header.getValue() : null);
11371137
if (value instanceof Number) {
11381138
return ((Number) value).intValue();

spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2018 the original author or authors.
2+
* Copyright 2002-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -380,7 +380,7 @@ public Cookie getCookie(String name) {
380380

381381
@Override
382382
public boolean containsHeader(String name) {
383-
return (HeaderValueHolder.getByName(this.headers, name) != null);
383+
return (this.headers.get(name) != null);
384384
}
385385

386386
/**
@@ -405,7 +405,7 @@ public Collection<String> getHeaderNames() {
405405
@Override
406406
@Nullable
407407
public String getHeader(String name) {
408-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
408+
HeaderValueHolder header = this.headers.get(name);
409409
return (header != null ? header.getStringValue() : null);
410410
}
411411

@@ -419,7 +419,7 @@ public String getHeader(String name) {
419419
*/
420420
@Override
421421
public List<String> getHeaders(String name) {
422-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
422+
HeaderValueHolder header = this.headers.get(name);
423423
if (header != null) {
424424
return header.getStringValues();
425425
}
@@ -436,7 +436,7 @@ public List<String> getHeaders(String name) {
436436
*/
437437
@Nullable
438438
public Object getHeaderValue(String name) {
439-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
439+
HeaderValueHolder header = this.headers.get(name);
440440
return (header != null ? header.getValue() : null);
441441
}
442442

@@ -446,7 +446,7 @@ public Object getHeaderValue(String name) {
446446
* @return the associated header values, or an empty List if none
447447
*/
448448
public List<Object> getHeaderValues(String name) {
449-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
449+
HeaderValueHolder header = this.headers.get(name);
450450
if (header != null) {
451451
return header.getValues();
452452
}
@@ -614,7 +614,7 @@ else if (HttpHeaders.SET_COOKIE.equalsIgnoreCase(name)) {
614614
}
615615

616616
private void doAddHeaderValue(String name, Object value, boolean replace) {
617-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
617+
HeaderValueHolder header = this.headers.get(name);
618618
Assert.notNull(value, "Header value must not be null");
619619
if (header == null) {
620620
header = new HeaderValueHolder();

spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletRequest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,7 +1038,7 @@ else if (HttpHeaders.ACCEPT_LANGUAGE.equalsIgnoreCase(name) &&
10381038
}
10391039

10401040
private void doAddHeaderValue(String name, @Nullable Object value, boolean replace) {
1041-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
1041+
HeaderValueHolder header = this.headers.get(name);
10421042
Assert.notNull(value, "Header value must not be null");
10431043
if (header == null || replace) {
10441044
header = new HeaderValueHolder();
@@ -1078,7 +1078,7 @@ public void removeHeader(String name) {
10781078
*/
10791079
@Override
10801080
public long getDateHeader(String name) {
1081-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
1081+
HeaderValueHolder header = this.headers.get(name);
10821082
Object value = (header != null ? header.getValue() : null);
10831083
if (value instanceof Date) {
10841084
return ((Date) value).getTime();
@@ -1115,13 +1115,13 @@ private long parseDateHeader(String name, String value) {
11151115
@Override
11161116
@Nullable
11171117
public String getHeader(String name) {
1118-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
1118+
HeaderValueHolder header = this.headers.get(name);
11191119
return (header != null ? header.getStringValue() : null);
11201120
}
11211121

11221122
@Override
11231123
public Enumeration<String> getHeaders(String name) {
1124-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
1124+
HeaderValueHolder header = this.headers.get(name);
11251125
return Collections.enumeration(header != null ? header.getStringValues() : new LinkedList<>());
11261126
}
11271127

@@ -1132,7 +1132,7 @@ public Enumeration<String> getHeaderNames() {
11321132

11331133
@Override
11341134
public int getIntHeader(String name) {
1135-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
1135+
HeaderValueHolder header = this.headers.get(name);
11361136
Object value = (header != null ? header.getValue() : null);
11371137
if (value instanceof Number) {
11381138
return ((Number) value).intValue();

spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletResponse.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2018 the original author or authors.
2+
* Copyright 2002-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -380,7 +380,7 @@ public Cookie getCookie(String name) {
380380

381381
@Override
382382
public boolean containsHeader(String name) {
383-
return (HeaderValueHolder.getByName(this.headers, name) != null);
383+
return (this.headers.get(name) != null);
384384
}
385385

386386
/**
@@ -405,7 +405,7 @@ public Collection<String> getHeaderNames() {
405405
@Override
406406
@Nullable
407407
public String getHeader(String name) {
408-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
408+
HeaderValueHolder header = this.headers.get(name);
409409
return (header != null ? header.getStringValue() : null);
410410
}
411411

@@ -419,7 +419,7 @@ public String getHeader(String name) {
419419
*/
420420
@Override
421421
public List<String> getHeaders(String name) {
422-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
422+
HeaderValueHolder header = this.headers.get(name);
423423
if (header != null) {
424424
return header.getStringValues();
425425
}
@@ -436,7 +436,7 @@ public List<String> getHeaders(String name) {
436436
*/
437437
@Nullable
438438
public Object getHeaderValue(String name) {
439-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
439+
HeaderValueHolder header = this.headers.get(name);
440440
return (header != null ? header.getValue() : null);
441441
}
442442

@@ -446,7 +446,7 @@ public Object getHeaderValue(String name) {
446446
* @return the associated header values, or an empty List if none
447447
*/
448448
public List<Object> getHeaderValues(String name) {
449-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
449+
HeaderValueHolder header = this.headers.get(name);
450450
if (header != null) {
451451
return header.getValues();
452452
}
@@ -614,7 +614,7 @@ else if (HttpHeaders.SET_COOKIE.equalsIgnoreCase(name)) {
614614
}
615615

616616
private void doAddHeaderValue(String name, Object value, boolean replace) {
617-
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
617+
HeaderValueHolder header = this.headers.get(name);
618618
Assert.notNull(value, "Header value must not be null");
619619
if (header == null) {
620620
header = new HeaderValueHolder();

0 commit comments

Comments
 (0)