From 4588b6c9f43b0f7608088df9b7ba6e97217b7c0c Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Fri, 9 Sep 2016 18:18:09 +0200 Subject: [PATCH] Rename ResolvedResource to HttpResource `ResolvedResource` is a rather generic name - changing the extended interface to something more meaningful: `HttpResource`. For now, implementations are linked with the resource handling chain, but this aspect has been removed from the interface documentation. Issue: SPR-14264 --- .../resource/GzipResourceResolver.java | 6 ++--- .../web/reactive/resource/HttpResource.java | 21 +++++++++++++++ .../reactive/resource/ResolvedResource.java | 27 ------------------- .../reactive/resource/ResourceWebHandler.java | 4 +-- .../resource/VersionResourceResolver.java | 6 ++--- .../resource/GzipResourceResolverTests.java | 20 +++++++------- .../VersionResourceResolverTests.java | 4 +-- .../resource/GzipResourceResolver.java | 6 ++--- .../web/servlet/resource/HttpResource.java | 21 +++++++++++++++ .../servlet/resource/ResolvedResource.java | 27 ------------------- .../resource/ResourceHttpRequestHandler.java | 4 +-- .../resource/VersionResourceResolver.java | 6 ++--- .../resource/GzipResourceResolverTests.java | 20 +++++++------- .../VersionResourceResolverTests.java | 4 +-- 14 files changed, 82 insertions(+), 94 deletions(-) create mode 100644 spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/HttpResource.java delete mode 100644 spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResolvedResource.java create mode 100644 spring-webmvc/src/main/java/org/springframework/web/servlet/resource/HttpResource.java delete mode 100644 spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResolvedResource.java diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/GzipResourceResolver.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/GzipResourceResolver.java index c73579cfa5..bd501d042b 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/GzipResourceResolver.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/GzipResourceResolver.java @@ -75,7 +75,7 @@ public class GzipResourceResolver extends AbstractResourceResolver { } - private static final class GzippedResource extends AbstractResource implements ResolvedResource { + private static final class GzippedResource extends AbstractResource implements HttpResource { private final Resource original; @@ -142,8 +142,8 @@ public class GzipResourceResolver extends AbstractResourceResolver { @Override public HttpHeaders getResponseHeaders() { HttpHeaders headers; - if(this.original instanceof ResolvedResource) { - headers = ((ResolvedResource) this.original).getResponseHeaders(); + if(this.original instanceof HttpResource) { + headers = ((HttpResource) this.original).getResponseHeaders(); } else { headers = new HttpHeaders(); diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/HttpResource.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/HttpResource.java new file mode 100644 index 0000000000..dc8c05c83a --- /dev/null +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/HttpResource.java @@ -0,0 +1,21 @@ +package org.springframework.web.reactive.resource; + +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; + +/** + * Extended interface for a {@link Resource} to be written to an + * HTTP response. + * + * @author Brian Clozel + * @since 5.0 + */ +public interface HttpResource extends Resource { + + /** + * The HTTP headers to be contributed to the HTTP response + * that serves the current resource. + * @return the HTTP response headers + */ + HttpHeaders getResponseHeaders(); +} diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResolvedResource.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResolvedResource.java deleted file mode 100644 index edf6f05217..0000000000 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResolvedResource.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.springframework.web.reactive.resource; - -import org.springframework.core.io.Resource; -import org.springframework.http.HttpHeaders; - -/** - * Interface for resources resolved through the - * {@link org.springframework.web.reactive.resource.ResourceResolverChain} - * that may contribute HTTP response headers as they're served to HTTP clients. - * - *

Some resource implementations, while served by the - * {@link org.springframework.web.reactive.resource.ResourceResolverChain} need - * to contribute resource metadata as HTTP response headers so that HTTP clients - * can interpret them properly. - * - * @author Brian Clozel - * @since 5.0 - */ -public interface ResolvedResource extends Resource { - - /** - * The HTTP headers to be contributed to the HTTP response - * that serves the current resource. - * @return the HTTP response headers - */ - HttpHeaders getResponseHeaders(); -} diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java index bd7fbe7bad..d79a02d3bb 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java @@ -482,8 +482,8 @@ public class ResourceWebHandler if (mediaType != null) { headers.setContentType(mediaType); } - if (resource instanceof ResolvedResource) { - HttpHeaders resourceHeaders = ((ResolvedResource) resource).getResponseHeaders(); + if (resource instanceof HttpResource) { + HttpHeaders resourceHeaders = ((HttpResource) resource).getResponseHeaders(); exchange.getResponse().getHeaders().putAll(resourceHeaders); } headers.set(HttpHeaders.ACCEPT_RANGES, "bytes"); diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/VersionResourceResolver.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/VersionResourceResolver.java index 39ee7775cb..6620779cb0 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/VersionResourceResolver.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/resource/VersionResourceResolver.java @@ -242,7 +242,7 @@ public class VersionResourceResolver extends AbstractResourceResolver { } - private class FileNameVersionedResource extends AbstractResource implements ResolvedResource { + private class FileNameVersionedResource extends AbstractResource implements HttpResource { private final Resource original; @@ -321,8 +321,8 @@ public class VersionResourceResolver extends AbstractResourceResolver { @Override public HttpHeaders getResponseHeaders() { HttpHeaders headers; - if(this.original instanceof ResolvedResource) { - headers = ((ResolvedResource) this.original).getResponseHeaders(); + if(this.original instanceof HttpResource) { + headers = ((HttpResource) this.original).getResponseHeaders(); } else { headers = new HttpHeaders(); diff --git a/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/GzipResourceResolverTests.java b/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/GzipResourceResolverTests.java index 79de27aaeb..0eb2068f0c 100644 --- a/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/GzipResourceResolverTests.java +++ b/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/GzipResourceResolverTests.java @@ -123,8 +123,8 @@ public class GzipResourceResolverTests { Resource resource = new ClassPathResource("test/" + gzFile, getClass()); assertEquals(resource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, - resolved instanceof ResolvedResource); + assertTrue("Expected " + resolved + " to be of type " + HttpResource.class, + resolved instanceof HttpResource); } @Test @@ -137,8 +137,8 @@ public class GzipResourceResolverTests { Resource resource = new ClassPathResource("test/" + gzFile, getClass()); assertEquals(resource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/"+file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, - resolved instanceof ResolvedResource); + assertTrue("Expected " + resolved + " to be of type " + HttpResource.class, + resolved instanceof HttpResource); } @Test @@ -151,8 +151,8 @@ public class GzipResourceResolverTests { Resource gzResource = new ClassPathResource("test/"+gzFile, getClass()); assertEquals(gzResource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, - resolved instanceof ResolvedResource); + assertTrue("Expected " + resolved + " to be of type " + HttpResource.class, + resolved instanceof HttpResource); // resolved resource is now cached in CachingResourceResolver @@ -165,8 +165,8 @@ public class GzipResourceResolverTests { Resource resource = new ClassPathResource("test/"+file, getClass()); assertEquals(resource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertFalse("Expected " + resolved + " to *not* be of type " + ResolvedResource.class, - resolved instanceof ResolvedResource); + assertFalse("Expected " + resolved + " to *not* be of type " + HttpResource.class, + resolved instanceof HttpResource); } @Test // SPR-13149 @@ -178,7 +178,7 @@ public class GzipResourceResolverTests { Resource gzResource = new ClassPathResource("test/" + gzFile, getClass()); assertEquals(gzResource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, - resolved instanceof ResolvedResource); + assertTrue("Expected " + resolved + " to be of type " + HttpResource.class, + resolved instanceof HttpResource); } } diff --git a/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/VersionResourceResolverTests.java b/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/VersionResourceResolverTests.java index 948e89519a..6d71dce9fe 100644 --- a/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/VersionResourceResolverTests.java +++ b/spring-web-reactive/src/test/java/org/springframework/web/reactive/resource/VersionResourceResolverTests.java @@ -163,8 +163,8 @@ public class VersionResourceResolverTests { Resource actual = this.resolver.resolveResourceInternal(exchange, versionFile, this.locations, this.chain); assertEquals(expected.getFilename(), actual.getFilename()); verify(this.versionStrategy, times(1)).getResourceVersion(expected); - assertThat(actual, instanceOf(ResolvedResource.class)); - assertEquals("\"" + version + "\"", ((ResolvedResource)actual).getResponseHeaders().getETag()); + assertThat(actual, instanceOf(HttpResource.class)); + assertEquals("\"" + version + "\"", ((HttpResource)actual).getResponseHeaders().getETag()); } @Test diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/GzipResourceResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/GzipResourceResolver.java index 040644fd4a..91f06eccaf 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/GzipResourceResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/GzipResourceResolver.java @@ -78,7 +78,7 @@ public class GzipResourceResolver extends AbstractResourceResolver { } - private static final class GzippedResource extends AbstractResource implements ResolvedResource { + private static final class GzippedResource extends AbstractResource implements HttpResource { private final Resource original; @@ -145,8 +145,8 @@ public class GzipResourceResolver extends AbstractResourceResolver { @Override public HttpHeaders getResponseHeaders() { HttpHeaders headers; - if(this.original instanceof ResolvedResource) { - headers = ((ResolvedResource) this.original).getResponseHeaders(); + if(this.original instanceof HttpResource) { + headers = ((HttpResource) this.original).getResponseHeaders(); } else { headers = new HttpHeaders(); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/HttpResource.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/HttpResource.java new file mode 100644 index 0000000000..f555f40970 --- /dev/null +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/HttpResource.java @@ -0,0 +1,21 @@ +package org.springframework.web.servlet.resource; + +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; + +/** + * Extended interface for a {@link Resource} to be written to an + * HTTP response. + * + * @author Brian Clozel + * @since 5.0 + */ +public interface HttpResource extends Resource { + + /** + * The HTTP headers to be contributed to the HTTP response + * that serves the current resource. + * @return the HTTP response headers + */ + HttpHeaders getResponseHeaders(); +} diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResolvedResource.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResolvedResource.java deleted file mode 100644 index fd1261cc5c..0000000000 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResolvedResource.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.springframework.web.servlet.resource; - -import org.springframework.core.io.Resource; -import org.springframework.http.HttpHeaders; - -/** - * Interface for resources resolved through the - * {@link org.springframework.web.servlet.resource.ResourceResolverChain} - * that may contribute HTTP response headers as they're served to HTTP clients. - * - *

Some resource implementations, while served by the - * {@link org.springframework.web.servlet.resource.ResourceResolverChain} need - * to contribute resource metadata as HTTP response headers so that HTTP clients - * can interpret them properly. - * - * @author Brian Clozel - * @since 5.0 - */ -public interface ResolvedResource extends Resource { - - /** - * The HTTP headers to be contributed to the HTTP response - * that serves the current resource. - * @return the HTTP response headers - */ - HttpHeaders getResponseHeaders(); -} diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java index 0b6fc850bb..e0d6d8441c 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java @@ -542,8 +542,8 @@ public class ResourceHttpRequestHandler extends WebContentGenerator if (mediaType != null) { response.setContentType(mediaType.toString()); } - if (resource instanceof ResolvedResource) { - HttpHeaders resourceHeaders = ((ResolvedResource) resource).getResponseHeaders(); + if (resource instanceof HttpResource) { + HttpHeaders resourceHeaders = ((HttpResource) resource).getResponseHeaders(); resourceHeaders.toSingleValueMap().entrySet() .stream().forEach(entry -> response.setHeader(entry.getKey(), entry.getValue())); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/VersionResourceResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/VersionResourceResolver.java index ad9f45ca22..3237c6cb2c 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/VersionResourceResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/VersionResourceResolver.java @@ -239,7 +239,7 @@ public class VersionResourceResolver extends AbstractResourceResolver { } - private class FileNameVersionedResource extends AbstractResource implements ResolvedResource { + private class FileNameVersionedResource extends AbstractResource implements HttpResource { private final Resource original; @@ -318,8 +318,8 @@ public class VersionResourceResolver extends AbstractResourceResolver { @Override public HttpHeaders getResponseHeaders() { HttpHeaders headers; - if(this.original instanceof ResolvedResource) { - headers = ((ResolvedResource) this.original).getResponseHeaders(); + if(this.original instanceof HttpResource) { + headers = ((HttpResource) this.original).getResponseHeaders(); } else { headers = new HttpHeaders(); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/GzipResourceResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/GzipResourceResolverTests.java index cbbfd38477..74b58fe1f2 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/GzipResourceResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/GzipResourceResolverTests.java @@ -111,8 +111,8 @@ public class GzipResourceResolverTests { Resource resource = new ClassPathResource("test/"+gzFile, getClass()); assertEquals(resource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, - resolved instanceof ResolvedResource); + assertTrue("Expected " + resolved + " to be of type " + HttpResource.class, + resolved instanceof HttpResource); } @Test @@ -126,8 +126,8 @@ public class GzipResourceResolverTests { Resource resource = new ClassPathResource("test/"+gzFile, getClass()); assertEquals(resource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/"+file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, - resolved instanceof ResolvedResource); + assertTrue("Expected " + resolved + " to be of type " + HttpResource.class, + resolved instanceof HttpResource); } @Test @@ -141,8 +141,8 @@ public class GzipResourceResolverTests { Resource gzResource = new ClassPathResource("test/"+gzFile, getClass()); assertEquals(gzResource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, - resolved instanceof ResolvedResource); + assertTrue("Expected " + resolved + " to be of type " + HttpResource.class, + resolved instanceof HttpResource); // resolved resource is now cached in CachingResourceResolver @@ -152,8 +152,8 @@ public class GzipResourceResolverTests { Resource resource = new ClassPathResource("test/"+file, getClass()); assertEquals(resource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertFalse("Expected " + resolved + " to *not* be of type " + ResolvedResource.class, - resolved instanceof ResolvedResource); + assertFalse("Expected " + resolved + " to *not* be of type " + HttpResource.class, + resolved instanceof HttpResource); } @Test // SPR-13149 @@ -165,8 +165,8 @@ public class GzipResourceResolverTests { Resource gzResource = new ClassPathResource("test/"+gzFile, getClass()); assertEquals(gzResource.getDescription(), resolved.getDescription()); assertEquals(new ClassPathResource("test/" + file).getFilename(), resolved.getFilename()); - assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class, - resolved instanceof ResolvedResource); + assertTrue("Expected " + resolved + " to be of type " + HttpResource.class, + resolved instanceof HttpResource); } } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/VersionResourceResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/VersionResourceResolverTests.java index 65f9d10865..237396f68d 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/VersionResourceResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/VersionResourceResolverTests.java @@ -150,8 +150,8 @@ public class VersionResourceResolverTests { Resource actual = this.resolver.resolveResourceInternal(request, versionFile, this.locations, this.chain); assertEquals(expected.getFilename(), actual.getFilename()); verify(this.versionStrategy, times(1)).getResourceVersion(expected); - assertThat(actual, instanceOf(ResolvedResource.class)); - assertEquals("\"" + version + "\"", ((ResolvedResource)actual).getResponseHeaders().getETag()); + assertThat(actual, instanceOf(HttpResource.class)); + assertEquals("\"" + version + "\"", ((HttpResource)actual).getResponseHeaders().getETag()); } @Test