Skip to content

Commit f35ed8d

Browse files
quaffrstoyanchev
authored andcommitted
Improve check whether to lowercase scheme
See gh-33715 ``` Map has no value for 'thescheme' java.lang.IllegalArgumentException: Map has no value for 'thescheme' at org.springframework.web.util.UriComponents$MapTemplateVariables.getValue(UriComponents.java:348) at org.springframework.web.util.UriComponents.expandUriComponent(UriComponents.java:263) at org.springframework.web.util.HierarchicalUriComponents.expandInternal(HierarchicalUriComponents.java:436) at org.springframework.web.util.HierarchicalUriComponents.expandInternal(HierarchicalUriComponents.java:53) at org.springframework.web.util.UriComponents.expand(UriComponents.java:161) at org.springframework.web.util.UriComponentsBuilder.buildAndExpand(UriComponentsBuilder.java:364) ```
1 parent e89218b commit f35ed8d

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

spring-web/src/main/java/org/springframework/web/util/RfcUriParser.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
* Parser for URI's based on RFC 3986 syntax.
3030
*
3131
* @author Rossen Stoyanchev
32+
* @author Yanming Zhou
3233
* @since 6.2
3334
*
3435
* @see <a href="https://www.rfc-editor.org/info/rfc3986">RFC 3986</a>
@@ -510,7 +511,7 @@ public InternalParser resolveIfOpaque() {
510511

511512
public InternalParser captureScheme() {
512513
String scheme = captureComponent("scheme");
513-
this.scheme = (!scheme.startsWith("{") ? scheme.toLowerCase(Locale.ROOT) : scheme);
514+
this.scheme = (!scheme.contains("{") ? scheme.toLowerCase(Locale.ROOT) : scheme);
514515
return this;
515516
}
516517

spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
* @author Juergen Hoeller
4848
* @author Sam Brannen
4949
* @author David Eckel
50+
* @author Yanming Zhou
5051
*/
5152
class UriComponentsBuilderTests {
5253

@@ -637,6 +638,24 @@ void schemeVariableMixedCase(ParserType parserType) {
637638
.buildAndExpand(Map.of("TheScheme", "ws"))
638639
.toUri();
639640
assertThat(uri.toString()).isEqualTo("ws://example.org");
641+
642+
uri = UriComponentsBuilder
643+
.fromUriString("{TheScheme}s://example.org", parserType)
644+
.buildAndExpand(Map.of("TheScheme", "ws"))
645+
.toUri();
646+
assertThat(uri.toString()).isEqualTo("wss://example.org");
647+
648+
uri = UriComponentsBuilder
649+
.fromUriString("s{TheScheme}://example.org", parserType)
650+
.buildAndExpand(Map.of("TheScheme", "ws"))
651+
.toUri();
652+
assertThat(uri.toString()).isEqualTo("sws://example.org");
653+
654+
uri = UriComponentsBuilder
655+
.fromUriString("s{TheScheme}s://example.org", parserType)
656+
.buildAndExpand(Map.of("TheScheme", "ws"))
657+
.toUri();
658+
assertThat(uri.toString()).isEqualTo("swss://example.org");
640659
}
641660

642661
@ParameterizedTest

0 commit comments

Comments
 (0)