diff --git a/build.gradle b/build.gradle index 9c0ea10f02728418cb4ea340246e33cd3bb033f2..2b859c104bd2d7bfe03204bfc316fd4614ccba62 100644 --- a/build.gradle +++ b/build.gradle @@ -55,6 +55,7 @@ configure(allprojects) { project -> ext.jettyVersion = "9.3.10.v20160621" ext.jodaVersion = "2.9.4" ext.jpaVersion = "2.1.1" + ext.jspVersion = "2.3.2-b02" ext.jtaVersion = "1.2" ext.junitVersion = "4.12" ext.junitJupiterVersion = '5.0.0-M1' @@ -69,6 +70,7 @@ configure(allprojects) { project -> ext.reactorNettyVersion = '2.5.0.BUILD-SNAPSHOT' ext.rxJavaVersion = '1.1.6' ext.romeVersion = "1.6.0" + ext.servletVersion = "3.1.0" ext.slf4jVersion = "1.7.21" ext.snakeyamlVersion = "1.17" ext.snifferVersion = "1.15" @@ -77,6 +79,7 @@ configure(allprojects) { project -> ext.tomcatVersion = "8.5.3" ext.tyrusVersion = "1.13" ext.undertowVersion = "1.4.0.CR3" + ext.websocketVersion = "1.1" ext.woodstoxVersion = "5.0.2" ext.xmlunitVersion = "1.6" ext.xstreamVersion = "1.4.9" @@ -516,7 +519,7 @@ project("spring-messaging") { optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}") optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}") testCompile("javax.inject:javax.inject-tck:1") - testCompile("javax.servlet:javax.servlet-api:3.1.0") + testCompile("javax.servlet:javax.servlet-api:${servletVersion}") testCompile("javax.validation:validation-api:${beanvalVersion}") testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}") testCompile("org.apache.activemq:activemq-broker:5.8.0") @@ -674,9 +677,9 @@ project("spring-web") { compile(project(":spring-beans")) // for MultipartFilter compile(project(":spring-context")) compile(project(":spring-core")) - provided "javax.servlet:javax.servlet-api:3.1.0" + provided "javax.servlet:javax.servlet-api:${servletVersion}" optional(project(":spring-oxm")) // for MarshallingHttpMessageConverter - optional("javax.servlet.jsp:javax.servlet.jsp-api:2.2.1") + optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}") optional("javax.el:javax.el-api:2.2.5") optional("javax.faces:javax.faces-api:2.2") optional("javax.validation:validation-api:${beanvalVersion}") @@ -750,7 +753,7 @@ project("spring-orm") { exclude group: 'org.eclipse.persistence', module: 'javax.persistence' } optional("org.hibernate:hibernate-core:${hibernate5Version}") - optional("javax.servlet:javax.servlet-api:3.0.1") + optional("javax.servlet:javax.servlet-api:${servletVersion}") testCompile("org.aspectj:aspectjweaver:${aspectjVersion}") testCompile("org.hsqldb:hsqldb:${hsqldbVersion}") testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}") @@ -768,10 +771,10 @@ project("spring-webmvc") { compile(files(project(":spring-core").objenesisRepackJar)) compile(project(":spring-expression")) compile(project(":spring-web")) - provided("javax.servlet:javax.servlet-api:3.1.0") + provided("javax.servlet:javax.servlet-api:${servletVersion}") optional(project(":spring-context-support")) // for FreeMarker support optional(project(":spring-oxm")) // for MarshallingView - optional("javax.servlet.jsp:javax.servlet.jsp-api:2.2.1") + optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}") optional("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1") optional("org.apache.poi:poi:${poiVersion}") optional("org.apache.poi:poi-ooxml:${poiVersion}") @@ -838,7 +841,7 @@ project("spring-web-reactive") { compile "org.reactivestreams:reactive-streams:1.0.0" compile "io.projectreactor:reactor-core:${reactorCoreVersion}" optional(project(":spring-context-support")) // for FreeMarker support - provided "javax.servlet:javax.servlet-api:3.1.0" + provided "javax.servlet:javax.servlet-api:${servletVersion}" optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}") optional("org.freemarker:freemarker:${freemarkerVersion}") optional "org.apache.httpcomponents:httpclient:4.5.1" // Needed to run Javadoc without error @@ -868,8 +871,8 @@ project("spring-websocket") { compile(project(":spring-web")) optional(project(":spring-messaging")) optional(project(":spring-webmvc")) - optional("javax.servlet:javax.servlet-api:3.1.0") - optional("javax.websocket:javax.websocket-api:1.0") + optional("javax.servlet:javax.servlet-api:${servletVersion}") + optional("javax.websocket:javax.websocket-api:${websocketVersion}") optional("org.apache.tomcat:tomcat-websocket:${tomcatVersion}") { exclude group: "org.apache.tomcat", module: "tomcat-websocket-api" exclude group: "org.apache.tomcat", module: "tomcat-servlet-api" @@ -926,14 +929,14 @@ project("spring-test") { optional("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}") optional("org.testng:testng:${testngVersion}") optional("javax.inject:javax.inject:1") - optional("javax.servlet:javax.servlet-api:3.0.1") - optional("javax.servlet.jsp:javax.servlet.jsp-api:2.2.1") + optional("javax.servlet:javax.servlet-api:${servletVersion}") + optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}") optional("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1") optional("org.apache.taglibs:taglibs-standard-jstlel:1.2.1") { exclude group: "org.apache.taglibs", module: "taglibs-standard-spec" } optional("javax.el:javax.el-api:2.2.5") - optional("javax.websocket:javax.websocket-api:1.0") + optional("javax.websocket:javax.websocket-api:${websocketVersion}") optional("org.aspectj:aspectjweaver:${aspectjVersion}") optional("org.codehaus.groovy:groovy-all:${groovyVersion}") optional("org.hamcrest:hamcrest-core:${hamcrestVersion}") @@ -1131,7 +1134,7 @@ configure(rootProject) { testCompile(project(":spring-test")) testCompile(project(":spring-tx")) testCompile(project(":spring-web")) - testCompile("javax.servlet:javax.servlet-api:3.0.1") + testCompile("javax.servlet:javax.servlet-api:${servletVersion}") testCompile("javax.inject:javax.inject:1") testCompile("javax.resource:javax.resource-api:${jcaVersion}") testCompile("org.aspectj:aspectjweaver:${aspectjVersion}") diff --git a/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletInputStream.java b/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletInputStream.java index 1b8cf3eeba6b5e1ecf126cab9af1c296220730a6..f40e776264730d187a605d804b0b3126bdf5d313 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletInputStream.java +++ b/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletInputStream.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2016 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. @@ -18,6 +18,7 @@ package org.springframework.mock.web; import java.io.IOException; import java.io.InputStream; +import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; import org.springframework.util.Assert; @@ -36,6 +37,8 @@ public class DelegatingServletInputStream extends ServletInputStream { private final InputStream sourceStream; + private boolean finished = false; + /** * Create a DelegatingServletInputStream for the given source stream. @@ -56,7 +59,11 @@ public class DelegatingServletInputStream extends ServletInputStream { @Override public int read() throws IOException { - return this.sourceStream.read(); + int data = this.sourceStream.read(); + if (data == -1) { + this.finished = true; + } + return data; } @Override @@ -65,4 +72,19 @@ public class DelegatingServletInputStream extends ServletInputStream { this.sourceStream.close(); } + @Override + public boolean isFinished() { + return this.finished; + } + + @Override + public boolean isReady() { + return true; + } + + @Override + public void setReadListener(ReadListener readListener) { + throw new UnsupportedOperationException(); + } + } diff --git a/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletOutputStream.java b/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletOutputStream.java index d580974a6084c5b73bab0b1ec4ab0f4f79d332dd..bf12ea906b5b469aae24e4e693a69997414995d5 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletOutputStream.java +++ b/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletOutputStream.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2016 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. @@ -19,6 +19,7 @@ package org.springframework.mock.web; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletOutputStream; +import javax.servlet.WriteListener; import org.springframework.util.Assert; @@ -71,4 +72,14 @@ public class DelegatingServletOutputStream extends ServletOutputStream { this.targetStream.close(); } + @Override + public boolean isReady() { + return true; + } + + @Override + public void setWriteListener(WriteListener writeListener) { + throw new UnsupportedOperationException(); + } + } diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java index 45897aa08d24765423cab8b31c46acfc5eefb92f..8fa1a191ce14ebdb242b44712e78bd71d1a82956 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java @@ -51,6 +51,7 @@ import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import javax.servlet.http.HttpUpgradeHandler; import javax.servlet.http.Part; import org.springframework.http.MediaType; @@ -68,7 +69,7 @@ import org.springframework.util.StringUtils; * is {@link Locale#ENGLISH}. This value can be changed via {@link #addPreferredLocale} * or {@link #setPreferredLocales}. * - *
As of Spring Framework 4.0, this set of mocks is designed on a Servlet 3.0 baseline. + *
As of Spring Framework 5.0, this set of mocks is designed on a Servlet 3.1 baseline.
*
* @author Juergen Hoeller
* @author Rod Johnson
@@ -1216,4 +1217,9 @@ public class MockHttpServletRequest implements HttpServletRequest {
return result;
}
+ @Override
+ public As of Spring 4.0, this set of mocks is designed on a Servlet 3.0 baseline.
- * Beyond that, {@code MockHttpServletResponse} is also compatible with Servlet
- * 3.1's {@code setContentLengthLong()} method.
+ * As of Spring Framework 5.0, this set of mocks is designed on a Servlet 3.1 baseline.
*
* @author Juergen Hoeller
* @author Rod Johnson
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java b/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java
index 6861381fbca99636ea39cb41f12411be5704e7bc..9d45cb7247955dbcf1a4b1f20b1efd2b71f838fc 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java
@@ -676,4 +676,9 @@ public class MockServletContext implements ServletContext {
throw new UnsupportedOperationException();
}
+ @Override
+ public String getVirtualServerName() {
+ throw new UnsupportedOperationException();
+ }
+
}
diff --git a/spring-web/src/main/java/org/springframework/web/filter/ShallowEtagHeaderFilter.java b/spring-web/src/main/java/org/springframework/web/filter/ShallowEtagHeaderFilter.java
index eac685801a74821d4323fd803589df28db3f528f..79bca0ca7aa9a2d24df5586daf5a35117322e41b 100644
--- a/spring-web/src/main/java/org/springframework/web/filter/ShallowEtagHeaderFilter.java
+++ b/spring-web/src/main/java/org/springframework/web/filter/ShallowEtagHeaderFilter.java
@@ -42,6 +42,9 @@ import org.springframework.web.util.WebUtils;
* (e.g. a {@link org.springframework.web.servlet.View}) is still rendered.
* As such, this filter only saves bandwidth, not server performance.
*
+ * NOTE: As of Spring Framework 5.0, this filter uses request/response
+ * decorators built on the Servlet 3.1 API.
+ *
* @author Arjen Poutsma
* @author Rossen Stoyanchev
* @author Juergen Hoeller
diff --git a/spring-web/src/main/java/org/springframework/web/util/ContentCachingRequestWrapper.java b/spring-web/src/main/java/org/springframework/web/util/ContentCachingRequestWrapper.java
index 6029e5170a4a14898174853567332868d4272d50..1ad54d202ce81a1495bcda3eb5c7a85946fb8163 100644
--- a/spring-web/src/main/java/org/springframework/web/util/ContentCachingRequestWrapper.java
+++ b/spring-web/src/main/java/org/springframework/web/util/ContentCachingRequestWrapper.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2015 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -39,6 +39,7 @@ import org.springframework.http.HttpMethod;
* and allows this content to be retrieved via a {@link #getContentAsByteArray() byte array}.
*
* Used e.g. by {@link org.springframework.web.filter.AbstractRequestLoggingFilter}.
+ * Note: As of Spring Framework 5.0, this wrapper is built on the Servlet 3.1 API.
*
* @author Juergen Hoeller
* @author Brian Clozel
@@ -166,7 +167,6 @@ public class ContentCachingRequestWrapper extends HttpServletRequestWrapper {
return this.cachedContent.toByteArray();
}
- // TODO: this is no longer usable in Servlet 3.0 environment
private class ContentCachingInputStream extends ServletInputStream {
@@ -197,7 +197,7 @@ public class ContentCachingRequestWrapper extends HttpServletRequestWrapper {
@Override
public void setReadListener(ReadListener readListener) {
- this.setReadListener(readListener);
+ this.is.setReadListener(readListener);
}
}
diff --git a/spring-web/src/main/java/org/springframework/web/util/ContentCachingResponseWrapper.java b/spring-web/src/main/java/org/springframework/web/util/ContentCachingResponseWrapper.java
index 164963981d71533e7e30a4951874081db9a2dc8e..4a4cc0adfbfff739678a66e292c247e21707059e 100644
--- a/spring-web/src/main/java/org/springframework/web/util/ContentCachingResponseWrapper.java
+++ b/spring-web/src/main/java/org/springframework/web/util/ContentCachingResponseWrapper.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2015 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -34,6 +34,7 @@ import org.springframework.util.FastByteArrayOutputStream;
* and allows this content to be retrieved via a {@link #getContentAsByteArray() byte array}.
*
* Used e.g. by {@link org.springframework.web.filter.ShallowEtagHeaderFilter}.
+ * Note: As of Spring Framework 5.0, this wrapper is built on the Servlet 3.1 API.
*
* @author Juergen Hoeller
* @since 4.1.3
@@ -228,7 +229,6 @@ public class ContentCachingResponseWrapper extends HttpServletResponseWrapper {
}
}
- // TODO: this is no longer usable in Servlet 3.0 environment
private class ResponseServletOutputStream extends ServletOutputStream {
diff --git a/spring-web/src/test/java/org/springframework/mock/web/test/DelegatingServletInputStream.java b/spring-web/src/test/java/org/springframework/mock/web/test/DelegatingServletInputStream.java
index 336968d99600a6d150c9a27b2a092d9809335cca..d5e0c40eb76bf1cc9dc921d6eb975da021dc6ae2 100644
--- a/spring-web/src/test/java/org/springframework/mock/web/test/DelegatingServletInputStream.java
+++ b/spring-web/src/test/java/org/springframework/mock/web/test/DelegatingServletInputStream.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -37,6 +37,8 @@ public class DelegatingServletInputStream extends ServletInputStream {
private final InputStream sourceStream;
+ private boolean finished = false;
+
/**
* Create a DelegatingServletInputStream for the given source stream.
@@ -57,7 +59,11 @@ public class DelegatingServletInputStream extends ServletInputStream {
@Override
public int read() throws IOException {
- return this.sourceStream.read();
+ int data = this.sourceStream.read();
+ if (data == -1) {
+ this.finished = true;
+ }
+ return data;
}
@Override
@@ -68,16 +74,17 @@ public class DelegatingServletInputStream extends ServletInputStream {
@Override
public boolean isFinished() {
- throw new UnsupportedOperationException();
+ return this.finished;
}
@Override
public boolean isReady() {
- throw new UnsupportedOperationException();
+ return true;
}
@Override
public void setReadListener(ReadListener readListener) {
throw new UnsupportedOperationException();
}
+
}
diff --git a/spring-web/src/test/java/org/springframework/mock/web/test/DelegatingServletOutputStream.java b/spring-web/src/test/java/org/springframework/mock/web/test/DelegatingServletOutputStream.java
index 94317e42c13c986e728e962ba129311ca8d1fe4f..ecad14ebfa6fae9700534b133b83da5bce035dbf 100644
--- a/spring-web/src/test/java/org/springframework/mock/web/test/DelegatingServletOutputStream.java
+++ b/spring-web/src/test/java/org/springframework/mock/web/test/DelegatingServletOutputStream.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -74,11 +74,12 @@ public class DelegatingServletOutputStream extends ServletOutputStream {
@Override
public boolean isReady() {
- throw new UnsupportedOperationException();
+ return true;
}
@Override
public void setWriteListener(WriteListener writeListener) {
throw new UnsupportedOperationException();
}
+
}
diff --git a/spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletRequest.java b/spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletRequest.java
index 633895797a714cea9b0123037f382ba4189383be..b97ab429d576f1c27c2588dd11c87d5221fb2d0a 100644
--- a/spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletRequest.java
+++ b/spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletRequest.java
@@ -69,7 +69,7 @@ import org.springframework.util.StringUtils;
* is {@link Locale#ENGLISH}. This value can be changed via {@link #addPreferredLocale}
* or {@link #setPreferredLocales}.
*
- * As of Spring Framework 4.0, this set of mocks is designed on a Servlet 3.0 baseline.
+ * As of Spring Framework 5.0, this set of mocks is designed on a Servlet 3.1 baseline.
*
* @author Juergen Hoeller
* @author Rod Johnson
@@ -329,9 +329,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
* throwing an IllegalStateException if not active anymore.
*/
protected void checkActive() throws IllegalStateException {
- if (!this.active) {
- throw new IllegalStateException("Request is not active anymore");
- }
+ Assert.state(this.active, "Request is not active anymore");
}
@@ -808,9 +806,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
@Override
public AsyncContext startAsync(ServletRequest request, ServletResponse response) {
- if (!this.asyncSupported) {
- throw new IllegalStateException("Async not supported");
- }
+ Assert.state(this.asyncSupported, "Async not supported");
this.asyncStarted = true;
this.asyncContext = new MockAsyncContext(request, response);
return this.asyncContext;
diff --git a/spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletResponse.java b/spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletResponse.java
index 5f3f56eefd2605a1488236d51113e60804659db4..541953c2608f411a8578cbb880999198592b6e1e 100644
--- a/spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletResponse.java
+++ b/spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletResponse.java
@@ -45,9 +45,7 @@ import org.springframework.web.util.WebUtils;
/**
* Mock implementation of the {@link javax.servlet.http.HttpServletResponse} interface.
*
- * As of Spring 4.0, this set of mocks is designed on a Servlet 3.0 baseline.
- * Beyond that, {@code MockHttpServletResponse} is also compatible with Servlet
- * 3.1's {@code setContentLengthLong()} method.
+ * As of Spring Framework 5.0, this set of mocks is designed on a Servlet 3.1 baseline.
*
* @author Juergen Hoeller
* @author Rod Johnson
@@ -154,7 +152,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
* If {@code false}, {@link #getCharacterEncoding()} will return a default encoding value.
*/
public boolean isCharset() {
- return charset;
+ return this.charset;
}
@Override
@@ -181,17 +179,13 @@ public class MockHttpServletResponse implements HttpServletResponse {
@Override
public ServletOutputStream getOutputStream() {
- if (!this.outputStreamAccessAllowed) {
- throw new IllegalStateException("OutputStream access not allowed");
- }
+ Assert.state(this.outputStreamAccessAllowed, "OutputStream access not allowed");
return this.outputStream;
}
@Override
public PrintWriter getWriter() throws UnsupportedEncodingException {
- if (!this.writerAccessAllowed) {
- throw new IllegalStateException("Writer access not allowed");
- }
+ Assert.state(this.writerAccessAllowed, "Writer access not allowed");
if (this.writer == null) {
Writer targetWriter = (this.characterEncoding != null ?
new OutputStreamWriter(this.content, this.characterEncoding) : new OutputStreamWriter(this.content));
@@ -275,9 +269,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
@Override
public void resetBuffer() {
- if (isCommitted()) {
- throw new IllegalStateException("Cannot reset buffer - response is already committed");
- }
+ Assert.state(!isCommitted(), "Cannot reset buffer - response is already committed");
this.content.reset();
}
@@ -456,9 +448,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
@Override
public void sendError(int status, String errorMessage) throws IOException {
- if (isCommitted()) {
- throw new IllegalStateException("Cannot set error status - response is already committed");
- }
+ Assert.state(!isCommitted(), "Cannot set error status - response is already committed");
this.status = status;
this.errorMessage = errorMessage;
setCommitted(true);
@@ -466,18 +456,14 @@ public class MockHttpServletResponse implements HttpServletResponse {
@Override
public void sendError(int status) throws IOException {
- if (isCommitted()) {
- throw new IllegalStateException("Cannot set error status - response is already committed");
- }
+ Assert.state(!isCommitted(), "Cannot set error status - response is already committed");
this.status = status;
setCommitted(true);
}
@Override
public void sendRedirect(String url) throws IOException {
- if (isCommitted()) {
- throw new IllegalStateException("Cannot send redirect - response is already committed");
- }
+ Assert.state(!isCommitted(), "Cannot send redirect - response is already committed");
Assert.notNull(url, "Redirect URL must not be null");
setHeader(LOCATION_HEADER, url);
setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
@@ -627,10 +613,8 @@ public class MockHttpServletResponse implements HttpServletResponse {
public String getIncludedUrl() {
int count = this.includedUrls.size();
- if (count > 1) {
- throw new IllegalStateException(
- "More than 1 URL included - check getIncludedUrls instead: " + this.includedUrls);
- }
+ Assert.state(count <= 1,
+ () -> "More than 1 URL included - check getIncludedUrls instead: " + this.includedUrls);
return (count == 1 ? this.includedUrls.get(0) : null);
}
diff --git a/spring-web/src/test/java/org/springframework/mock/web/test/MockServletContext.java b/spring-web/src/test/java/org/springframework/mock/web/test/MockServletContext.java
index cfa3608a44309deff32eefe588a3e4cc06a58bdd..f6fff852b0305282a158c5d19c03389a23fb0559 100644
--- a/spring-web/src/test/java/org/springframework/mock/web/test/MockServletContext.java
+++ b/spring-web/src/test/java/org/springframework/mock/web/test/MockServletContext.java
@@ -355,9 +355,8 @@ public class MockServletContext implements ServletContext {
@Override
public RequestDispatcher getRequestDispatcher(String path) {
- if (!path.startsWith("/")) {
- throw new IllegalArgumentException("RequestDispatcher path at ServletContext level must start with '/'");
- }
+ Assert.isTrue(path.startsWith("/"),
+ () -> "RequestDispatcher path [" + path + "] at ServletContext level must start with '/'");
return new MockRequestDispatcher(path);
}
@@ -545,11 +544,6 @@ public class MockServletContext implements ServletContext {
}
}
- @Override
- public String getVirtualServerName() {
- throw new UnsupportedOperationException();
- }
-
public Set