You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2019/09/09 06:10:58 UTC
svn commit: r1866650 -
/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
Author: kwin
Date: Mon Sep 9 06:10:58 2019
New Revision: 1866650
URL: http://svn.apache.org/viewvc?rev=1866650&view=rev
Log:
JCRVLT-352 fix leak of JarFile
Modified:
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java?rev=1866650&r1=1866649&r2=1866650&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java Mon Sep 9 06:10:58 2019
@@ -34,7 +34,6 @@ import org.apache.commons.io.IOUtils;
import org.apache.jackrabbit.vault.fs.api.VaultInputSource;
import org.apache.jackrabbit.vault.fs.io.Archive;
import org.apache.jackrabbit.vault.packaging.InstallContext;
-import org.apache.jackrabbit.vault.packaging.InstallContext.Phase;
import org.apache.jackrabbit.vault.packaging.InstallHook;
import org.apache.jackrabbit.vault.packaging.InstallHookProcessor;
import org.apache.jackrabbit.vault.packaging.PackageException;
@@ -195,53 +194,53 @@ public class InstallHookProcessorImpl im
private void init() throws IOException, PackageException {
try {
- if (jarFile != null) {
- // open jar file and get manifest
- JarFile jar = new JarFile(jarFile);
- Manifest mf = jar.getManifest();
- if (mf == null) {
- throw new PackageException("hook jar file does not have a manifest: " + name);
- }
- mainClassName = mf.getMainAttributes().getValue("Main-Class");
- if (mainClassName == null) {
- throw new PackageException("hook manifest file does not have a Main-Class entry: " + name);
- }
- // create classloader
- if (parentClassLoader == null) {
- try {
- // 1st fallback is the current classes classloader (the bundle classloader in the OSGi context)
- loadMainClass(URLClassLoader.newInstance(
- new URL[]{jarFile.toURI().toURL()},
- this.getClass().getClassLoader()));
- } catch (ClassNotFoundException cnfe) {
- // 2nd fallback is the thread context classloader
- loadMainClass(URLClassLoader.newInstance(
- new URL[]{jarFile.toURI().toURL()},
- Thread.currentThread().getContextClassLoader()));
- }
- } else {
- loadMainClass(URLClassLoader.newInstance(
- new URL[]{jarFile.toURI().toURL()},
- parentClassLoader));
- }
- } else {
- // create classloader
- if (parentClassLoader == null) {
- try {
- // 1st fallback is the current classes classloader (the bundle classloader in the OSGi context)
- loadMainClass(this.getClass().getClassLoader());
- } catch (ClassNotFoundException cnfe) {
- // 2nd fallback is the thread context classloader
- loadMainClass(Thread.currentThread().getContextClassLoader());
- }
- } else {
- loadMainClass(parentClassLoader);
- }
- }
+ if (jarFile != null) {
+ // open jar file and extract classname from manifest
+ try (JarFile jar = new JarFile(jarFile)) {
+ Manifest mf = jar.getManifest();
+ if (mf == null) {
+ throw new PackageException("hook jar file does not have a manifest: " + name);
+ }
+ mainClassName = mf.getMainAttributes().getValue("Main-Class");
+ if (mainClassName == null) {
+ throw new PackageException("hook manifest file does not have a Main-Class entry: " + name);
+ }
+ }
+ // create classloader
+ if (parentClassLoader == null) {
+ try {
+ // 1st fallback is the current classes classloader (the bundle classloader in the OSGi context)
+ loadMainClass(URLClassLoader.newInstance(
+ new URL[] { jarFile.toURI().toURL() },
+ this.getClass().getClassLoader()));
+ } catch (ClassNotFoundException cnfe) {
+ // 2nd fallback is the thread context classloader
+ loadMainClass(URLClassLoader.newInstance(
+ new URL[] { jarFile.toURI().toURL() },
+ Thread.currentThread().getContextClassLoader()));
+ }
+ } else {
+ loadMainClass(URLClassLoader.newInstance(
+ new URL[] { jarFile.toURI().toURL() },
+ parentClassLoader));
+ }
+ } else {
+ // create classloader
+ if (parentClassLoader == null) {
+ try {
+ // 1st fallback is the current classes classloader (the bundle classloader in the OSGi context)
+ loadMainClass(this.getClass().getClassLoader());
+ } catch (ClassNotFoundException cnfe) {
+ // 2nd fallback is the thread context classloader
+ loadMainClass(Thread.currentThread().getContextClassLoader());
+ }
+ } else {
+ loadMainClass(parentClassLoader);
+ }
+ }
} catch (ClassNotFoundException cnfe) {
throw new PackageException("hook's main class " + mainClassName + " not found: " + name, cnfe);
}
-
}
private void loadMainClass(ClassLoader classLoader) throws PackageException, ClassNotFoundException {