Skip to content

Commit c592e71

Browse files
committed
Override missing methods in FilteredClassLoader
Closes gh-16404
1 parent 23d2379 commit c592e71

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/FilteredClassLoader.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@
1616

1717
package org.springframework.boot.test.context;
1818

19+
import java.io.IOException;
20+
import java.io.InputStream;
1921
import java.net.URL;
2022
import java.net.URLClassLoader;
2123
import java.util.Arrays;
2224
import java.util.Collection;
2325
import java.util.Collections;
26+
import java.util.Enumeration;
2427
import java.util.function.Predicate;
2528

2629
import org.springframework.core.io.ClassPathResource;
@@ -109,6 +112,26 @@ public URL getResource(String name) {
109112
return super.getResource(name);
110113
}
111114

115+
@Override
116+
public Enumeration<URL> getResources(String name) throws IOException {
117+
for (Predicate<String> filter : this.resourcesFilters) {
118+
if (filter.test(name)) {
119+
return Collections.emptyEnumeration();
120+
}
121+
}
122+
return super.getResources(name);
123+
}
124+
125+
@Override
126+
public InputStream getResourceAsStream(String name) {
127+
for (Predicate<String> filter : this.resourcesFilters) {
128+
if (filter.test(name)) {
129+
return null;
130+
}
131+
}
132+
return super.getResourceAsStream(name);
133+
}
134+
112135
/**
113136
* Filter to restrict the classes that can be loaded.
114137
*/

spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/context/FilteredClassLoaderTests.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616

1717
package org.springframework.boot.test.context;
1818

19+
import java.io.InputStream;
1920
import java.net.URL;
21+
import java.util.Enumeration;
2022

2123
import org.junit.Test;
2224

@@ -81,4 +83,44 @@ public void loadResourceWhenNotFilteredShouldLoadResource() throws Exception {
8183
}
8284
}
8385

86+
@Test
87+
public void loadResourcesWhenFilteredOnResourceShouldReturnNotFound()
88+
throws Exception {
89+
try (FilteredClassLoader classLoader = new FilteredClassLoader(TEST_RESOURCE)) {
90+
final Enumeration<URL> loaded = classLoader
91+
.getResources(TEST_RESOURCE.getPath());
92+
assertThat(loaded.hasMoreElements()).isFalse();
93+
}
94+
}
95+
96+
@Test
97+
public void loadResourcesWhenNotFilteredShouldLoadResource() throws Exception {
98+
try (FilteredClassLoader classLoader = new FilteredClassLoader(
99+
(resourceName) -> false)) {
100+
final Enumeration<URL> loaded = classLoader
101+
.getResources(TEST_RESOURCE.getPath());
102+
assertThat(loaded.hasMoreElements()).isTrue();
103+
}
104+
}
105+
106+
@Test
107+
public void loadResourceAsStreamWhenFilteredOnResourceShouldReturnNotFound()
108+
throws Exception {
109+
try (FilteredClassLoader classLoader = new FilteredClassLoader(TEST_RESOURCE)) {
110+
final InputStream loaded = classLoader
111+
.getResourceAsStream(TEST_RESOURCE.getPath());
112+
assertThat(loaded).isNull();
113+
}
114+
}
115+
116+
@Test
117+
public void loadResourceAsStreamWhenNotFilteredShouldLoadResource() throws Exception {
118+
try (FilteredClassLoader classLoader = new FilteredClassLoader(
119+
(resourceName) -> false)) {
120+
final InputStream loaded = classLoader
121+
.getResourceAsStream(TEST_RESOURCE.getPath());
122+
assertThat(loaded).isNotNull();
123+
}
124+
}
125+
84126
}

0 commit comments

Comments
 (0)