Add ResolvedResource in resource handling chain
Prior to this commit, the resource handling chain and its `ResourceResolvers` would use specific `Resource` implementations in order to add resource metadata to the HTTP response. For example, `VersionedResource` and `EncodedResource` are both adding specific HTTP response headers. This commit aims at making this mechanism more stable and reusable, since the previous implementation would fail in case a resolved resource would be both a `VersionedResource` wrapping a `EncodedResource` (or the other way arount). Only one of the specific implementations would contribute its metadata since the code supporting that in `ResourceHttpRequestHandler` would only check for `instanceof` tests, whereas those implementations are acutally delegating calls to the wrapped resource. Now both `VersionedResource` and `EncodedResource` have been replaced by specific implementations of `ResolvedResource`, which directly provides those HTTP response headers as part of `getResponseHeaders()`. This commit applies the same changes for the web reactive implementations and its `ResourceWebHandler`. Issue: SPR-14264
This commit is contained in:
@@ -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 " + EncodedResource.class,
|
||||
resolved instanceof EncodedResource);
|
||||
assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class,
|
||||
resolved instanceof ResolvedResource);
|
||||
}
|
||||
|
||||
@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 " + EncodedResource.class,
|
||||
resolved instanceof EncodedResource);
|
||||
assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class,
|
||||
resolved instanceof ResolvedResource);
|
||||
}
|
||||
|
||||
@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 " + EncodedResource.class,
|
||||
resolved instanceof EncodedResource);
|
||||
assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class,
|
||||
resolved instanceof ResolvedResource);
|
||||
|
||||
// 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 " + EncodedResource.class,
|
||||
resolved instanceof EncodedResource);
|
||||
assertFalse("Expected " + resolved + " to *not* be of type " + ResolvedResource.class,
|
||||
resolved instanceof ResolvedResource);
|
||||
}
|
||||
|
||||
@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 " + EncodedResource.class,
|
||||
resolved instanceof EncodedResource);
|
||||
assertTrue("Expected " + resolved + " to be of type " + ResolvedResource.class,
|
||||
resolved instanceof ResolvedResource);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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(VersionedResource.class));
|
||||
assertEquals(version, ((VersionedResource)actual).getVersion());
|
||||
assertThat(actual, instanceOf(ResolvedResource.class));
|
||||
assertEquals("\"" + version + "\"", ((ResolvedResource)actual).getResponseHeaders().getETag());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user