From 2f6413b007d1cdc54b43da3133eda94e60a08b37 Mon Sep 17 00:00:00 2001 From: Maksymilian Pawlak <120831+m4ksio@users.noreply.github.com> Date: Tue, 27 Feb 2018 09:56:24 +0000 Subject: [PATCH] Better handling of classloader closing --- .../kotlin/net/corda/nodeapi/internal/ClassloaderUtils.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/node-api/src/main/kotlin/net/corda/nodeapi/internal/ClassloaderUtils.kt b/node-api/src/main/kotlin/net/corda/nodeapi/internal/ClassloaderUtils.kt index 49739303a1..124cda119d 100644 --- a/node-api/src/main/kotlin/net/corda/nodeapi/internal/ClassloaderUtils.kt +++ b/node-api/src/main/kotlin/net/corda/nodeapi/internal/ClassloaderUtils.kt @@ -24,10 +24,9 @@ fun scanJarForContracts(cordappJarPath: String): List { val contracts = (scanResult.getNamesOfClassesImplementing(Contract::class.qualifiedName) ).distinct() // Only keep instantiable contracts - val classLoader = URLClassLoader(arrayOf(File(cordappJarPath).toURL()), currentClassLoader) - val concreteContracts = contracts.map(classLoader::loadClass).filter { !it.isInterface && !Modifier.isAbstract(it.modifiers) } - classLoader.close() - return concreteContracts.map { it.name } + return URLClassLoader(arrayOf(File(cordappJarPath).toURL()), currentClassLoader).use { + contracts.map(it::loadClass).filter { !it.isInterface && !Modifier.isAbstract(it.modifiers) } + }.map { it.name } } fun withContractsInJar(jarInputStream: InputStream, withContracts: (List, InputStream) -> T): T {