Describe the bug

The following method in SpringSecurityCoreVersion.java does not close the stream it opens. This keeps the file locked on Windows:

private static String getSpringVersion() {
  Properties properties = new Properties();
  try {
   properties.load(SpringSecurityCoreVersion.class.getClassLoader()
     .getResourceAsStream("META-INF/spring-security.versions"));
  }
  catch (IOException | NullPointerException ex) {
    return null;
  }
    return properties.getProperty("org.springframework:spring-core");
 }

This causes a problem when using WebSphere Liberty. When customer tries to update the application, spring-security-core-5.2.1.RELEASE.jar is locked.

I traced opens and closes of ZipFiles. The stack trace below is for the open that was never closed :

[err] open of ZipFile D:\WebSphere\Liberty\usr\servers\server1\workarea\org.eclipse.osgi\59\data\cache\com.ibm.ws.app.manager_67.cache\WEB-INF\lib\ spring-security-core-5.2.1.RELEASE.jar : -1020332453 [err] java.util.zip.ZipFile.dumpstack(ZipFile.java:160) [err] java.util.zip.ZipFile.dumpstack(ZipFile.java:160) [err] java.util.zip.ZipFile.(ZipFile.java:295) [err] java.util.zip.ZipFile.(ZipFile.java:224) [err] java.util.zip.ZipFile.(ZipFile.java:238) [err] com.ibm.ws.artifact.zip.cache.internal.ZipFileUtils$1.run(ZipFileUtils.java:39) [err] com.ibm.ws.artifact.zip.cache.internal.ZipFileUtils$1.run(ZipFileUtils.java:36) [err] java.security.AccessController.doPrivileged(AccessController.java:696) [err] com.ibm.ws.artifact.zip.cache.internal.ZipFileUtils.openZipFile(ZipFileUtils.java:36) [err] com.ibm.ws.artifact.zip.cache.internal.ZipFileUtils.openZipFile(ZipFileUtils.java:28) [err] com.ibm.ws.artifact.zip.cache.internal.ZipFileData.openZipFile(ZipFileData.java:728) [err] com.ibm.ws.artifact.zip.cache.internal.ZipFileData.openZipFile(ZipFileData.java:689) [err] com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper.open(ZipFileReaper.java:1579) [err] com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper.open(ZipFileReaper.java:1526) [err] com.ibm.ws.artifact.zip.cache.internal.ZipFileHandleImpl.open(ZipFileHandleImpl.java:164) [err] com.ibm.ws.artifact.url.internal.WSJarURLStreamHandler$WSJarURLConnectionImpl.getInputStreamInternal(WSJarURLStreamHandler.java:262) [err] com.ibm.ws.artifact.url.internal.WSJarURLStreamHandler$WSJarURLConnectionImpl.getInputStream(WSJarURLStreamHandler.java:249) [err] java.net.URL.openStream(URL.java:1057) [err] java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:699) [err] org.springframework.security.core.SpringSecurityCoreVersion.getSpringVersion(SpringSecurityCoreVersion.java:112) [err] org.springframework.security.core.SpringSecurityCoreVersion.(SpringSecurityCoreVersion.java:46) [err] org.springframework.security.config.SecurityNamespaceHandler.(SecurityNamespaceHandler.java:68) [err] sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [err] sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:83) [err] sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:57) [err] java.lang.reflect.Constructor.newInstance(Constructor.java:437) [err] org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:200) [err] org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:135) [err] org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver.resolve(DefaultNamespaceHandlerResolver.java:134) [err] org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1386) [err] org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1371) [err] org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:179) [err] org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:149) [err] org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:96) [err] org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:514) [err] org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:394) [err] org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:337) [err] org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:305) [err] org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188) [err] org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:224) [err] org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:234) [err] org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:191) [err] org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:176) [err] org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:149) [err] org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:96) [err] org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:514) [err] org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:394) [err] org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:337) [err] org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:305) [err] org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188) [err] org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:224) [err] org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:195) [err] org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125) [err] org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94) [err] org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:133) [err] org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:637) [err] org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:522) [err] org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:401) [err] org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:292) [err] org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103) [err] com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:2433) [err] com.ibm.ws.webcontainer31.osgi.webapp.WebApp31.notifyServletContextCreated(WebApp31.java:514) [err] com.ibm.ws.webcontainer.webapp.WebApp.initialize(WebApp.java:1037) [err] com.ibm.ws.webcontainer.webapp.WebApp.initialize(WebApp.java:6663) [err] com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.startWebApp(DynamicVirtualHost.java:467) [err] com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.startWebApplication(DynamicVirtualHost.java:462) [err] com.ibm.ws.webcontainer.osgi.WebContainer.startWebApplication(WebContainer.java:1175) [err] com.ibm.ws.webcontainer.osgi.WebContainer.access$100(WebContainer.java:109) [err] com.ibm.ws.webcontainer.osgi.WebContainer$3.run(WebContainer.java:975) [err] com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:239) [err] java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:522) [err] java.util.concurrent.FutureTask.run(FutureTask.java:277) [err] java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1160) [err] java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [err] java.lang.Thread.run(Thread.java:811)

Comment From: jzheaux

This makes sense to me, @jimblye. Would you be able to submit a PR to address the issue?