.../core/config/plugins/util/ResolverUtil.java | 24 +++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/ResolverUtil.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/ResolverUtil.java index 6d9178c..370291e 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/ResolverUtil.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/ResolverUtil.java @@ -20,6 +20,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; @@ -202,10 +203,27 @@ public class ResolverUtil { final String containerPath = urlPath.substring(1, urlPath.length() - packageName.length() - 2); final File containerFile = new File(containerPath); - if (containerFile.isDirectory()) { - loadImplementationsInDirectory(test, packageName, new File(containerFile, packageName)); + if (containerFile.exists()) { + if (containerFile.isDirectory()) { + loadImplementationsInDirectory(test, packageName, new File(containerFile, packageName)); + } else { + loadImplementationsInJar(test, packageName, containerFile); + } } else { - loadImplementationsInJar(test, packageName, containerFile); + // fallback code for JBOSS, if the file couldn't be found + // by loading the path as a file, try to read the jar as a stream + final String path = urlPath.substring(0, urlPath.length() - packageName.length() - 2); + final URL newURL = new URL(url.getProtocol(), url.getHost(), path); + + try (final InputStream is = newURL.openStream()){ + final JarInputStream jarStream; + if (is instanceof JarInputStream){ + jarStream = (JarInputStream) is; + } else { + jarStream = new JarInputStream(is); + } + loadImplementationsInJar(test, packageName, path, jarStream); + } } } else if (BUNDLE_RESOURCE.equals(url.getProtocol())) { loadImplementationsInBundle(test, packageName);