From 0bf30a4bfc4e8619502053b5ee4b4ec4f9d5b6d3 Mon Sep 17 00:00:00 2001 From: Gabor Liptak Date: Thu, 14 Sep 2023 17:47:12 +0200 Subject: [PATCH] HSEARCH-4947 - fixing loading jar files on windows --- .../search/util/common/jar/impl/CodeSource.java | 2 +- .../search/util/common/jar/impl/CodeSourceTest.java | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/util/common/src/main/java/org/hibernate/search/util/common/jar/impl/CodeSource.java b/util/common/src/main/java/org/hibernate/search/util/common/jar/impl/CodeSource.java index 83cd3bf43f2..cbaed1fae29 100644 --- a/util/common/src/main/java/org/hibernate/search/util/common/jar/impl/CodeSource.java +++ b/util/common/src/main/java/org/hibernate/search/util/common/jar/impl/CodeSource.java @@ -150,7 +150,7 @@ else if ( "file".equals( codeSourceLocation.getProtocol() ) ) { else { // The URI points to a regular file, so hopefully an actual JAR file. // We'll try to open a ZIP filesystem to work on the contents of the JAR file. - URI jarUri = new URI( "jar:file", null, path.toString(), null ); + URI jarUri = new URI( "jar:file", null, codeSourceLocation.getPath(), null ); tryInitJarFileSystem( jarUri ); } } diff --git a/util/common/src/test/java/org/hibernate/search/util/common/jar/impl/CodeSourceTest.java b/util/common/src/test/java/org/hibernate/search/util/common/jar/impl/CodeSourceTest.java index 5b8b6714f98..a42779138de 100644 --- a/util/common/src/test/java/org/hibernate/search/util/common/jar/impl/CodeSourceTest.java +++ b/util/common/src/test/java/org/hibernate/search/util/common/jar/impl/CodeSourceTest.java @@ -27,6 +27,7 @@ import org.hibernate.search.util.impl.test.annotation.TestForIssue; import org.hibernate.search.util.impl.test.function.ThrowingConsumer; +import org.junit.Assume; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; @@ -389,6 +390,17 @@ public void directory_specialCharacter() throws Exception { } } + @Test + public void initFileSystem_windowsJar() throws IOException { + Assume.assumeTrue(System.getProperty("os.name").toLowerCase().contains("windows")); + Path jarPath = createJar( root -> { + addMetaInfFile( root ); + addSimpleClass( root ); + } ); + + new CodeSource(jarPath.toUri().toURL()).initFileSystem(); //Not getting an exception means it works + } + private Path createDir(ThrowingConsumer contributor) throws IOException { Path dirPath = temporaryFolder.newFolder().toPath(); contributor.accept( dirPath ); @@ -424,5 +436,4 @@ private void addSimpleClass(Path classesDir) throws IOException { private static URLClassLoader createIsolatedClassLoader(URL jarURL) { return new URLClassLoader( new URL[] { jarURL }, null ); } - }