Update port related code in UriComponentsBuilder
Use null to indicate no port has been provided. Raise exception when port has not been expanded. Issue: SPR-12123
This commit is contained in:
@@ -109,6 +109,13 @@ final class HierarchicalUriComponents extends UriComponents {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getPort() {
|
public int getPort() {
|
||||||
|
if (this.port == null) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else if (this.port.contains("{")) {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"The port contains a URI variable but has not been expanded yet: " + this.port);
|
||||||
|
}
|
||||||
return Integer.parseInt(this.port);
|
return Integer.parseInt(this.port);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,7 +367,7 @@ final class HierarchicalUriComponents extends UriComponents {
|
|||||||
if (this.host != null) {
|
if (this.host != null) {
|
||||||
uriBuilder.append(host);
|
uriBuilder.append(host);
|
||||||
}
|
}
|
||||||
if (!"-1".equals(this.port)) {
|
if (getPort() != -1) {
|
||||||
uriBuilder.append(':');
|
uriBuilder.append(':');
|
||||||
uriBuilder.append(port);
|
uriBuilder.append(port);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ public class UriComponentsBuilder {
|
|||||||
|
|
||||||
private String host;
|
private String host;
|
||||||
|
|
||||||
private String port = "-1";
|
private String port;
|
||||||
|
|
||||||
private CompositePathComponentBuilder pathBuilder = new CompositePathComponentBuilder();
|
private CompositePathComponentBuilder pathBuilder = new CompositePathComponentBuilder();
|
||||||
|
|
||||||
@@ -272,7 +272,7 @@ public class UriComponentsBuilder {
|
|||||||
return new OpaqueUriComponents(this.scheme, this.ssp, this.fragment);
|
return new OpaqueUriComponents(this.scheme, this.ssp, this.fragment);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return new HierarchicalUriComponents(this.scheme, this.userInfo, this.host, String.valueOf(this.port),
|
return new HierarchicalUriComponents(this.scheme, this.userInfo, this.host, this.port,
|
||||||
this.pathBuilder.build(), this.queryParams, this.fragment, encoded, true);
|
this.pathBuilder.build(), this.queryParams, this.fragment, encoded, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -353,7 +353,7 @@ public class UriComponentsBuilder {
|
|||||||
private void resetHierarchicalComponents() {
|
private void resetHierarchicalComponents() {
|
||||||
this.userInfo = null;
|
this.userInfo = null;
|
||||||
this.host = null;
|
this.host = null;
|
||||||
this.port = "-1";
|
this.port = null;
|
||||||
this.pathBuilder = new CompositePathComponentBuilder();
|
this.pathBuilder = new CompositePathComponentBuilder();
|
||||||
this.queryParams.clear();
|
this.queryParams.clear();
|
||||||
}
|
}
|
||||||
@@ -468,8 +468,9 @@ public class UriComponentsBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the URI port. Passing {@code "-1"} will clear the port of this builder.
|
* Set the URI port. Use this method only when the port needs to be
|
||||||
* The given port may contain URI template variables.
|
* parameterized with a URI variable. Otherwise use {@link #port(int)}.
|
||||||
|
* Passing {@code null} will clear the port of this builder.
|
||||||
* @param port the URI port
|
* @param port the URI port
|
||||||
* @return this UriComponentsBuilder
|
* @return this UriComponentsBuilder
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2013 the original author or authors.
|
* Copyright 2002-2014 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package org.springframework.web.util;
|
package org.springframework.web.util;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
@@ -23,10 +25,12 @@ import java.io.ObjectOutputStream;
|
|||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
|
|
||||||
import org.junit.Test;
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
import static org.hamcrest.Matchers.instanceOf;
|
||||||
import static org.hamcrest.Matchers.*;
|
import static org.hamcrest.Matchers.not;
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
import static org.springframework.web.util.UriComponentsBuilder.fromUriString;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Arjen Poutsma
|
* @author Arjen Poutsma
|
||||||
@@ -84,22 +88,18 @@ public class UriComponentsTests {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void port() {
|
public void port() {
|
||||||
UriComponents uriComponents1 = UriComponentsBuilder.fromUriString(
|
UriComponents uri1 = fromUriString("http://example.com:8080/bar").build();
|
||||||
"http://example.com:8080/bar").build();
|
UriComponents uri2 = fromUriString("http://example.com/bar").port(8080).build();
|
||||||
UriComponents uriComponents2 = UriComponentsBuilder.fromUriString(
|
UriComponents uri3 = fromUriString("http://example.com/bar").port("{port}").build().expand(8080);
|
||||||
"http://example.com/bar").port(8080).build();
|
UriComponents uri4 = fromUriString("http://example.com/bar").port("808{digit}").build().expand(0);
|
||||||
UriComponents uriComponents3 = UriComponentsBuilder.fromUriString(
|
assertEquals(8080, uri1.getPort());
|
||||||
"http://example.com/bar").port("{port}").build().expand(8080);
|
assertEquals("http://example.com:8080/bar", uri1.toUriString());
|
||||||
UriComponents uriComponents4 = UriComponentsBuilder.fromUriString(
|
assertEquals(8080, uri2.getPort());
|
||||||
"http://example.com/bar").port("808{digit}").build().expand(0);
|
assertEquals("http://example.com:8080/bar", uri2.toUriString());
|
||||||
assertEquals(8080, uriComponents1.getPort());
|
assertEquals(8080, uri3.getPort());
|
||||||
assertEquals("http://example.com:8080/bar", uriComponents1.toUriString());
|
assertEquals("http://example.com:8080/bar", uri3.toUriString());
|
||||||
assertEquals(8080, uriComponents2.getPort());
|
assertEquals(8080, uri4.getPort());
|
||||||
assertEquals("http://example.com:8080/bar", uriComponents2.toUriString());
|
assertEquals("http://example.com:8080/bar", uri4.toUriString());
|
||||||
assertEquals(8080, uriComponents3.getPort());
|
|
||||||
assertEquals("http://example.com:8080/bar", uriComponents3.toUriString());
|
|
||||||
assertEquals(8080, uriComponents4.getPort());
|
|
||||||
assertEquals("http://example.com:8080/bar", uriComponents4.toUriString());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = IllegalStateException.class)
|
@Test(expected = IllegalStateException.class)
|
||||||
|
|||||||
Reference in New Issue
Block a user