From 86eebb78f7fd02fd874ec57b2c4d48395242090d Mon Sep 17 00:00:00 2001 From: Yass Almardoud Date: Fri, 12 Jul 2024 13:45:16 +0200 Subject: [PATCH] #419 throw exception including path in ClasspathRuleSource if an invalid resource is referenced --- .../rule/api/source/ClasspathRuleSource.java | 20 +++++++++---------- .../api/source/ClasspathRuleSourceTest.java | 12 ++++++++++- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/core/rule/src/main/java/com/buschmais/jqassistant/core/rule/api/source/ClasspathRuleSource.java b/core/rule/src/main/java/com/buschmais/jqassistant/core/rule/api/source/ClasspathRuleSource.java index d1d3566a17..b496159358 100644 --- a/core/rule/src/main/java/com/buschmais/jqassistant/core/rule/api/source/ClasspathRuleSource.java +++ b/core/rule/src/main/java/com/buschmais/jqassistant/core/rule/api/source/ClasspathRuleSource.java @@ -17,24 +17,27 @@ public class ClasspathRuleSource extends RuleSource { public static final String RULE_RESOURCE_PATH = "META-INF/jqassistant-rules"; private final ClassLoader classLoader; - private final String resource; private final String relativePath; + private final URL resource; public ClasspathRuleSource(ClassLoader classLoader, String relativePath) { this.classLoader = classLoader; this.relativePath = relativePath; - this.resource = RULE_RESOURCE_PATH + "/" + relativePath; - + String classpathResource = RULE_RESOURCE_PATH + "/" + relativePath; + this.resource = getClassLoader().getResource(classpathResource); + if (this.resource == null) { + throw new IllegalArgumentException("Cannot find rule resource in classpath: " + classpathResource); + } } @Override public String getId() { - return resource; + return resource.toString(); } @Override public URL getURL() { - return getClassLoader().getResource(resource); + return resource; } @Override @@ -49,12 +52,7 @@ public String getRelativePath() { @Override public InputStream getInputStream() throws IOException { - ClassLoader currentClassloader = getClassLoader(); - InputStream stream = currentClassloader.getResourceAsStream(resource); - if (stream == null) { - throw new IOException("Cannot load resource from " + resource); - } - return stream; + return resource.openStream(); } private ClassLoader getClassLoader() { diff --git a/core/rule/src/test/java/com/buschmais/jqassistant/core/rule/api/source/ClasspathRuleSourceTest.java b/core/rule/src/test/java/com/buschmais/jqassistant/core/rule/api/source/ClasspathRuleSourceTest.java index e6c717be54..e50e40c4d4 100644 --- a/core/rule/src/test/java/com/buschmais/jqassistant/core/rule/api/source/ClasspathRuleSourceTest.java +++ b/core/rule/src/test/java/com/buschmais/jqassistant/core/rule/api/source/ClasspathRuleSourceTest.java @@ -3,14 +3,24 @@ import java.util.List; import java.util.stream.Stream; +import org.junit.jupiter.api.Test; + import static java.util.stream.Collectors.toList; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; class ClasspathRuleSourceTest extends AbstractRuleSourceTest { @Override protected List getRuleSources() { return Stream.of("rules.xml", "index.adoc", "readme.md", "subdirectory/rules.xml") - .map(relativePath -> new ClasspathRuleSource(ClasspathRuleSourceTest.class.getClassLoader(), relativePath)).collect(toList()); + .map(relativePath -> new ClasspathRuleSource(ClasspathRuleSourceTest.class.getClassLoader(), relativePath)) + .collect(toList()); + } + + @Test + void nonExistingResource() { + assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> new ClasspathRuleSource(this.getClass() + .getClassLoader(), "non-existing.xml")); } }