Only non-null input resets scheme specific part
Closes gh-24444
This commit is contained in:
		
							parent
							
								
									688167a7df
								
							
						
					
					
						commit
						cc4261c30b
					
				| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2019 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2020 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -551,7 +551,9 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
 | 
			
		|||
	@Override
 | 
			
		||||
	public UriComponentsBuilder host(@Nullable String host) {
 | 
			
		||||
		this.host = host;
 | 
			
		||||
		resetSchemeSpecificPart();
 | 
			
		||||
		if (host != null) {
 | 
			
		||||
			resetSchemeSpecificPart();
 | 
			
		||||
		}
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -559,14 +561,18 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
 | 
			
		|||
	public UriComponentsBuilder port(int port) {
 | 
			
		||||
		Assert.isTrue(port >= -1, "Port must be >= -1");
 | 
			
		||||
		this.port = String.valueOf(port);
 | 
			
		||||
		resetSchemeSpecificPart();
 | 
			
		||||
		if (port > -1) {
 | 
			
		||||
			resetSchemeSpecificPart();
 | 
			
		||||
		}
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public UriComponentsBuilder port(@Nullable String port) {
 | 
			
		||||
		this.port = port;
 | 
			
		||||
		resetSchemeSpecificPart();
 | 
			
		||||
		if (port != null) {
 | 
			
		||||
			resetSchemeSpecificPart();
 | 
			
		||||
		}
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -604,11 +610,11 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
 | 
			
		|||
				String value = matcher.group(3);
 | 
			
		||||
				queryParam(name, (value != null ? value : (StringUtils.hasLength(eq) ? "" : null)));
 | 
			
		||||
			}
 | 
			
		||||
			resetSchemeSpecificPart();
 | 
			
		||||
		}
 | 
			
		||||
		else {
 | 
			
		||||
			this.queryParams.clear();
 | 
			
		||||
		}
 | 
			
		||||
		resetSchemeSpecificPart();
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -617,8 +623,8 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
 | 
			
		|||
		this.queryParams.clear();
 | 
			
		||||
		if (query != null) {
 | 
			
		||||
			query(query);
 | 
			
		||||
			resetSchemeSpecificPart();
 | 
			
		||||
		}
 | 
			
		||||
		resetSchemeSpecificPart();
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -651,6 +657,7 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
 | 
			
		|||
	public UriComponentsBuilder queryParams(@Nullable MultiValueMap<String, String> params) {
 | 
			
		||||
		if (params != null) {
 | 
			
		||||
			this.queryParams.addAll(params);
 | 
			
		||||
			resetSchemeSpecificPart();
 | 
			
		||||
		}
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2019 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2020 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -769,6 +769,21 @@ public class UriComponentsBuilderTests {
 | 
			
		|||
		assertThat(uriComponents.getQueryParams().get("bar").get(0)).isNull();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test // gh-24444
 | 
			
		||||
	public void opaqueUriDoesNotResetOnNullInput() throws URISyntaxException {
 | 
			
		||||
		URI uri = new URI("urn:ietf:wg:oauth:2.0:oob");
 | 
			
		||||
		UriComponents result = UriComponentsBuilder.fromUri(uri)
 | 
			
		||||
				.host(null)
 | 
			
		||||
				.port(-1)
 | 
			
		||||
				.port(null)
 | 
			
		||||
				.queryParams(null)
 | 
			
		||||
				.replaceQuery(null)
 | 
			
		||||
				.query(null)
 | 
			
		||||
				.build();
 | 
			
		||||
 | 
			
		||||
		assertThat(result.toUri()).isEqualTo(uri);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void relativeUrls() {
 | 
			
		||||
		String baseUrl = "https://example.com";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue