From 3a55143a1d237b36df10a8962ef552f7839e16e9 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 2 May 2026 09:38:57 +0200 Subject: [PATCH] Remove use of File{Input,Ouput}Stream These two classes have a finalizer in Java 12, hence they are an unnecessary burden for GC. Use: - Files.newInputStream() instead of FileInputStream - Files.newBufferedReader() when we end up converting to a Writer - Files.readAllBytes() if we end up reading the stream - Files.copy() if we are copying the stream to another stream or file - Files.writeString() when we are emitting just a plain string - Files.newOutputStream() instead of FileOutputStream - Files.newBufferedReader() when we end up conerting to a Writer Signed-off-by: Robert Varga --- .../apache/karaf/bundle/command/Update.java | 7 +- .../core/internal/BundleWatcherImpl.java | 7 +- .../core/internal/MavenConfigService.java | 12 +-- .../java/org/apache/karaf/client/Main.java | 12 ++- .../karaf/config/command/InstallCommand.java | 11 +-- .../config/core/impl/ConfigMBeanImpl.java | 11 +-- .../core/impl/ConfigRepositoryImpl.java | 11 ++- .../config/core/impl/JsonConfigInstaller.java | 12 ++- .../config/core/impl/ConfigMBeanImplTest.java | 12 +-- .../BlueprintDeploymentListenerTest.java | 90 ++++++++---------- .../features/FeatureDeploymentListener.java | 16 ++-- .../deployer/features/FeatureTransformer.java | 36 ++++--- .../kar/KarArtifactInstallerTest.java | 55 ++++------- .../spring/SpringDeploymentListener.java | 60 ++++++------ .../spring/SpringDeploymentListenerTest.java | 18 ++-- .../core/common/DirectoryDumpDestination.java | 6 +- .../core/common/ZipDumpDestination.java | 12 +-- .../core/providers/HeapDumpProvider.java | 6 +- .../download/impl/AbstractDownloadTask.java | 4 +- .../download/impl/SimpleDownloadTask.java | 15 +-- .../features/internal/osgi/Activator.java | 20 ++-- .../internal/region/DigraphHelper.java | 11 +-- .../service/BundleInstallSupportImpl.java | 4 +- .../features/internal/service/Deployer.java | 6 +- .../service/FeatureConfigInstaller.java | 53 ++++++----- .../internal/service/FeaturesServiceImpl.java | 11 +-- .../org/apache/karaf/features/AppendTest.java | 4 +- .../internal/repository/RepositoryTest.java | 16 ++-- .../internal/service/BlacklistTest.java | 7 +- .../instance/core/internal/InstanceImpl.java | 3 +- .../core/internal/InstanceServiceImpl.java | 30 ++---- .../internal/InstanceServiceImplTest.java | 21 ++--- .../itests/examples/ServletExampleTest.java | 7 +- jaas/blueprint/jasypt/pom.xml | 6 -- ...bleConfigAdminPropertyPlaceholderTest.java | 41 +++++--- .../EncryptablePropertyPlaceholderTest.java | 21 ++--- .../jaas/modules/ldap/LdapPoolingTest.java | 6 +- .../org/apache/karaf/kar/internal/Kar.java | 7 +- .../karaf/kar/internal/KarServiceImpl.java | 94 ++++++------------- .../apache/karaf/kar/internal/KarTest.java | 34 +++---- .../org/apache/karaf/main/InstanceHelper.java | 13 +-- .../java/org/apache/karaf/main/Status.java | 28 +++--- .../main/java/org/apache/karaf/main/Stop.java | 31 +++--- .../karaf/main/util/BootstrapLogManager.java | 31 ++---- .../karaf/obr/command/ObrCommandSupport.java | 11 +-- .../karaf/obr/command/util/FileUtil.java | 30 +----- .../karaf/obr/command/util/FileUtilTest.java | 39 ++++---- .../karaf/profile/assembly/Builder.java | 6 +- .../services/staticcm/Configurations.java | 5 +- .../karaf/shell/impl/console/Branding.java | 8 +- .../shell/impl/console/standalone/Main.java | 8 +- .../apache/karaf/shell/support/ShellUtil.java | 8 +- .../system/internal/SystemServiceImpl.java | 19 ++-- .../apache/karaf/tooling/AssemblyMojo.java | 10 +- .../org/apache/karaf/tooling/RunMojo.java | 15 ++- .../org/apache/karaf/tooling/VerifyMojo.java | 5 +- .../karaf/tooling/client/ClientMojo.java | 9 +- .../features/ExportFeatureMetaDataMojo.java | 10 +- .../features/GenerateDescriptorMojo.java | 26 ++++- .../tooling/utils/Dependency31Helper.java | 24 +++-- .../karaf/tooling/utils/MojoSupport.java | 27 +++--- .../tools/utils/KarafPropertiesFile.java | 9 +- .../utils/KarafPropertiesEditorTest.java | 8 +- .../apache/karaf/jpm/impl/ProcessImpl.java | 8 +- .../apache/karaf/jpm/impl/ScriptUtils.java | 3 +- .../org/apache/karaf/util/StreamUtils.java | 7 +- .../karaf/util/bundles/BundleUtils.java | 3 +- .../apache/karaf/util/BundleUtilsTest.java | 5 +- 68 files changed, 537 insertions(+), 684 deletions(-) diff --git a/bundle/core/src/main/java/org/apache/karaf/bundle/command/Update.java b/bundle/core/src/main/java/org/apache/karaf/bundle/command/Update.java index c1afe4429b1..1bbaddd023f 100644 --- a/bundle/core/src/main/java/org/apache/karaf/bundle/command/Update.java +++ b/bundle/core/src/main/java/org/apache/karaf/bundle/command/Update.java @@ -17,11 +17,10 @@ package org.apache.karaf.bundle.command; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; import java.net.URI; import java.net.URL; +import java.nio.file.Files; import org.apache.karaf.shell.api.action.Argument; import org.apache.karaf.shell.api.action.Command; @@ -65,12 +64,12 @@ protected Object doExecute(Bundle bundle) throws Exception { } private void update(Bundle bundle, URL location) throws IOException, BundleException { - try (InputStream is = location.openStream()) { + try (var is = location.openStream()) { if (raw) { bundle.update(is); } else { File file = BundleUtils.fixBundleWithUpdateLocation(is, location.toString()); - try (FileInputStream fis = new FileInputStream(file)) { + try (var fis = Files.newInputStream(file.toPath())) { bundle.update(fis); } file.delete(); diff --git a/bundle/core/src/main/java/org/apache/karaf/bundle/core/internal/BundleWatcherImpl.java b/bundle/core/src/main/java/org/apache/karaf/bundle/core/internal/BundleWatcherImpl.java index bebc8dff019..26ffde8c583 100644 --- a/bundle/core/src/main/java/org/apache/karaf/bundle/core/internal/BundleWatcherImpl.java +++ b/bundle/core/src/main/java/org/apache/karaf/bundle/core/internal/BundleWatcherImpl.java @@ -17,10 +17,9 @@ package org.apache.karaf.bundle.core.internal; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; import java.net.MalformedURLException; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -151,7 +150,7 @@ private void updateBundleIfNecessary(File localRepository, List updated, throws BundleException, IOException { File location = getBundleExternalLocation(localRepository, bundle); if (location != null && location.exists() && location.lastModified() > bundle.getLastModified()) { - try (InputStream is = new FileInputStream(location)) { + try (var is = Files.newInputStream(location.toPath())) { logger.info("[Watch] Updating watched bundle: {} ({})", bundle.getSymbolicName(), bundle.getVersion()); if (bundle.getHeaders().get(Constants.FRAGMENT_HOST) != null) { logger.info("[Watch] Bundle {} is a fragment, so it's not stopped", bundle.getSymbolicName()); @@ -162,7 +161,7 @@ private void updateBundleIfNecessary(File localRepository, List updated, String updateLocation = getLocation(bundle); if (!updateLocation.equals(bundle.getLocation())) { File file = BundleUtils.fixBundleWithUpdateLocation(is, updateLocation); - try (FileInputStream fis = new FileInputStream(file)) { + try (var fis = Files.newInputStream(file.toPath())) { bundle.update(fis); } file.delete(); diff --git a/bundle/core/src/main/java/org/apache/karaf/bundle/core/internal/MavenConfigService.java b/bundle/core/src/main/java/org/apache/karaf/bundle/core/internal/MavenConfigService.java index fce70702a96..ad427e1cb2e 100644 --- a/bundle/core/src/main/java/org/apache/karaf/bundle/core/internal/MavenConfigService.java +++ b/bundle/core/src/main/java/org/apache/karaf/bundle/core/internal/MavenConfigService.java @@ -17,8 +17,8 @@ package org.apache.karaf.bundle.core.internal; import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Dictionary; import javax.xml.stream.XMLInputFactory; @@ -76,20 +76,20 @@ static String getLocalRepoFromConfig(Dictionary dict) { if (path == null) { String settings = (String) dict.get("org.ops4j.pax.url.mvn.settings"); if (settings != null) { - path = getLocalRepositoryFromSettings(new File(settings)); + path = getLocalRepositoryFromSettings(Path.of(settings)); } } } return path; } - private static String getLocalRepositoryFromSettings(File file) { + private static String getLocalRepositoryFromSettings(Path file) { XMLStreamReader reader = null; - try (InputStream fin = new FileInputStream(file)) { + try (var is = Files.newInputStream(file)) { XMLInputFactory factory = XMLInputFactory.newFactory(); factory.setProperty(XMLInputFactory.SUPPORT_DTD, false); factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false); - reader = factory.createXMLStreamReader(fin); + reader = factory.createXMLStreamReader(is); int event; String elementName = null; while ((event = reader.next()) != XMLStreamConstants.END_DOCUMENT) { diff --git a/client/src/main/java/org/apache/karaf/client/Main.java b/client/src/main/java/org/apache/karaf/client/Main.java index 9d3a11c9991..8f9375fadf6 100644 --- a/client/src/main/java/org/apache/karaf/client/Main.java +++ b/client/src/main/java/org/apache/karaf/client/Main.java @@ -19,13 +19,13 @@ import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.Console; -import java.io.FileInputStream; import java.io.IOError; import java.io.IOException; import java.io.InputStreamReader; -import java.io.Reader; import java.lang.reflect.Proxy; import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import java.security.KeyPair; import java.time.Duration; @@ -76,7 +76,7 @@ public static void main(String[] args) throws Exception { if (config.getFile() != null) { StringBuilder sb = new StringBuilder(); sb.setLength(0); - try (Reader reader = new BufferedReader(new InputStreamReader(new FileInputStream(config.getFile())))) { + try (var reader = Files.newBufferedReader(Path.of(config.getFile()))) { for (int c = reader.read(); c >= 0; c = reader.read()) { sb.append((char) c); } @@ -85,7 +85,7 @@ public static void main(String[] args) throws Exception { } else if (config.isBatch()) { StringBuilder sb = new StringBuilder(); sb.setLength(0); - Reader reader = new BufferedReader(new InputStreamReader(System.in)); + var reader = new BufferedReader(new InputStreamReader(System.in)); for (int c = reader.read(); c >= 0; c = reader.read()) { sb.append((char) c); } @@ -106,6 +106,7 @@ public static void main(String[] args) throws Exception { public void welcome(ClientSession s, String banner, String lang) { System.out.println(banner); } + @Override public String[] interactive(ClientSession s, String name, String instruction, String lang, String[] prompt, boolean[] echo) { String[] answers = new String[prompt.length]; @@ -125,13 +126,16 @@ public String[] interactive(ClientSession s, String name, String instruction, St return null; } } + @Override public boolean isInteractionAllowed(ClientSession session) { return true; } + @Override public void serverVersionInfo(ClientSession session, List lines) { } + @Override public String getUpdatedPassword(ClientSession session, String prompt, String lang) { return null; diff --git a/config/command/src/main/java/org/apache/karaf/config/command/InstallCommand.java b/config/command/src/main/java/org/apache/karaf/config/command/InstallCommand.java index ea552267654..65033a5815e 100644 --- a/config/command/src/main/java/org/apache/karaf/config/command/InstallCommand.java +++ b/config/command/src/main/java/org/apache/karaf/config/command/InstallCommand.java @@ -21,14 +21,11 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.Option; import org.apache.karaf.shell.api.action.lifecycle.Service; -import org.apache.karaf.util.StreamUtils; -import java.io.BufferedInputStream; import java.io.File; -import java.io.FileOutputStream; -import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; +import java.nio.file.Files; @Command(scope = "config", name = "install", description = "Install a cfg file in the Karaf etc folder.") @Service @@ -60,7 +57,7 @@ public Object execute() throws Exception { System.out.println("Creating configuration file " + finalname); } - try (InputStream is = new BufferedInputStream(new URL(url).openStream())) { + try (var is = new URL(url).openStream()) { if (!file.exists()) { File parentFile = file.getParentFile(); if (parentFile != null) { @@ -68,9 +65,7 @@ public Object execute() throws Exception { } file.createNewFile(); } - try (FileOutputStream fop = new FileOutputStream(file)) { - StreamUtils.copy(is, fop); - } + Files.copy(is, file.toPath()); } catch (RuntimeException | MalformedURLException e) { throw e; } diff --git a/config/core/src/main/java/org/apache/karaf/config/core/impl/ConfigMBeanImpl.java b/config/core/src/main/java/org/apache/karaf/config/core/impl/ConfigMBeanImpl.java index 81e1fed4c93..a50098fc868 100644 --- a/config/core/src/main/java/org/apache/karaf/config/core/impl/ConfigMBeanImpl.java +++ b/config/core/src/main/java/org/apache/karaf/config/core/impl/ConfigMBeanImpl.java @@ -13,9 +13,11 @@ */ package org.apache.karaf.config.core.impl; -import java.io.*; +import java.io.File; +import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; +import java.nio.file.Files; import java.util.Arrays; import java.util.Dictionary; import java.util.HashMap; @@ -31,7 +33,6 @@ import org.apache.felix.utils.properties.TypedProperties; import org.apache.karaf.config.core.ConfigMBean; import org.apache.karaf.config.core.ConfigRepository; -import org.apache.karaf.util.StreamUtils; import org.osgi.framework.InvalidSyntaxException; import org.osgi.service.cm.Configuration; @@ -96,7 +97,7 @@ public void install(String url, String finalname, boolean override) throws MBean } } - try (InputStream is = new BufferedInputStream(new URL(url).openStream())) { + try (var is = new URL(url).openStream()) { if (!file.exists()) { File parentFile = file.getParentFile(); if (parentFile != null) { @@ -104,9 +105,7 @@ public void install(String url, String finalname, boolean override) throws MBean } file.createNewFile(); } - try (FileOutputStream fop = new FileOutputStream(file)) { - StreamUtils.copy(is, fop); - } + Files.copy(is, file.toPath()); } catch (RuntimeException | MalformedURLException e) { throw e; } diff --git a/config/core/src/main/java/org/apache/karaf/config/core/impl/ConfigRepositoryImpl.java b/config/core/src/main/java/org/apache/karaf/config/core/impl/ConfigRepositoryImpl.java index dba78bf2505..73a70c55847 100644 --- a/config/core/src/main/java/org/apache/karaf/config/core/impl/ConfigRepositoryImpl.java +++ b/config/core/src/main/java/org/apache/karaf/config/core/impl/ConfigRepositoryImpl.java @@ -17,7 +17,6 @@ package org.apache.karaf.config.core.impl; import java.io.File; -import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.net.MalformedURLException; @@ -128,7 +127,7 @@ public boolean exists(String pid) throws Exception { return true; } - private File getCfgFileFromProperties(Dictionary properties) throws URISyntaxException, MalformedURLException { + private static File getCfgFileFromProperties(Dictionary properties) throws URISyntaxException, MalformedURLException { if (properties != null) { Object val = properties.get(FILEINSTALL_FILE_NAME); return getCfgFileFromProperty(val); @@ -136,7 +135,7 @@ private File getCfgFileFromProperties(Dictionary properties) thr return null; } - private File getCfgFileFromProperty(Object val) throws URISyntaxException, MalformedURLException { + private static File getCfgFileFromProperty(Object val) throws URISyntaxException, MalformedURLException { if (val instanceof URL) { return new File(((URL) val).toURI()); } @@ -227,7 +226,9 @@ public ConfigurationAdmin getConfigAdmin() { static TypedProperties load(File file) throws IOException { TypedProperties props = new TypedProperties(); if (file.toURI().toString().endsWith(".json")) { - Hashtable configuration = Configurations.buildReader().build(new FileReader(file)).readConfiguration(); + Hashtable configuration = Configurations.buildReader() + .build(Files.newBufferedReader(file.toPath())) + .readConfiguration(); for (String key : configuration.keySet()) { props.put(key, configuration.get(key)); } @@ -239,7 +240,7 @@ static TypedProperties load(File file) throws IOException { void store(TypedProperties properties, File file) throws IOException { if (file.toURI().toString().endsWith(".json")) { - Configurations.buildWriter().build(new FileWriter(file)).writeConfiguration(new Hashtable<>(properties)); + Configurations.buildWriter().build(Files.newBufferedWriter(file.toPath())).writeConfiguration(new Hashtable<>(properties)); } else { properties.save(file); } diff --git a/config/core/src/main/java/org/apache/karaf/config/core/impl/JsonConfigInstaller.java b/config/core/src/main/java/org/apache/karaf/config/core/impl/JsonConfigInstaller.java index 1c82595b0a3..e4ea7f473eb 100644 --- a/config/core/src/main/java/org/apache/karaf/config/core/impl/JsonConfigInstaller.java +++ b/config/core/src/main/java/org/apache/karaf/config/core/impl/JsonConfigInstaller.java @@ -30,12 +30,12 @@ import org.slf4j.LoggerFactory; import java.io.File; -import java.io.FileReader; import java.io.FileWriter; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; +import java.nio.file.Files; import java.util.Arrays; import java.util.Dictionary; import java.util.Hashtable; @@ -61,7 +61,7 @@ public boolean canHandle(File artifact) { return artifact.getName().endsWith("." + getExtension()); } - private String getExtension() { + private static String getExtension() { String extension = (System.getenv(EXT_ENV_VAR) != null) ? System.getenv(EXT_ENV_VAR) : null; extension = (System.getProperty(EXT_SYS_PROP) != null) ? System.getProperty(EXT_SYS_PROP) : extension; if (extension == null) { @@ -91,7 +91,9 @@ private void setConfig(File artifact) throws Exception { Configuration configuration = getConfiguration(toConfigKey(artifact), configurationPID); Dictionary props = configuration.getProperties(); Hashtable old = props != null ? new Hashtable<>(new DictionaryAsMap<>(props)) : null; - Hashtable properties = Configurations.buildReader().build(new FileReader(artifact)).readConfiguration(); + Hashtable properties = Configurations.buildReader() + .build(Files.newBufferedReader(artifact.toPath())) + .readConfiguration(); if (old != null) { old.remove(DirectoryWatcher.FILENAME); old.remove(Constants.SERVICE_PID); @@ -162,7 +164,7 @@ public void configurationEvent(ConfigurationEvent event) { } } - private File getCfgFileFromProperty(Object val) throws URISyntaxException, MalformedURLException { + private static File getCfgFileFromProperty(Object val) throws URISyntaxException, MalformedURLException { if (val instanceof URL) { return new File(((URL) val).toURI()); } @@ -210,7 +212,7 @@ Configuration findExistingConfiguration(String configKey) throws Exception { } } - private String escapeFilterValue(String s) { + private static String escapeFilterValue(String s) { return s.replaceAll("[(]", "\\\\("). replaceAll("[)]", "\\\\)"). replaceAll("[=]", "\\\\="). diff --git a/config/core/src/test/java/org/apache/karaf/config/core/impl/ConfigMBeanImplTest.java b/config/core/src/test/java/org/apache/karaf/config/core/impl/ConfigMBeanImplTest.java index 4bdf08abf90..2387e08298d 100644 --- a/config/core/src/test/java/org/apache/karaf/config/core/impl/ConfigMBeanImplTest.java +++ b/config/core/src/test/java/org/apache/karaf/config/core/impl/ConfigMBeanImplTest.java @@ -16,9 +16,8 @@ import org.junit.Assert; import org.junit.Test; -import java.io.BufferedReader; import java.io.File; -import java.io.FileReader; +import java.nio.file.Files; public class ConfigMBeanImplTest { @@ -44,10 +43,11 @@ public void testInstall() throws Exception { Assert.assertTrue(output.exists()); StringBuilder builder = new StringBuilder(); - BufferedReader reader = new BufferedReader(new FileReader(output)); - String line = null; - while ((line = reader.readLine()) != null) { - builder.append(line).append("\n"); + try (var reader = Files.newBufferedReader(output.toPath())) { + String line = null; + while ((line = reader.readLine()) != null) { + builder.append(line).append("\n"); + } } Assert.assertTrue(builder.toString().contains("foo=bar")); } diff --git a/deployer/blueprint/src/test/java/org/apache/karaf/deployer/blueprint/BlueprintDeploymentListenerTest.java b/deployer/blueprint/src/test/java/org/apache/karaf/deployer/blueprint/BlueprintDeploymentListenerTest.java index d705c23ba49..4da38d19ca6 100644 --- a/deployer/blueprint/src/test/java/org/apache/karaf/deployer/blueprint/BlueprintDeploymentListenerTest.java +++ b/deployer/blueprint/src/test/java/org/apache/karaf/deployer/blueprint/BlueprintDeploymentListenerTest.java @@ -18,10 +18,7 @@ package org.apache.karaf.deployer.blueprint; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.io.OutputStream; +import java.nio.file.Files; import java.util.Iterator; import java.util.Set; import java.util.jar.JarInputStream; @@ -32,8 +29,8 @@ import junit.framework.TestCase; public class BlueprintDeploymentListenerTest extends TestCase { - - private static final String BLUEPRINT_ENTRY = "OSGI-INF/blueprint/"; + + private static final String BLUEPRINT_ENTRY = "OSGI-INF/blueprint/"; public void testPackagesExtraction() throws Exception { BlueprintDeploymentListener l = new BlueprintDeploymentListener(); @@ -48,13 +45,12 @@ public void testPackagesExtraction() throws Exception { public void testCustomManifest() throws Exception { File f = File.createTempFile("smx", ".jar"); try { - OutputStream os = new FileOutputStream(f); - BlueprintTransformer.transform(getClass().getClassLoader().getResource("test.xml"), os); - os.close(); - InputStream is = new FileInputStream(f); - JarInputStream jar = new JarInputStream(is); - jar.getManifest().write(System.err); - is.close(); + try (var os = Files.newOutputStream(f.toPath())) { + BlueprintTransformer.transform(getClass().getClassLoader().getResource("test.xml"), os); + } + try (var jar = new JarInputStream(Files.newInputStream(f.toPath()))) { + jar.getManifest().write(System.err); + } } finally { f.delete(); } @@ -62,58 +58,54 @@ public void testCustomManifest() throws Exception { // KARAF-1617 public void testAppendDescriptorFileExtension() throws Exception { - final String expectedFileName = "test-fileextension"; + final String expectedFileName = "test-fileextension"; File f = File.createTempFile("smx", ".jar"); try { - ZipEntry zipEntry = null; - OutputStream os = new FileOutputStream(f); - BlueprintTransformer.transform(getClass().getClassLoader().getResource(expectedFileName), os); - os.close(); - InputStream is = new FileInputStream(f); - JarInputStream jar = new JarInputStream(is); - while(true) { - zipEntry = jar.getNextEntry(); - if( null == zipEntry) { - break; - } - if ( zipEntry.getName() != null && zipEntry.getName().contains(expectedFileName)) { - break; + try (var os = Files.newOutputStream(f.toPath())) { + BlueprintTransformer.transform(getClass().getClassLoader().getResource(expectedFileName), os); + } + ZipEntry zipEntry = null; + try (var jar = new JarInputStream(Files.newInputStream(f.toPath()))) { + while (true) { + zipEntry = jar.getNextEntry(); + if (zipEntry == null) { + break; + } + if (zipEntry.getName() != null && zipEntry.getName().contains(expectedFileName)) { + break; + } } } - is.close(); - assertNotNull("blueprint service descriptor JAR file entry",zipEntry); - assertEquals(BLUEPRINT_ENTRY+expectedFileName+".xml",zipEntry.getName()); + assertNotNull("blueprint service descriptor JAR file entry", zipEntry); + assertEquals(BLUEPRINT_ENTRY + expectedFileName + ".xml", zipEntry.getName()); } finally { f.delete(); } - } public void testAppendNotTwiceDescriptorFileExtension() throws Exception { - final String expectedFileName = "test.xml"; + final String expectedFileName = "test.xml"; File f = File.createTempFile("smx", ".jar"); try { - ZipEntry zipEntry = null; - OutputStream os = new FileOutputStream(f); - BlueprintTransformer.transform(getClass().getClassLoader().getResource(expectedFileName), os); - os.close(); - InputStream is = new FileInputStream(f); - JarInputStream jar = new JarInputStream(is); - while(true) { - zipEntry = jar.getNextEntry(); - if( null == zipEntry) { - break; - } - if ( zipEntry.getName() != null && zipEntry.getName().contains(expectedFileName)) { - break; + try (var os = Files.newOutputStream(f.toPath())) { + BlueprintTransformer.transform(getClass().getClassLoader().getResource(expectedFileName), os); + } + ZipEntry zipEntry = null; + try (var jar = new JarInputStream(Files.newInputStream(f.toPath()))) { + while (true) { + zipEntry = jar.getNextEntry(); + if (zipEntry == null) { + break; + } + if (zipEntry.getName() != null && zipEntry.getName().contains(expectedFileName)) { + break; + } } } - is.close(); - assertNotNull("blueprint service descriptor JAR file entry",zipEntry); - assertEquals(BLUEPRINT_ENTRY+expectedFileName,zipEntry.getName()); + assertNotNull("blueprint service descriptor JAR file entry", zipEntry); + assertEquals(BLUEPRINT_ENTRY + expectedFileName, zipEntry.getName()); } finally { f.delete(); } - } } diff --git a/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureDeploymentListener.java b/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureDeploymentListener.java index 2d743792b5f..1b6e0f6a01b 100644 --- a/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureDeploymentListener.java +++ b/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureDeploymentListener.java @@ -16,9 +16,11 @@ */ package org.apache.karaf.deployer.features; -import java.io.*; +import java.io.File; +import java.io.IOException; import java.net.URI; import java.net.URL; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Arrays; import java.util.EnumSet; @@ -112,8 +114,8 @@ private void loadProperties() throws IOException { File file = getPropertiesFile(); if (file != null) { if (file.exists()) { - try (InputStream input = new FileInputStream(file)) { - properties.load(input); + try (var is = Files.newInputStream(file.toPath())) { + properties.load(is); } } } @@ -122,8 +124,8 @@ private void loadProperties() throws IOException { private void saveProperties() throws IOException { File file = getPropertiesFile(); if (file != null) { - try (OutputStream output = new FileOutputStream(file)) { - properties.store(output, null); + try (var os = Files.newOutputStream(file.toPath())) { + properties.store(os, null); } } } @@ -141,7 +143,7 @@ private File getPropertiesFile() { public boolean canHandle(File artifact) { try { if (artifact.isFile() && artifact.getName().endsWith(".json")) { - try (BufferedReader reader = new BufferedReader(new FileReader(artifact))) { + try (var reader = Files.newBufferedReader(artifact.toPath())) { String line; while ((line = reader.readLine()) != null) { if (line.contains("\"feature\"")) { @@ -269,7 +271,7 @@ private QName getRootElementName(File artifact) throws Exception { xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false); xif.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, true); } - try (InputStream is = new FileInputStream(artifact)) { + try (var is = Files.newInputStream(artifact.toPath())) { XMLStreamReader sr = xif.createXMLStreamReader(is); sr.nextTag(); return sr.getName(); diff --git a/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureTransformer.java b/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureTransformer.java index b7d4c9dce71..4f31d11aa1f 100644 --- a/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureTransformer.java +++ b/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureTransformer.java @@ -17,7 +17,6 @@ */ package org.apache.karaf.deployer.features; -import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.util.jar.JarFile; @@ -26,7 +25,6 @@ import java.util.zip.ZipEntry; import org.apache.karaf.util.DeployerUtils; -import org.apache.karaf.util.StreamUtils; import org.osgi.framework.Constants; /** @@ -49,25 +47,23 @@ public static void transform(URL url, OutputStream os) throws Exception { m.getMainAttributes().putValue(Constants.BUNDLE_SYMBOLICNAME, str[0]); m.getMainAttributes().putValue(Constants.BUNDLE_VERSION, str[1]); // Put content - JarOutputStream out = new JarOutputStream(os); - ZipEntry e = new ZipEntry(JarFile.MANIFEST_NAME); - out.putNextEntry(e); - m.write(out); - out.closeEntry(); - e = new ZipEntry("META-INF/"); - out.putNextEntry(e); - e = new ZipEntry("META-INF/" + FeatureDeploymentListener.FEATURE_PATH + "/"); - out.putNextEntry(e); - out.closeEntry(); - e = new ZipEntry("META-INF/" + FeatureDeploymentListener.FEATURE_PATH + "/" + name); - out.putNextEntry(e); - try ( - InputStream fis = url.openStream() - ) { - StreamUtils.copy(fis, out); + try (var out = new JarOutputStream(os)) { + ZipEntry e = new ZipEntry(JarFile.MANIFEST_NAME); + out.putNextEntry(e); + m.write(out); + out.closeEntry(); + e = new ZipEntry("META-INF/"); + out.putNextEntry(e); + e = new ZipEntry("META-INF/" + FeatureDeploymentListener.FEATURE_PATH + "/"); + out.putNextEntry(e); + out.closeEntry(); + e = new ZipEntry("META-INF/" + FeatureDeploymentListener.FEATURE_PATH + "/" + name); + out.putNextEntry(e); + try (var is = url.openStream()) { + is.transferTo(out); + } + out.closeEntry(); } - out.closeEntry(); - out.close(); os.close(); } diff --git a/deployer/kar/src/test/java/org/apache/karaf/deployer/kar/KarArtifactInstallerTest.java b/deployer/kar/src/test/java/org/apache/karaf/deployer/kar/KarArtifactInstallerTest.java index 13e5009e78e..bbfbcda65ba 100644 --- a/deployer/kar/src/test/java/org/apache/karaf/deployer/kar/KarArtifactInstallerTest.java +++ b/deployer/kar/src/test/java/org/apache/karaf/deployer/kar/KarArtifactInstallerTest.java @@ -18,15 +18,16 @@ */ package org.apache.karaf.deployer.kar; -import static org.easymock.EasyMock.*; +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.reset; +import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; import java.net.URI; import java.net.URL; import java.nio.file.FileVisitResult; @@ -58,7 +59,7 @@ private void createTestFiles() throws Exception { File karFile = new File("target/test-classes/goodKarFile.kar"); karFile.getParentFile().mkdirs(); - URL karFileResource = getClass().getClassLoader().getResource("goodKarFile"); + URL karFileResource = getClass().getClassLoader().getResource("goodKarFile"); File karFileSourceDir = new File(karFileResource.toURI()); createJarFromFolder(karFileSourceDir.toPath(), karFile); @@ -69,8 +70,7 @@ private void createTestFiles() throws Exception { zipFile.getParentFile().mkdirs(); URL karFileAsZipResource = getClass().getClassLoader().getResource("karFileAsZip"); - File karFileAsZipSourceDir = new File(karFileAsZipResource.toURI()); - createZipFromFolder(karFileAsZipSourceDir.toPath(), zipFile); + createZipFromFolder(Path.of(karFileAsZipResource.toURI()), zipFile); zipFileWithKarafManifest = zipFile.toURI(); @@ -79,35 +79,24 @@ private void createTestFiles() throws Exception { zipFileWithoutKarafManifestFile.getParentFile().mkdirs(); URL karFileAsZipNoManifestResource = getClass().getClassLoader().getResource("karFileAsZipNoManifest"); - File karFileAsZipNoManifestSourceDir = new File(karFileAsZipNoManifestResource.toURI()); - createZipFromFolder(karFileAsZipNoManifestSourceDir.toPath(), zipFileWithoutKarafManifestFile); + createZipFromFolder(Path.of(karFileAsZipNoManifestResource.toURI()), zipFileWithoutKarafManifestFile); zipFileWithoutKarafManifest = zipFileWithoutKarafManifestFile.toURI(); // create badZipFile.zip - File badZipFileFile = new File("target/test-classes/badZipFile.zip"); - - try (FileOutputStream fos = new FileOutputStream(badZipFileFile)) { - fos.write("Not a valid zip file".getBytes()); - } - - badZipFile = badZipFileFile.toURI(); + Path badZipFileFile = Path.of("target/test-classes/badZipFile.zip"); + Files.writeString(badZipFileFile, "Not a valid zip file"); + badZipFile = badZipFileFile.toUri(); } private static void createJarFromFolder(Path sourceDir, File jarFile) throws Exception { - try (JarOutputStream jos = new JarOutputStream(new FileOutputStream(jarFile))) { + try (JarOutputStream jos = new JarOutputStream(Files.newOutputStream(jarFile.toPath()))) { Files.walkFileTree(sourceDir, new SimpleFileVisitor() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { String entryName = sourceDir.relativize(file).toString().replace(File.separator, "/"); jos.putNextEntry(new ZipEntry(entryName)); - try (InputStream in = new FileInputStream(file.toFile())) { - byte[] buf = new byte[4096]; - int len; - while ((len = in.read(buf)) > 0) { - jos.write(buf, 0, len); - } - } + Files.copy(file, jos); jos.closeEntry(); return FileVisitResult.CONTINUE; } @@ -116,19 +105,13 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO } private static void createZipFromFolder(Path sourceDir, File zipFile) throws Exception { - try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) { + try (ZipOutputStream zos = new ZipOutputStream(Files.newOutputStream(zipFile.toPath()))) { Files.walkFileTree(sourceDir, new SimpleFileVisitor() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { String entryName = sourceDir.relativize(file).toString().replace(File.separator, "/"); zos.putNextEntry(new ZipEntry(entryName)); - try (InputStream in = new FileInputStream(file.toFile())) { - byte[] buf = new byte[4096]; - int len; - while ((len = in.read(buf)) > 0) { - zos.write(buf, 0, len); - } - } + Files.copy(file, zos); zos.closeEntry(); return FileVisitResult.CONTINUE; } @@ -145,7 +128,7 @@ public void setUp() throws Exception { karArtifactInstaller = new KarArtifactInstaller(); karArtifactInstaller.setKarService(karService); - + zipFileWithKarafManifest = getClass().getClassLoader().getResource("karFileAsZip.zip").toURI(); zipFileWithoutKarafManifest = getClass().getClassLoader().getResource("karFileAsZipNoManifest.zip").toURI(); badZipFile = getClass().getClassLoader().getResource("badZipFile.zip").toURI(); @@ -155,19 +138,19 @@ public void setUp() throws Exception { public void shouldHandleKarFile() throws Exception { assertTrue(karArtifactInstaller.canHandle(new File(goodKarFile))); } - + @Test public void shouldHandleZipFileWithKarafManifest() throws Exception { assertTrue(karArtifactInstaller.canHandle(new File(zipFileWithKarafManifest))); } @Test - public void shouldIgnoreZipFileWithoutKarafManifest() throws Exception { + public void shouldIgnoreZipFileWithoutKarafManifest() throws Exception { assertFalse(karArtifactInstaller.canHandle(new File(zipFileWithoutKarafManifest))); } @Test - public void shouldIgnoreBadZipFile() throws Exception { + public void shouldIgnoreBadZipFile() throws Exception { assertFalse(karArtifactInstaller.canHandle(new File(badZipFile))); } diff --git a/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringDeploymentListener.java b/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringDeploymentListener.java index 0953f663e4f..aca20af8c08 100644 --- a/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringDeploymentListener.java +++ b/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringDeploymentListener.java @@ -18,9 +18,9 @@ package org.apache.karaf.deployer.spring; import java.io.File; -import java.io.FileInputStream; import java.io.InputStream; import java.net.URL; +import java.nio.file.Files; import javax.xml.namespace.QName; import javax.xml.stream.XMLEventReader; @@ -37,11 +37,11 @@ * and creates bundles for these. */ public class SpringDeploymentListener implements ArtifactUrlTransformer { - private static final QName SPRING_DM_ROOT = new QName("http://www.springframework.org/schema/beans", "beans"); + private static final QName SPRING_DM_ROOT = new QName("http://www.springframework.org/schema/beans", "beans"); private final Logger logger = LoggerFactory.getLogger(SpringDeploymentListener.class); - private XMLInputFactory factory; - + private XMLInputFactory factory; + public boolean canHandle(File artifact) { try { if (artifact.isFile() && artifact.getName().endsWith(".xml")) { @@ -65,32 +65,32 @@ public URL transform(URL artifact) { } } - protected StartElement getRootElement(File artifact) throws Exception { - XMLEventReader parser = null; - InputStream in = null; - try { - if (factory == null) { - factory = XMLInputFactory.newInstance(); - factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false); - factory.setProperty(XMLInputFactory.SUPPORT_DTD, false); - } - in = new FileInputStream(artifact); - parser = factory.createXMLEventReader(in); - while (parser.hasNext()) { - XMLEvent event = parser.nextEvent(); - if (event.isStartElement()) { - return event.asStartElement(); - } - } - return null; - } finally { - if (parser != null) { - parser.close(); - } - if (in != null) { - in.close(); - } - } + protected StartElement getRootElement(File artifact) throws Exception { + XMLEventReader parser = null; + InputStream in = null; + try { + if (factory == null) { + factory = XMLInputFactory.newInstance(); + factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false); + factory.setProperty(XMLInputFactory.SUPPORT_DTD, false); + } + in = Files.newInputStream(artifact.toPath()); + parser = factory.createXMLEventReader(in); + while (parser.hasNext()) { + XMLEvent event = parser.nextEvent(); + if (event.isStartElement()) { + return event.asStartElement(); + } + } + return null; + } finally { + if (parser != null) { + parser.close(); + } + if (in != null) { + in.close(); + } + } } } diff --git a/deployer/spring/src/test/java/org/apache/karaf/deployer/spring/SpringDeploymentListenerTest.java b/deployer/spring/src/test/java/org/apache/karaf/deployer/spring/SpringDeploymentListenerTest.java index 3b567e174b6..f3cc843ff97 100644 --- a/deployer/spring/src/test/java/org/apache/karaf/deployer/spring/SpringDeploymentListenerTest.java +++ b/deployer/spring/src/test/java/org/apache/karaf/deployer/spring/SpringDeploymentListenerTest.java @@ -18,10 +18,7 @@ package org.apache.karaf.deployer.spring; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.io.OutputStream; +import java.nio.file.Files; import java.util.Iterator; import java.util.Set; import java.util.jar.JarInputStream; @@ -45,13 +42,12 @@ public void testPackagesExtraction() throws Exception { public void testCustomManifest() throws Exception { File f = File.createTempFile("smx", ".jar"); try { - OutputStream os = new FileOutputStream(f); - SpringTransformer.transform(getClass().getClassLoader().getResource("test.xml"), os); - os.close(); - InputStream is = new FileInputStream(f); - JarInputStream jar = new JarInputStream(is); - jar.getManifest().write(System.err); - is.close(); + try (var os = Files.newOutputStream(f.toPath())) { + SpringTransformer.transform(getClass().getClassLoader().getResource("test.xml"), os); + } + try (var jar = new JarInputStream(Files.newInputStream(f.toPath()))) { + jar.getManifest().write(System.err); + } } finally { f.delete(); } diff --git a/diagnostic/boot/src/main/java/org/apache/karaf/diagnostic/core/common/DirectoryDumpDestination.java b/diagnostic/boot/src/main/java/org/apache/karaf/diagnostic/core/common/DirectoryDumpDestination.java index 689ab342143..35a1d365349 100644 --- a/diagnostic/boot/src/main/java/org/apache/karaf/diagnostic/core/common/DirectoryDumpDestination.java +++ b/diagnostic/boot/src/main/java/org/apache/karaf/diagnostic/core/common/DirectoryDumpDestination.java @@ -16,8 +16,8 @@ package org.apache.karaf.diagnostic.core.common; import java.io.File; -import java.io.FileOutputStream; import java.io.OutputStream; +import java.nio.file.Files; import org.apache.karaf.diagnostic.core.DumpDestination; @@ -36,7 +36,7 @@ public DirectoryDumpDestination(File file) { if (!file.exists()) { file.mkdirs(); - } + } } public OutputStream add(String name) throws Exception { @@ -45,7 +45,7 @@ public OutputStream add(String name) throws Exception { // if name contains slashes we need to create sub directory destination.getParentFile().mkdirs(); } - return new FileOutputStream(destination); + return Files.newOutputStream(destination.toPath()); } public void save() throws Exception { diff --git a/diagnostic/boot/src/main/java/org/apache/karaf/diagnostic/core/common/ZipDumpDestination.java b/diagnostic/boot/src/main/java/org/apache/karaf/diagnostic/core/common/ZipDumpDestination.java index 66481fb4474..deffb51be83 100644 --- a/diagnostic/boot/src/main/java/org/apache/karaf/diagnostic/core/common/ZipDumpDestination.java +++ b/diagnostic/boot/src/main/java/org/apache/karaf/diagnostic/core/common/ZipDumpDestination.java @@ -16,9 +16,10 @@ package org.apache.karaf.diagnostic.core.common; import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; +import java.io.IOException; import java.io.OutputStream; +import java.io.UncheckedIOException; +import java.nio.file.Files; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -53,12 +54,11 @@ public ZipDumpDestination(File directory, String name) { public ZipDumpDestination(File file) { try { this.file = file; - outputStream = new ZipOutputStream(new FileOutputStream( - file)); - } catch (FileNotFoundException e) { + outputStream = new ZipOutputStream(Files.newOutputStream(file.toPath())); + } catch (IOException e) { // sometimes this can occur, but we simply re throw and let // caller handle exception - throw new RuntimeException("Unable to create dump destination", e); + throw new UncheckedIOException("Unable to create dump destination", e); } } diff --git a/diagnostic/boot/src/main/java/org/apache/karaf/diagnostic/core/providers/HeapDumpProvider.java b/diagnostic/boot/src/main/java/org/apache/karaf/diagnostic/core/providers/HeapDumpProvider.java index f5ab4533375..00adc18807d 100644 --- a/diagnostic/boot/src/main/java/org/apache/karaf/diagnostic/core/providers/HeapDumpProvider.java +++ b/diagnostic/boot/src/main/java/org/apache/karaf/diagnostic/core/providers/HeapDumpProvider.java @@ -21,7 +21,7 @@ import javax.management.MBeanServer; import java.io.File; -import java.io.FileInputStream; +import java.io.InputStream; import java.io.OutputStream; import java.lang.management.ManagementFactory; import java.lang.reflect.Method; @@ -34,7 +34,7 @@ public class HeapDumpProvider implements DumpProvider { public void createDump(DumpDestination destination) throws Exception { File heapDumpFile = null; - FileInputStream in = null; + InputStream in = null; OutputStream out = null; try { MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); @@ -49,7 +49,7 @@ public void createDump(DumpDestination destination) throws Exception { method.invoke(diagnosticMXBean, heapDumpFile.getAbsolutePath(), false); // copy the dump in the destination - in = new FileInputStream(heapDumpFile); + in = Files.newInputStream(heapDumpFile.toPath()); out = destination.add("heapdump.hprof"); byte[] buffer = new byte[2048]; int l; diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/download/impl/AbstractDownloadTask.java b/features/core/src/main/java/org/apache/karaf/features/internal/download/impl/AbstractDownloadTask.java index da00bdf294f..772f6a719df 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/download/impl/AbstractDownloadTask.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/download/impl/AbstractDownloadTask.java @@ -17,9 +17,9 @@ package org.apache.karaf.features.internal.download.impl; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.file.Files; import java.util.concurrent.ScheduledExecutorService; import org.apache.karaf.features.internal.download.StreamProvider; @@ -51,7 +51,7 @@ public File getFile() throws IOException { @Override public InputStream open() throws IOException { - return new FileInputStream(getFile()); + return Files.newInputStream(getFile().toPath()); } public void setFile(File file) { diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/download/impl/SimpleDownloadTask.java b/features/core/src/main/java/org/apache/karaf/features/internal/download/impl/SimpleDownloadTask.java index 548c234d80b..f7263d53402 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/download/impl/SimpleDownloadTask.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/download/impl/SimpleDownloadTask.java @@ -17,15 +17,11 @@ package org.apache.karaf.features.internal.download.impl; import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; import java.net.URL; import java.nio.file.Files; import java.util.concurrent.ScheduledExecutorService; -import org.apache.karaf.util.StreamUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -75,9 +71,8 @@ protected File download(Exception previousExceptionNotUsed) throws Exception { File tmpFile = Files.createTempFile(dir.toPath(), "download-", null).toFile(); urlObj = new URL(DownloadManagerHelper.stripStartLevel(urlObj.toString())); - try (InputStream is = urlObj.openStream(); - OutputStream os = new FileOutputStream(tmpFile)) { - StreamUtils.copy(is, os); + try (var is = urlObj.openStream()) { + Files.copy(is, tmpFile.toPath()); } if (file.exists() && !file.delete()) { @@ -112,10 +107,8 @@ protected File downloadBlueprintOrSpring() throws Exception { File dir = new File(System.getProperty("karaf.data"), "tmp"); dir.mkdirs(); File tmpFile = Files.createTempFile(dir.toPath(), "download-", null).toFile(); - try (InputStream is = new URL(url).openStream(); - OutputStream os = new FileOutputStream(tmpFile)) - { - StreamUtils.copy(is, os); + try (var is = new URL(url).openStream()) { + Files.copy(is, tmpFile.toPath()); } return tmpFile; } diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java b/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java index a2d3651cc35..7f140eb08a9 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java @@ -17,12 +17,11 @@ package org.apache.karaf.features.internal.osgi; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.NoSuchFileException; import java.util.ArrayList; import java.util.Dictionary; import java.util.Hashtable; @@ -119,7 +118,7 @@ protected void doOpen() throws Exception { File configFile = new File(System.getProperty("karaf.etc"), FEATURES_SERVICE_CONFIG_FILE); if (configFile.isFile() && configFile.canRead()) { try { - configuration.load(new FileReader(configFile)); + configuration.load(Files.newBufferedReader(configFile.toPath())); } catch (IOException e) { logger.warn("Error reading configuration file " + configFile.toString(), e); } @@ -268,18 +267,17 @@ private StateStorage createStateStorage() { StateStorage stateStorage = new StateStorage() { @Override protected InputStream getInputStream() throws IOException { - File file = bundleContext.getDataFile(STATE_FILE); - if (file.exists()) { - return new FileInputStream(file); - } else { - return null; + var file = bundleContext.getDataFile(STATE_FILE).toPath(); + if (Files.exists(file)) { + return Files.newInputStream(file); } + return null; } @Override protected OutputStream getOutputStream() throws IOException { - File file = bundleContext.getDataFile(STATE_FILE); - return new FileOutputStream(file); + var file = bundleContext.getDataFile(STATE_FILE).toPath(); + return Files.newOutputStream(file); } }; return stateStorage; diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/region/DigraphHelper.java b/features/core/src/main/java/org/apache/karaf/features/internal/region/DigraphHelper.java index 5897415c651..259fc769453 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/region/DigraphHelper.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/region/DigraphHelper.java @@ -20,11 +20,10 @@ import java.io.DataInputStream; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -66,9 +65,7 @@ public static StandardRegionDigraph loadDigraph(BundleContext bundleContext) thr if (digraphFile == null || !digraphFile.exists()) { digraph = new StandardRegionDigraph(bundleContext, threadLocal); } else { - try ( - InputStream in = new FileInputStream(digraphFile) - ) { + try (var in = Files.newInputStream(digraphFile.toPath())) { digraph = readDigraph(new DataInputStream(in), bundleContext, threadLocal); } } @@ -76,9 +73,7 @@ public static StandardRegionDigraph loadDigraph(BundleContext bundleContext) thr } public static void saveDigraph(File outFile, RegionDigraph digraph) { - try ( - FileOutputStream out = new FileOutputStream(outFile) - ) { + try (var out = Files.newOutputStream(outFile.toPath())) { saveDigraph(digraph, out); } catch (Exception e) { // Ignore diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/BundleInstallSupportImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/BundleInstallSupportImpl.java index ca893dfc7d1..3bdd531777f 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/service/BundleInstallSupportImpl.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/BundleInstallSupportImpl.java @@ -17,9 +17,9 @@ package org.apache.karaf.features.internal.service; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.file.Files; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -144,7 +144,7 @@ public void updateBundle(Bundle bundle, String uri, InputStream is) throws Bundl // We need to wrap the bundle to insert a Bundle-UpdateLocation header try { file = BundleUtils.fixBundleWithUpdateLocation(is, uri); - bundle.update(new FileInputStream(file)); + bundle.update(Files.newInputStream(file.toPath())); } catch (IOException e) { throw new BundleException("Unable to update bundle", e); } finally { diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/Deployer.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/Deployer.java index 8ade7a76ffb..c4ed1f132e9 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/service/Deployer.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/Deployer.java @@ -16,12 +16,13 @@ */ package org.apache.karaf.features.internal.service; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Method; import java.net.URL; import java.net.URLConnection; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -1441,8 +1442,7 @@ protected Deployment computeDeployment( String jarUrl = ((URL) method.invoke(con)).toExternalForm(); if (jarUrl.startsWith("jar:")) { String jar = jarUrl.substring("jar:".length(), jarUrl.indexOf("!/")); - jar = new URL(jar).getFile(); - try (InputStream is = new FileInputStream(jar)) { + try (var is = Files.newInputStream(Path.of(new URL(jar).getFile()))) { oldCrc = ChecksumUtils.checksum(is); } result.bundleChecksums.put(bundleId, oldCrc); diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java index cafd76c96aa..f3e3425cf7b 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java @@ -16,12 +16,20 @@ */ package org.apache.karaf.features.internal.service; -import java.io.*; +import java.io.File; +import java.io.IOException; +import java.io.StringReader; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import java.nio.charset.StandardCharsets; -import java.util.*; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.Dictionary; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.List; +import java.util.Map; import java.util.regex.Pattern; import org.apache.felix.cm.json.io.Configurations; @@ -30,7 +38,6 @@ import org.apache.karaf.features.ConfigFileInfo; import org.apache.karaf.features.ConfigInfo; import org.apache.karaf.features.Feature; -import org.apache.karaf.util.StreamUtils; import org.osgi.framework.Constants; import org.osgi.framework.InvalidSyntaxException; import org.osgi.service.cm.Configuration; @@ -73,10 +80,10 @@ private ConfigId parsePid(final String pid) { return cid; } - private Configuration createConfiguration(ConfigurationAdmin configurationAdmin, ConfigId cid) + private static Configuration createConfiguration(ConfigurationAdmin configurationAdmin, ConfigId cid) throws IOException, InvalidSyntaxException { if (cid.isFactoryPid) { - if (Objects.nonNull(cid.name)) { + if (cid.name != null) { return configurationAdmin.getFactoryConfiguration(cid.factoryPid, cid.name, null); } else { return configurationAdmin.createFactoryConfiguration(cid.factoryPid, null); @@ -113,7 +120,8 @@ public void installFeatureConfigs(Feature feature) throws IOException, InvalidSy } if (JSON_PATTERN.matcher(configValue).matches()) { // json format - properties = convertToTypedProperties(Configurations.buildReader().build(new StringReader(configValue)).readConfiguration()); + properties = convertToTypedProperties(Configurations.buildReader().build(new StringReader(configValue)) + .readConfiguration()); jsonFormat = true; } else { // properties format @@ -173,12 +181,8 @@ public void installFeatureConfigs(Feature feature) throws IOException, InvalidSy } } - private String loadConfiguration(final URL url) throws IOException { - try (final InputStream inputStream = new BufferedInputStream(url.openStream())) { - final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - StreamUtils.copy(inputStream, outputStream); - return new String(outputStream.toByteArray(), StandardCharsets.UTF_8); - } + private static String loadConfiguration(final URL url) throws IOException { + return new String(url.openStream().readAllBytes(), StandardCharsets.UTF_8); } public void uninstallFeatureConfigs(Feature feature) throws IOException, InvalidSyntaxException { @@ -298,9 +302,7 @@ private void installConfigurationFile(String fileLocation, String finalname, boo } // TODO: use download manager to download the configuration - try ( - InputStream is = new BufferedInputStream(new URL(fileLocation).openStream()) - ) { + try (var is = new URL(fileLocation).openStream()) { if (!file.exists()) { File parentFile = file.getParentFile(); if (parentFile != null) { @@ -308,11 +310,7 @@ private void installConfigurationFile(String fileLocation, String finalname, boo } file.createNewFile(); } - try ( - FileOutputStream fop = new FileOutputStream(file) - ) { - StreamUtils.copy(is, fop); - } + Files.copy(is, file.toPath()); } catch (RuntimeException | MalformedURLException e) { LOGGER.error(e.getMessage()); throw e; @@ -326,7 +324,8 @@ protected void updateStorage(ConfigId cid, TypedProperties props, boolean append if (!cfgFile.exists()) { File tmpCfgFile = File.createTempFile(cfgFile.getName(), ".tmp", cfgFile.getParentFile()); if (jsonFormat) { - Configurations.buildWriter().build(new FileWriter(tmpCfgFile)).writeConfiguration(convertToDict(props)); + Configurations.buildWriter().build(Files.newBufferedWriter(tmpCfgFile.toPath())) + .writeConfiguration(convertToDict(props)); } else { props.save(tmpCfgFile); } @@ -366,10 +365,13 @@ private File getConfigFile(ConfigId cid, boolean jsonFormat) throws IOException, return cfgFile; } - private void updateExistingConfig(TypedProperties props, boolean append, File cfgFile, boolean jsonFormat) throws IOException { + private void updateExistingConfig(TypedProperties props, boolean append, File cfgFile, boolean jsonFormat) + throws IOException { TypedProperties properties = new TypedProperties(); if (jsonFormat) { - properties = convertToTypedProperties(Configurations.buildReader().build(new FileReader(cfgFile)).readConfiguration()); + properties = convertToTypedProperties(Configurations.buildReader() + .build(Files.newBufferedReader(cfgFile.toPath())) + .readConfiguration()); } else { properties.load(cfgFile); } @@ -401,13 +403,14 @@ private void updateExistingConfig(TypedProperties props, boolean append, File cf } storage.mkdirs(); if (jsonFormat) { - Configurations.buildWriter().build(new FileWriter(cfgFile)).writeConfiguration(new Hashtable(properties)); + Configurations.buildWriter().build(Files.newBufferedWriter(cfgFile.toPath())) + .writeConfiguration(new Hashtable(properties)); } else { properties.save(cfgFile); } } - private boolean isInternalKey(String key) { + private static boolean isInternalKey(String key) { return Constants.SERVICE_PID.equals(key) || ConfigurationAdmin.SERVICE_FACTORYPID.equals(key) || FILEINSTALL_FILE_NAME.equals(key); diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java index 39e9533a365..370b03f863b 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java @@ -17,12 +17,11 @@ package org.apache.karaf.features.internal.service; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import java.net.URI; +import java.nio.file.Files; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; @@ -173,9 +172,7 @@ private void checkResolve() { return; } Map request; - try ( - FileInputStream fis = new FileInputStream(resolveFile) - ) { + try (var fis = Files.newInputStream(resolveFile.toPath())) { request = (Map) JsonReader.read(fis); } catch (IOException e) { LOGGER.warn("Error reading resolution request", e); @@ -205,9 +202,7 @@ private void writeResolve(Map> requestedFeatures, EnumSet blacklistWith(String blacklist throw new RuntimeException(e); } File blacklistedProperties = File.createTempFile("blacklisted-", ".properties", new File("target")); - try (FileOutputStream fos = new FileOutputStream(blacklistedProperties)) { - fos.write(blacklistClause.getBytes(StandardCharsets.UTF_8)); - } + Files.writeString(blacklistedProperties.toPath(), blacklistClause, StandardCharsets.UTF_8); + RepositoryImpl features = new RepositoryImpl(uri, true); FeaturesServiceConfig config = new FeaturesServiceConfig(null, FeaturesService.DEFAULT_FEATURE_RESOLUTION_RANGE, FeaturesService.DEFAULT_BUNDLE_UPDATE_RANGE, null, 1, 0, 0, blacklistedProperties.toURI().toString(), null, null, null, true); features.processFeatures(new FeaturesProcessorImpl(config)); diff --git a/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java b/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java index 117502c916a..6d2596a4469 100644 --- a/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java +++ b/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java @@ -18,7 +18,6 @@ import org.apache.karaf.instance.core.Instance; -import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; @@ -126,7 +125,7 @@ public void changeSshHost(String host) throws Exception { public void packageInZip(String destination) throws Exception { Path sourcePath = Paths.get(getLocation()); Path destinationPath = Paths.get(destination).normalize(); - try (ZipOutputStream zOut = new ZipOutputStream(new FileOutputStream(destination.toString()))) { + try (ZipOutputStream zOut = new ZipOutputStream(Files.newOutputStream(destinationPath))) { Files.walkFileTree(sourcePath, new SimpleFileVisitor() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) throws IOException { diff --git a/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java b/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java index e99d07c0e7c..8e1fc29f4c1 100644 --- a/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java +++ b/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java @@ -16,13 +16,9 @@ */ package org.apache.karaf.instance.core.internal; -import java.io.BufferedReader; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; import java.net.Socket; @@ -54,7 +50,6 @@ import org.apache.karaf.profile.ProfileBuilder; import org.apache.karaf.profile.ProfileService; import org.apache.karaf.shell.support.ansi.SimpleAnsi; -import org.apache.karaf.util.StreamUtils; import org.apache.karaf.util.config.PropertiesLoader; import org.apache.karaf.util.locks.FileLockUtils; import org.osgi.framework.BundleContext; @@ -849,9 +844,8 @@ protected void cleanShutdown(InstanceState instance) { String portFile = props.getProperty(KARAF_SHUTDOWN_PORT_FILE); String shutdown = props.getProperty(KARAF_SHUTDOWN_COMMAND, DEFAULT_SHUTDOWN_COMMAND); if (port == 0 && portFile != null) { - try (BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(portFile)))) { - String portStr = r.readLine(); - port = Integer.parseInt(portStr); + try (var reader = Files.newBufferedReader(Path.of(portFile))) { + port = Integer.parseInt(reader.readLine()); } } // We found the port, try to send the command @@ -1086,7 +1080,7 @@ private void copyResourceToDir(String resource, File target, Map re logDebug("Creating file: %s", printOutput, outFile.getPath()); try ( InputStream is = getResourceStream(resource, resources); - OutputStream os = new FileOutputStream(outFile) + OutputStream os = Files.newOutputStream(outFile.toPath()) ) { if (is == null) { logInfo("\tWARNING: unable to find %s", true, resource); @@ -1147,7 +1141,7 @@ private static void filterResource(File basedir, String path, HashMapjcl-over-slf4j test - - - org.apache.karaf - org.apache.karaf.util - test - diff --git a/jaas/blueprint/jasypt/src/test/java/org/apache/karaf/jaas/blueprint/jasypt/handler/EncryptableConfigAdminPropertyPlaceholderTest.java b/jaas/blueprint/jasypt/src/test/java/org/apache/karaf/jaas/blueprint/jasypt/handler/EncryptableConfigAdminPropertyPlaceholderTest.java index 1db86172563..fa5712aeac8 100644 --- a/jaas/blueprint/jasypt/src/test/java/org/apache/karaf/jaas/blueprint/jasypt/handler/EncryptableConfigAdminPropertyPlaceholderTest.java +++ b/jaas/blueprint/jasypt/src/test/java/org/apache/karaf/jaas/blueprint/jasypt/handler/EncryptableConfigAdminPropertyPlaceholderTest.java @@ -14,13 +14,25 @@ */ package org.apache.karaf.jaas.blueprint.jasypt.handler; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.Collection; +import java.util.Dictionary; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.jar.JarInputStream; + import junit.framework.TestCase; import org.apache.felix.connect.PojoServiceRegistryFactoryImpl; import org.apache.felix.connect.launch.BundleDescriptor; import org.apache.felix.connect.launch.ClasspathScanner; import org.apache.felix.connect.launch.PojoServiceRegistry; import org.apache.felix.connect.launch.PojoServiceRegistryFactory; -import org.apache.karaf.util.StreamUtils; import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig; import org.junit.After; @@ -28,15 +40,17 @@ import org.junit.Test; import org.ops4j.pax.tinybundles.TinyBundle; import org.ops4j.pax.tinybundles.TinyBundles; -import org.osgi.framework.*; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; +import org.osgi.framework.Filter; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.framework.ServiceReference; import org.osgi.service.cm.Configuration; import org.osgi.service.cm.ConfigurationAdmin; import org.osgi.util.tracker.ServiceTracker; -import java.io.*; -import java.util.*; -import java.util.jar.JarInputStream; - public class EncryptableConfigAdminPropertyPlaceholderTest extends TestCase { public static final long DEFAULT_TIMEOUT = 30000; @@ -85,18 +99,17 @@ public void setUp() throws Exception { } private BundleDescriptor getBundleDescriptor(String path, TinyBundle bundle) throws Exception { - File file = new File(path); - FileOutputStream fos = new FileOutputStream(file); - StreamUtils.copy(bundle.build(), fos); - fos.close(); - JarInputStream jis = new JarInputStream(new FileInputStream(file)); + Path file = Path.of(path); + Files.copy(bundle.build(), file); Map headers = new HashMap<>(); - for (Map.Entry entry : jis.getManifest().getMainAttributes().entrySet()) { - headers.put(entry.getKey().toString(), entry.getValue().toString()); + try (var jis = new JarInputStream(Files.newInputStream(file))) { + for (var entry : jis.getManifest().getMainAttributes().entrySet()) { + headers.put(entry.getKey().toString(), entry.getValue().toString()); + } } return new BundleDescriptor( getClass().getClassLoader(), - "jar:" + file.toURI().toString() + "!/", + "jar:" + file.toUri().toString() + "!/", headers); } diff --git a/jaas/blueprint/jasypt/src/test/java/org/apache/karaf/jaas/blueprint/jasypt/handler/EncryptablePropertyPlaceholderTest.java b/jaas/blueprint/jasypt/src/test/java/org/apache/karaf/jaas/blueprint/jasypt/handler/EncryptablePropertyPlaceholderTest.java index 9eeb2f580f7..41fdb3046c1 100644 --- a/jaas/blueprint/jasypt/src/test/java/org/apache/karaf/jaas/blueprint/jasypt/handler/EncryptablePropertyPlaceholderTest.java +++ b/jaas/blueprint/jasypt/src/test/java/org/apache/karaf/jaas/blueprint/jasypt/handler/EncryptablePropertyPlaceholderTest.java @@ -14,9 +14,8 @@ */ package org.apache.karaf.jaas.blueprint.jasypt.handler; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Arrays; import java.util.Collection; import java.util.Dictionary; @@ -34,7 +33,6 @@ import org.apache.felix.connect.launch.PojoServiceRegistry; import org.apache.felix.connect.launch.PojoServiceRegistryFactory; import org.apache.karaf.jaas.blueprint.jasypt.handler.beans.Bean; -import org.apache.karaf.util.StreamUtils; import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig; import org.junit.After; @@ -96,18 +94,17 @@ public void setUp() throws Exception { } private BundleDescriptor getBundleDescriptor(String path, TinyBundle bundle) throws Exception { - File file = new File(path); - FileOutputStream fos = new FileOutputStream(file); - StreamUtils.copy(bundle.build(), fos); - fos.close(); - JarInputStream jis = new JarInputStream(new FileInputStream(file)); + Path file = Path.of(path); + Files.copy(bundle.build(), file); Map headers = new HashMap<>(); - for (Map.Entry entry : jis.getManifest().getMainAttributes().entrySet()) { - headers.put(entry.getKey().toString(), entry.getValue().toString()); + try (var jis = new JarInputStream(Files.newInputStream(file))) { + for (var entry : jis.getManifest().getMainAttributes().entrySet()) { + headers.put(entry.getKey().toString(), entry.getValue().toString()); + } } return new BundleDescriptor( getClass().getClassLoader(), - "jar:" + file.toURI().toString() + "!/", + "jar:" + file.toUri().toString() + "!/", headers); } diff --git a/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/ldap/LdapPoolingTest.java b/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/ldap/LdapPoolingTest.java index 1f85506b13f..af506f6c80b 100644 --- a/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/ldap/LdapPoolingTest.java +++ b/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/ldap/LdapPoolingTest.java @@ -15,9 +15,10 @@ */ package org.apache.karaf.jaas.modules.ldap; -import java.io.FileInputStream; import java.io.IOException; import java.net.Socket; +import java.nio.file.Files; +import java.nio.file.Path; import java.security.KeyStore; import java.security.SecureRandom; import java.util.Hashtable; @@ -57,7 +58,8 @@ public void keystore() throws Exception { KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); - ks.load(new FileInputStream("src/test/resources/org/apache/karaf/jaas/modules/ldap/ldaps.jks"), "123456".toCharArray()); + ks.load(Files.newInputStream(Path.of("src/test/resources/org/apache/karaf/jaas/modules/ldap/ldaps.jks")), + "123456".toCharArray()); kmf.init(ks, "123456".toCharArray()); tmf.init(ks); diff --git a/kar/src/main/java/org/apache/karaf/kar/internal/Kar.java b/kar/src/main/java/org/apache/karaf/kar/internal/Kar.java index 5ff890f1e76..7336601bee5 100644 --- a/kar/src/main/java/org/apache/karaf/kar/internal/Kar.java +++ b/kar/src/main/java/org/apache/karaf/kar/internal/Kar.java @@ -17,11 +17,11 @@ package org.apache.karaf.kar.internal; import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URI; +import java.nio.file.Files; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -31,7 +31,6 @@ import java.util.jar.Manifest; import java.util.zip.ZipEntry; -import org.apache.karaf.util.StreamUtils; import org.apache.karaf.util.maven.Parser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -161,9 +160,7 @@ private static File extract(InputStream is, ZipEntry zipEntry, File dest) throws dest.mkdirs(); } else { dest.getParentFile().mkdirs(); - FileOutputStream out = new FileOutputStream(dest); - StreamUtils.copy(is, out); - out.close(); + Files.copy(is, dest.toPath()); } return dest; } diff --git a/kar/src/main/java/org/apache/karaf/kar/internal/KarServiceImpl.java b/kar/src/main/java/org/apache/karaf/kar/internal/KarServiceImpl.java index 3ee5cadb246..ff8bf7ad443 100644 --- a/kar/src/main/java/org/apache/karaf/kar/internal/KarServiceImpl.java +++ b/kar/src/main/java/org/apache/karaf/kar/internal/KarServiceImpl.java @@ -19,18 +19,15 @@ package org.apache.karaf.kar.internal; import java.io.BufferedOutputStream; -import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.File; -import java.io.FileOutputStream; -import java.io.FileReader; import java.io.IOException; import java.io.InputStream; -import java.io.OutputStream; import java.io.PrintStream; import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Collections; import java.util.EnumSet; @@ -45,10 +42,14 @@ import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; import java.util.jar.Manifest; - -import org.apache.karaf.features.*; +import org.apache.karaf.features.BundleInfo; +import org.apache.karaf.features.Conditional; +import org.apache.karaf.features.ConfigFileInfo; +import org.apache.karaf.features.Dependency; +import org.apache.karaf.features.Feature; +import org.apache.karaf.features.FeaturesService; +import org.apache.karaf.features.Repository; import org.apache.karaf.kar.KarService; -import org.apache.karaf.util.StreamUtils; import org.apache.karaf.util.maven.Parser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -190,42 +191,24 @@ private Dependency findMissingDependency(List featureRepos) private static List readFromFile(File repoListFile) { ArrayList uriList = new ArrayList<>(); - FileReader fr = null; - try { - fr = new FileReader(repoListFile); - BufferedReader br = new BufferedReader(fr); + try (var reader = Files.newBufferedReader(repoListFile.toPath())) { String line; - while ((line = br.readLine()) != null) { + while ((line = reader.readLine()) != null) { uriList.add(new URI(line)); } } catch (Exception e) { throw new RuntimeException("Error reading repo list from file " + repoListFile.getAbsolutePath(), e); - } finally { - try { - fr.close(); - } catch (IOException e) { - LOGGER.warn("Error closing reader for file " + repoListFile, e); - } } return uriList; } private static void writeToFile(List featuresRepositoriesInKar, File repoListFile) { - FileOutputStream fos = null; - PrintStream ps = null; - try { - fos = new FileOutputStream(repoListFile); - ps = new PrintStream(fos); - for (URI uri : featuresRepositoriesInKar) { + try (var ps = new PrintStream(Files.newOutputStream(repoListFile.toPath()))) { + for (var uri : featuresRepositoriesInKar) { ps.println(uri); } - ps.close(); - fos.close(); } catch (Exception e) { throw new RuntimeException("Error writing feature repo list to file " + repoListFile.getAbsolutePath(), e); - } finally { - closeStream(ps); - closeStream(fos); } } @@ -330,8 +313,6 @@ private void installFeatures(List featuresRepositories, boolean noAutoStart @Override public void create(String repoName, List features, PrintStream console) { - FileOutputStream fos = null; - JarOutputStream jos = null; try { Repository repo = featuresService.getRepository(repoName); if (repo == null) { @@ -340,33 +321,32 @@ public void create(String repoName, List features, PrintStream console) String karPath = storage + File.separator + repoName + ".kar"; File karFile = new File(karPath); karFile.getParentFile().mkdirs(); - fos = new FileOutputStream(karFile); Manifest manifest = createNonAutoStartManifest(repo.getURI()); - jos = new JarOutputStream(new BufferedOutputStream(fos, 100000), manifest); - Map locationMap = new HashMap<>(); - copyResourceToJar(jos, repo.getURI(), locationMap); - - Map featureMap = new HashMap<>(); - for (Feature feature : repo.getFeatures()) { - featureMap.put(feature.getName(), feature); - } + try (var jos = new JarOutputStream( + new BufferedOutputStream(Files.newOutputStream(karFile.toPath()), 100_000), manifest)) { - Set featuresToCopy = getFeatures(featureMap, features, 1); - - for (Feature feature : featuresToCopy) { - if (console != null) - console.println("Adding feature " + feature.getName()); - copyFeatureToJar(jos, feature, locationMap); + Map locationMap = new HashMap<>(); + copyResourceToJar(jos, repo.getURI(), locationMap); + + Map featureMap = new HashMap<>(); + for (Feature feature : repo.getFeatures()) { + featureMap.put(feature.getName(), feature); + } + + Set featuresToCopy = getFeatures(featureMap, features, 1); + + for (Feature feature : featuresToCopy) { + if (console != null) + console.println("Adding feature " + feature.getName()); + copyFeatureToJar(jos, feature, locationMap); + } } if (console != null) console.println("Kar file created : " + karPath); } catch (Exception e) { throw new RuntimeException("Error creating kar: " + e.getMessage(), e); - } finally { - closeStream(jos); - closeStream(fos); } } @@ -408,16 +388,6 @@ private static Manifest createNonAutoStartManifest(URI repoUri) throws IOExcepti return manifest; } - private static void closeStream(OutputStream os) { - if (os != null) { - try { - os.close(); - } catch (IOException e) { - LOGGER.warn("Error closing stream", e); - } - } - } - private static void copyFeatureToJar(JarOutputStream jos, Feature feature, Map locationMap) throws URISyntaxException { // add bundles @@ -452,10 +422,8 @@ private static void copyResourceToJar(JarOutputStream jos, URI location, Map getDefaultHandlersInternal() { private Properties loadPaxLoggingConfig() { Properties props = new Properties(); - FileInputStream fis = null; - try { - fis = new FileInputStream(log4jConfigPath); + try (var fis = Files.newInputStream(Path.of(log4jConfigPath))) { props.load(fis); } catch (Exception e) { // Ignore - } finally { - close(fis); } return props; } - private static void close(Closeable closeable) { - try { - if (closeable != null) { - closeable.close(); - } - } catch (IOException e) { - // Ignore - } - } - String getLogFilePath() { String filename = configProps == null ? null : configProps.getProperty(KARAF_BOOTSTRAP_LOG); if (filename != null) { @@ -190,9 +180,8 @@ private void open (File logfile, boolean append) throws IOException { throw new IOException(se.getMessage()); } } - FileOutputStream fout = new FileOutputStream(logfile, append); - BufferedOutputStream out = new BufferedOutputStream(fout); - setOutputStream(out); + setOutputStream(new BufferedOutputStream( + Files.newOutputStream(logfile.toPath(), WRITE, CREATE, append ? APPEND : TRUNCATE_EXISTING))); } public synchronized void publish (LogRecord record) { diff --git a/obr/src/main/java/org/apache/karaf/obr/command/ObrCommandSupport.java b/obr/src/main/java/org/apache/karaf/obr/command/ObrCommandSupport.java index 55a71c24e3e..0c91575ae5b 100644 --- a/obr/src/main/java/org/apache/karaf/obr/command/ObrCommandSupport.java +++ b/obr/src/main/java/org/apache/karaf/obr/command/ObrCommandSupport.java @@ -16,14 +16,9 @@ */ package org.apache.karaf.obr.command; -import java.io.BufferedReader; -import java.io.BufferedWriter; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; import java.io.PrintStream; +import java.nio.file.Files; import java.util.List; import org.apache.felix.bundlerepository.Reason; @@ -240,9 +235,9 @@ protected void persistRepositoryList(RepositoryAdmin admin) { File sysTmp = new File(etc, "config.properties.tmp"); boolean modified = false; - try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(sysTmp)))) { + try (var writer = Files.newBufferedWriter(sysTmp.toPath())) { if (sys.exists()) { - try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(sys)))) { + try (var reader = Files.newBufferedReader(sys.toPath())) { String line = reader.readLine(); while (line != null) { if (line.matches("obr\\.repository\\.url[:= ].*")) { diff --git a/obr/src/main/java/org/apache/karaf/obr/command/util/FileUtil.java b/obr/src/main/java/org/apache/karaf/obr/command/util/FileUtil.java index 3dcbcc76b75..86382858df1 100644 --- a/obr/src/main/java/org/apache/karaf/obr/command/util/FileUtil.java +++ b/obr/src/main/java/org/apache/karaf/obr/command/util/FileUtil.java @@ -18,16 +18,13 @@ */ package org.apache.karaf.obr.command.util; -import java.io.BufferedOutputStream; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.io.OutputStream; import java.io.PrintStream; import java.net.URL; import java.net.URLConnection; +import java.nio.file.Files; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; @@ -53,10 +50,8 @@ public static void downloadSource( } File file = new File(dir, fileName); - OutputStream os = new FileOutputStream(file); URLConnection conn = srcURL.openConnection(); int total = conn.getContentLength(); - InputStream is = conn.getInputStream(); if (total > 0) { @@ -67,20 +62,13 @@ public static void downloadSource( { out.println("Downloading " + fileName + "."); } - byte[] buffer = new byte[4096]; - int count = 0; - for (int len = is.read(buffer); len > 0; len = is.read(buffer)) - { - count += len; - os.write(buffer, 0, len); + try (var is = conn.getInputStream()) { + Files.copy(is, file.toPath()); } - os.close(); - is.close(); - if (extract) { - try (JarInputStream jis = new JarInputStream(new FileInputStream(file))) { + try (JarInputStream jis = new JarInputStream(Files.newInputStream(file.toPath()))) { out.println("Extracting..."); unjar(jis, dir); } @@ -170,14 +158,6 @@ else if (!targetDir.isDirectory()) throw new IOException("Target is not a directory: " + targetDir); } - - BufferedOutputStream bos = new BufferedOutputStream( - new FileOutputStream(new File(targetDir, destName))); - int count = 0; - while ((count = is.read(buffer)) > 0) - { - bos.write(buffer, 0, count); - } - bos.close(); + Files.copy(is, new File(targetDir, destName).toPath()); } } diff --git a/obr/src/test/java/org/apache/karaf/obr/command/util/FileUtilTest.java b/obr/src/test/java/org/apache/karaf/obr/command/util/FileUtilTest.java index 71ee7cb20e0..ea931f12323 100644 --- a/obr/src/test/java/org/apache/karaf/obr/command/util/FileUtilTest.java +++ b/obr/src/test/java/org/apache/karaf/obr/command/util/FileUtilTest.java @@ -23,8 +23,7 @@ import static org.junit.Assert.fail; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; +import java.nio.file.Files; import java.util.jar.JarInputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -36,17 +35,18 @@ public void goodExtractTest() throws Exception { File base = new File("target/test"); base.mkdirs(); File goodKarFile = new File(base, "good.kar"); - ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(goodKarFile)); - ZipEntry entry = new ZipEntry("foo.bar"); - zos.putNextEntry(entry); + try (ZipOutputStream zos = new ZipOutputStream(Files.newOutputStream(goodKarFile.toPath()))) { + ZipEntry entry = new ZipEntry("foo.bar"); + zos.putNextEntry(entry); - byte[] data = "Test Data".getBytes(); - zos.write(data, 0, data.length); - zos.closeEntry(); - zos.close(); + byte[] data = "Test Data".getBytes(); + zos.write(data, 0, data.length); + zos.closeEntry(); + } - JarInputStream jis = new JarInputStream(new FileInputStream(goodKarFile)); - FileUtil.unjar(jis, base); + try (JarInputStream jis = new JarInputStream(Files.newInputStream(goodKarFile.toPath()))) { + FileUtil.unjar(jis, base); + } goodKarFile.delete(); } @@ -56,17 +56,16 @@ public void badExtractTest() throws Exception { File base = new File("target/test"); base.mkdirs(); File badKarFile = new File(base, "bad.kar"); - ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(badKarFile)); - ZipEntry entry = new ZipEntry("../../../../../../../../../tmp/foo.bar"); - zos.putNextEntry(entry); + try (ZipOutputStream zos = new ZipOutputStream(Files.newOutputStream(badKarFile.toPath()))) { + ZipEntry entry = new ZipEntry("../../../../../../../../../tmp/foo.bar"); + zos.putNextEntry(entry); - byte[] data = "Test Data".getBytes(); - zos.write(data, 0, data.length); - zos.closeEntry(); - zos.close(); + byte[] data = "Test Data".getBytes(); + zos.write(data, 0, data.length); + zos.closeEntry(); + } - JarInputStream jis = new JarInputStream(new FileInputStream(badKarFile)); - try { + try (JarInputStream jis = new JarInputStream(Files.newInputStream(badKarFile.toPath()))) { FileUtil.unjar(jis, base); fail("Failure expected on extracting a jar with relative file paths"); } catch (Exception ex) { diff --git a/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java b/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java index 76bc5d403cf..4f76fc42108 100644 --- a/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java +++ b/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java @@ -1151,9 +1151,9 @@ private void doGenerateAssembly() throws Exception { Path featuresProcessingXml = etcDirectory.resolve("org.apache.karaf.features.xml"); if (hasOwnInstructions() || overrides.size() > 0) { // just generate new etc/org.apache.karaf.features.xml file (with external config + builder config) - try (FileOutputStream fos = new FileOutputStream(featuresProcessingXml.toFile())) { + try (var os = Files.newOutputStream(featuresProcessingXml)) { LOGGER.info("Generating features processor configuration: {}", homeDirectory.relativize(featuresProcessingXml)); - processor.writeInstructions(fos); + processor.writeInstructions(os); } } else if (needFeaturesProcessorFileCopy) { // we may simply copy configured features processor XML configuration @@ -1226,7 +1226,7 @@ public void generateConsistencyReport(Map repositories, Set\n"); writer.write("\n"); writer.write("\n"); diff --git a/services/staticcm/src/main/java/org/apache/karaf/services/staticcm/Configurations.java b/services/staticcm/src/main/java/org/apache/karaf/services/staticcm/Configurations.java index 4edfe0bf01c..283b4bd870c 100644 --- a/services/staticcm/src/main/java/org/apache/karaf/services/staticcm/Configurations.java +++ b/services/staticcm/src/main/java/org/apache/karaf/services/staticcm/Configurations.java @@ -20,9 +20,8 @@ import java.io.BufferedInputStream; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; +import java.nio.file.Files; import java.util.ArrayList; import java.util.HashMap; import java.util.Hashtable; @@ -49,7 +48,7 @@ public static List loadConfigurations(BundleContext context, File if (files != null) { for (File file : files) { if (file.getName().endsWith(".cfg")) { - try (InputStream in = new BufferedInputStream(new FileInputStream(file))) { + try (var in = new BufferedInputStream(Files.newInputStream(file.toPath()))) { in.mark(1); boolean isXml = in.read() == '<'; diff --git a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/Branding.java b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/Branding.java index 8ecf54162a4..6eaeee69213 100644 --- a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/Branding.java +++ b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/Branding.java @@ -21,10 +21,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.*; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Properties; - public final class Branding { static final Logger LOGGER = LoggerFactory.getLogger(Branding.class); @@ -46,7 +48,7 @@ private static void loadPropsFromFile(Properties props, String fileName, boolean } private static void loadPropsFromFile(Properties props, String fileName) { - try (FileInputStream is = new FileInputStream(fileName)) { + try (InputStream is = Files.newInputStream(Path.of(fileName))) { loadProps(props, is); } catch (IOException e) { LOGGER.trace("Could not load branding.", e); diff --git a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/standalone/Main.java b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/standalone/Main.java index 03d2948f85c..b2c66b88f69 100644 --- a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/standalone/Main.java +++ b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/standalone/Main.java @@ -20,16 +20,16 @@ import java.io.BufferedReader; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; -import java.io.Reader; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; @@ -114,14 +114,14 @@ private void run(ThreadIO threadio, String[] args, InputStream in, PrintStream o } if (file != null) { - try (Reader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)))) { + try (var reader = Files.newBufferedReader(Path.of(file))) { sb.setLength(0); for (int c = reader.read(); c >= 0; c = reader.read()) { sb.append((char) c); } } } else if (batch) { - Reader reader = new BufferedReader(new InputStreamReader(System.in)); + var reader = new BufferedReader(new InputStreamReader(System.in)); sb.setLength(0); for (int c = reader.read(); c >= 0; reader.read()) { sb.append((char) c); diff --git a/shell/core/src/main/java/org/apache/karaf/shell/support/ShellUtil.java b/shell/core/src/main/java/org/apache/karaf/shell/support/ShellUtil.java index 862a895c8e4..6e3ab3e832a 100644 --- a/shell/core/src/main/java/org/apache/karaf/shell/support/ShellUtil.java +++ b/shell/core/src/main/java/org/apache/karaf/shell/support/ShellUtil.java @@ -18,10 +18,10 @@ */ package org.apache.karaf.shell.support; -import java.io.File; -import java.io.FileInputStream; import java.io.PrintWriter; import java.io.StringWriter; +import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import java.security.AccessControlContext; import java.security.AccessController; @@ -250,8 +250,8 @@ public static Map getColorMap(Session session, String name, Stri } public static T loadPropertyFromShellCfg(String key, Function parser, T defaultValue) { - File shellCfg = Paths.get(System.getProperty("karaf.etc"), "org.apache.karaf.shell.cfg").toFile(); - try (FileInputStream fis = new FileInputStream(shellCfg)) { + Path shellCfg = Paths.get(System.getProperty("karaf.etc"), "org.apache.karaf.shell.cfg"); + try (var fis = Files.newInputStream(shellCfg)) { Properties properties = new Properties(); properties.load(fis); diff --git a/system/src/main/java/org/apache/karaf/system/internal/SystemServiceImpl.java b/system/src/main/java/org/apache/karaf/system/internal/SystemServiceImpl.java index cc8dbce7e3b..a06e793894b 100644 --- a/system/src/main/java/org/apache/karaf/system/internal/SystemServiceImpl.java +++ b/system/src/main/java/org/apache/karaf/system/internal/SystemServiceImpl.java @@ -17,9 +17,9 @@ package org.apache.karaf.system.internal; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Calendar; import java.util.GregorianCalendar; @@ -167,16 +167,15 @@ public String getName() { public void setName(String name) { try { String karafEtc = bundleContext.getProperty("karaf.etc"); - File etcDir = new File(karafEtc); - File syspropsFile = new File(etcDir, "system.properties"); - FileInputStream fis = new FileInputStream(syspropsFile); + Path syspropsFile = Path.of(karafEtc).resolve("system.properties"); Properties props = new Properties(); - props.load(fis); - fis.close(); + try (var fis = Files.newInputStream(syspropsFile)) { + props.load(fis); + } props.setProperty("karaf.name", name); - FileOutputStream fos = new FileOutputStream(syspropsFile); - props.store(fos, ""); - fos.close(); + try (var fos = Files.newOutputStream(syspropsFile)) { + props.store(fos, ""); + } } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java index 80cec22ddea..082495db022 100644 --- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java +++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java @@ -23,9 +23,7 @@ import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.PosixFilePermissions; @@ -791,9 +789,9 @@ private void detectStartupKarsAndFeatures(Builder builder) { private KarafPropertyEdits configurePropertyEdits() throws IOException, XMLStreamException { KarafPropertyEdits edits = null; if (propertyFileEdits != null) { - File file = new File(propertyFileEdits); - if (file.exists()) { - try (InputStream editsStream = new FileInputStream(propertyFileEdits)) { + Path file = Path.of(propertyFileEdits); + if (Files.exists(file)) { + try (var editsStream = Files.newInputStream(file)) { KarafPropertyInstructionsModelStaxReader kipmsr = new KarafPropertyInstructionsModelStaxReader(); edits = kipmsr.read(editsStream, true); } @@ -842,7 +840,7 @@ private static String getType(Artifact artifact) { return "features"; } if ("xml".equals(artifact.getType())) { - try (InputStream is = new FileInputStream(artifact.getFile())) { + try (var is = Files.newInputStream(artifact.getFile().toPath())) { XMLInputFactory xif = XMLInputFactory.newFactory(); xif.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, true); xif.setProperty(XMLInputFactory.SUPPORT_DTD, false); diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/RunMojo.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/RunMojo.java index 570e6fffc52..1b691d4940d 100644 --- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/RunMojo.java +++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/RunMojo.java @@ -43,7 +43,12 @@ import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; -import java.io.*; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.lang.reflect.Method; import java.net.URI; import java.nio.file.Files; @@ -403,13 +408,13 @@ public static void extract(File sourceFile, File targetFolder) throws IOExceptio private static void extractTarGzDistribution(File sourceDistribution, File _targetFolder) throws IOException { File uncompressedFile = Files.createTempFile("uncompressedTarGz-", ".tar").toFile(); - extractGzArchive(new FileInputStream(sourceDistribution), uncompressedFile); - extract(new TarArchiveInputStream(new FileInputStream(uncompressedFile)), _targetFolder); + extractGzArchive(Files.newInputStream(sourceDistribution.toPath()), uncompressedFile); + extract(new TarArchiveInputStream(Files.newInputStream(uncompressedFile.toPath())), _targetFolder); FileUtils.forceDelete(uncompressedFile); } private static void extractZipDistribution(File sourceDistribution, File _targetFolder) throws IOException { - extract(new ZipArchiveInputStream(new FileInputStream(sourceDistribution)), _targetFolder); + extract(new ZipArchiveInputStream(Files.newInputStream(sourceDistribution.toPath())), _targetFolder); } private static void extractGzArchive(InputStream tarGz, File tar) throws IOException { @@ -425,7 +430,7 @@ private static void extractGzArchive(InputStream tarGz, File tar) throws IOExcep gzIn.close(); } - private static void extract(ArchiveInputStream is, File targetDir) throws IOException { + private static void extract(ArchiveInputStream is, File targetDir) throws IOException { try { if (targetDir.exists()) { FileUtils.forceDelete(targetDir); diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/VerifyMojo.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/VerifyMojo.java index 88da22a5b66..591d7cff91e 100644 --- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/VerifyMojo.java +++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/VerifyMojo.java @@ -28,6 +28,7 @@ import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.net.URL; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -247,9 +248,9 @@ protected void doExecute() throws MojoExecutionException { Hashtable properties = new Hashtable<>(); if (additionalMetadata != null) { - try (Reader reader = new FileReader(additionalMetadata)) { + try (var is = Files.newInputStream(additionalMetadata.toPath())) { Properties metadata = new Properties(); - metadata.load(reader); + metadata.load(is); for (Enumeration e = metadata.propertyNames(); e.hasMoreElements(); ) { Object key = e.nextElement(); Object val = metadata.get(key); diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/client/ClientMojo.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/client/ClientMojo.java index 6e8a8cf80df..aea581b8df8 100644 --- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/client/ClientMojo.java +++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/client/ClientMojo.java @@ -36,18 +36,16 @@ import org.apache.sshd.common.keyprovider.FileKeyPairProvider; import org.fusesource.jansi.Ansi; import org.fusesource.jansi.Ansi.Color; -import org.fusesource.jansi.AnsiConsole; -import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.Console; import java.io.File; -import java.io.FileReader; import java.io.IOError; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; +import java.nio.file.Files; import java.security.KeyPair; import java.util.Comparator; import java.util.EnumSet; @@ -104,11 +102,10 @@ public void execute() throws MojoExecutionException { SortedSet sortedCommands = new TreeSet<>(comparator); if (scripts != null) { for (ScriptDescriptor script : scripts) { - File file = script.getScript(); - try (BufferedReader br = new BufferedReader(new FileReader(file))) { + try (var reader = Files.newBufferedReader(script.getScript().toPath())) { String line; int lineIndex = 0; - while ((line = br.readLine()) != null) { + while ((line = reader.readLine()) != null) { line = line.trim(); if (line.isEmpty()) { continue; diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ExportFeatureMetaDataMojo.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ExportFeatureMetaDataMojo.java index 17619d6deb2..83477beb814 100644 --- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ExportFeatureMetaDataMojo.java +++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ExportFeatureMetaDataMojo.java @@ -18,10 +18,10 @@ package org.apache.karaf.tooling.features; import java.io.File; -import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.nio.file.Files; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -30,7 +30,11 @@ import java.util.jar.JarInputStream; import java.util.jar.Manifest; -import org.apache.karaf.features.internal.model.*; +import org.apache.karaf.features.internal.model.Bundle; +import org.apache.karaf.features.internal.model.Feature; +import org.apache.karaf.features.internal.model.Features; +import org.apache.karaf.features.internal.model.JacksonUtil; +import org.apache.karaf.features.internal.model.JaxbUtil; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; @@ -157,7 +161,7 @@ private Attributes getManifest(Bundle bundle) throws MojoExecutionException { if (artifact.getFile() == null) { resolveArtifact(artifact, remoteRepos); } - try (JarInputStream jis = new JarInputStream(new FileInputStream(artifact.getFile()))) { + try (JarInputStream jis = new JarInputStream(Files.newInputStream(artifact.getFile().toPath()))) { Manifest manifest = jis.getManifest(); if (manifest != null) { attributes = manifest.getMainAttributes(); diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateDescriptorMojo.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateDescriptorMojo.java index 2b70f6b8e47..fd26c0c0924 100644 --- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateDescriptorMojo.java +++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateDescriptorMojo.java @@ -20,7 +20,18 @@ import static java.lang.String.format; import static org.apache.karaf.deployer.kar.KarArtifactInstaller.FEATURE_CLASSIFIER; -import java.io.*; +import java.io.BufferedInputStream; +import java.io.BufferedWriter; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintStream; +import java.io.StringWriter; import java.nio.file.Files; import java.util.zip.ZipEntry; import java.util.ArrayList; @@ -39,7 +50,14 @@ import javax.xml.parsers.ParserConfigurationException; import javax.xml.stream.XMLStreamException; -import org.apache.karaf.features.internal.model.*; +import org.apache.karaf.features.internal.model.ConfigFile; +import org.apache.karaf.features.internal.model.Bundle; +import org.apache.karaf.features.internal.model.Dependency; +import org.apache.karaf.features.internal.model.Feature; +import org.apache.karaf.features.internal.model.Features; +import org.apache.karaf.features.internal.model.JacksonUtil; +import org.apache.karaf.features.internal.model.JaxbUtil; +import org.apache.karaf.features.internal.model.ObjectFactory; import org.apache.karaf.tooling.utils.Dependency31Helper; import org.apache.karaf.tooling.utils.DependencyHelper; import org.apache.karaf.tooling.utils.DependencyHelperFactory; @@ -720,7 +738,7 @@ private Manifest getManifest(File file) { File manifestFile = new File(file, "META-INF/MANIFEST.MF"); if(manifestFile.exists() && manifestFile.isFile()) { try { - InputStream manifestInputStream = new FileInputStream(manifestFile); + InputStream manifestInputStream = Files.newInputStream(manifestFile.toPath()); return new Manifest(manifestInputStream); } catch (IOException e) { getLog().warn("Error while reading artifact from directory", e); @@ -769,7 +787,7 @@ static Features readFeaturesFromKar(File karFile) throws IOException, XMLStreamE ObjectFactory objectFactory = new ObjectFactory(); Features merged = objectFactory.createFeaturesRoot(); merged.setName(karFile.getName()); - try (JarInputStream jar = new JarInputStream(new FileInputStream(karFile))) { + try (JarInputStream jar = new JarInputStream(Files.newInputStream(karFile.toPath()))) { ZipEntry entry; while ((entry = jar.getNextEntry()) != null) { String entryName = entry.getName(); diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/Dependency31Helper.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/Dependency31Helper.java index 497a8e7465b..90ecdd31d3f 100644 --- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/Dependency31Helper.java +++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/Dependency31Helper.java @@ -39,21 +39,31 @@ import org.eclipse.aether.util.graph.selector.AndDependencySelector; import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector; import org.eclipse.aether.util.graph.selector.OptionalDependencySelector; -import org.eclipse.aether.util.graph.transformer.*; +import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer; +import org.eclipse.aether.util.graph.transformer.ConflictMarker; +import org.eclipse.aether.util.graph.transformer.ConflictResolver; +import org.eclipse.aether.util.graph.transformer.JavaDependencyContextRefiner; +import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver; +import org.eclipse.aether.util.graph.transformer.JavaScopeSelector; +import org.eclipse.aether.util.graph.transformer.NearestVersionSelector; +import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector; import org.codehaus.plexus.util.StringUtils; import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.*; +import java.nio.file.Files; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import javax.xml.namespace.QName; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamReader; -import static java.lang.String.*; import static org.apache.commons.lang3.reflect.MethodUtils.invokeMethod; import static org.apache.karaf.deployer.kar.KarArtifactInstaller.FEATURE_CLASSIFIER; @@ -301,7 +311,7 @@ public static boolean isFeature(Artifact artifact) { } public static boolean isFeaturesXml(File file) { - try (InputStream is = new FileInputStream(file)) { + try (var is = Files.newInputStream(file.toPath())) { XMLInputFactory xif = XMLInputFactory.newFactory(); xif.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, true); xif.setProperty(XMLInputFactory.SUPPORT_DTD, false); @@ -402,7 +412,7 @@ public File resolveById(String id, Log log) throws MojoFailureException { result = resolveArtifact(MavenUtil.aetherToArtifact(id)); } catch (ArtifactResolutionException e) { log.warn("Could not resolve " + id, e); - throw new MojoFailureException(format("Couldn't resolve artifact %s", id), e); + throw new MojoFailureException(String.format("Couldn't resolve artifact %s", id), e); } if (log.isDebugEnabled()) { diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/MojoSupport.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/MojoSupport.java index 929388245cc..0b36888f5d4 100644 --- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/MojoSupport.java +++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/utils/MojoSupport.java @@ -18,9 +18,8 @@ package org.apache.karaf.tooling.utils; import java.io.File; -import java.io.InputStream; import java.io.IOException; -import java.io.OutputStream; +import java.io.UncheckedIOException; import java.net.MalformedURLException; import java.net.URL; import java.nio.file.Files; @@ -29,7 +28,6 @@ import java.util.List; import java.util.Map; -import org.apache.karaf.util.StreamUtils; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.metadata.ArtifactMetadataSource; @@ -91,13 +89,13 @@ public abstract class MojoSupport extends AbstractMojo { @Component protected ArtifactFactory factory; - + /** * The artifact type of a feature. */ @Parameter(defaultValue = "xml") private String featureArtifactType = "xml"; - + /** * The Maven session. */ @@ -165,7 +163,7 @@ protected Map createManagedVersionMap(String projectId, } return map; } - + protected String translateFromMaven(String uri) { if (uri.startsWith("mvn:")) { String[] parts = uri.substring("mvn:".length()).split("/"); @@ -221,12 +219,12 @@ private String extractProtocolFromLocalMavenRepo() { throw new RuntimeException("Repository URL is not valid", e); } } - + private Dependency findDependency(List dependencies, String artifactId, String groupId) { for(Dependency dep : dependencies) { if (artifactId.equals(dep.getArtifactId()) && groupId.equals(dep.getGroupId()) && featureArtifactType.equals(dep.getType())) { - if (dep.getVersion() != null) + if (dep.getVersion() != null) return dep; } } @@ -325,7 +323,7 @@ protected Artifact resourceToArtifact(String resourceLocation, boolean skipNonMa artifact.setRepository(repo); return artifact; } - + private org.apache.maven.repository.Proxy configureProxyToInlineRepo() { if (mavenSession != null && mavenSession.getSettings() != null) { Proxy proxy = mavenSession.getSettings().getActiveProxy(); @@ -341,7 +339,7 @@ private org.apache.maven.repository.Proxy configureProxyToInlineRepo() { } else { return null; } - + } else { return null; } @@ -351,15 +349,12 @@ protected void copy(File sourceFile, File destFile) { File targetDir = destFile.getParentFile(); ensureDirExists(targetDir); - try (InputStream is = Files.newInputStream(sourceFile.toPath())) { - try (OutputStream bos = Files.newOutputStream(destFile.toPath())) { - StreamUtils.copy(is, bos); - } + try { + Files.copy(sourceFile.toPath(), destFile.toPath()); } catch (IOException e) { - throw new RuntimeException(e.getMessage(), e); + throw new UncheckedIOException(e); } } - /** * Make sure the target directory exists and that is actually a directory. diff --git a/tooling/utils/src/main/java/org/apache/karaf/tools/utils/KarafPropertiesFile.java b/tooling/utils/src/main/java/org/apache/karaf/tools/utils/KarafPropertiesFile.java index 2c1a9627c10..474a1a95cbd 100644 --- a/tooling/utils/src/main/java/org/apache/karaf/tools/utils/KarafPropertiesFile.java +++ b/tooling/utils/src/main/java/org/apache/karaf/tools/utils/KarafPropertiesFile.java @@ -20,9 +20,8 @@ import org.apache.karaf.tools.utils.model.KarafPropertyEdit; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; +import java.nio.file.Files; public class KarafPropertiesFile { @@ -52,7 +51,7 @@ public void load() throws IOException { if (!propertyFile.exists()) { return; } - properties.load(new FileInputStream(propertyFile)); + properties.load(Files.newInputStream(propertyFile.toPath())); } public void put(String key, String value) { @@ -96,8 +95,8 @@ public void store() throws IOException { } public void store(File destinationFile) throws IOException { - try (FileOutputStream outputStream = new FileOutputStream(destinationFile)) { - properties.store(outputStream, String.format("Modified by %s", getClass().getName())); + try (var os = Files.newOutputStream(destinationFile.toPath())) { + properties.store(os, String.format("Modified by %s", getClass().getName())); } } diff --git a/tooling/utils/src/test/java/org/apache/karaf/tools/utils/KarafPropertiesEditorTest.java b/tooling/utils/src/test/java/org/apache/karaf/tools/utils/KarafPropertiesEditorTest.java index 41bf839a069..04801ea28a1 100644 --- a/tooling/utils/src/test/java/org/apache/karaf/tools/utils/KarafPropertiesEditorTest.java +++ b/tooling/utils/src/test/java/org/apache/karaf/tools/utils/KarafPropertiesEditorTest.java @@ -14,7 +14,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.karaf.tools.utils; import com.google.common.io.Resources; @@ -23,7 +22,6 @@ import org.junit.Test; import java.io.File; -import java.io.FileInputStream; import java.io.InputStream; import java.net.URL; import java.nio.file.FileSystems; @@ -60,16 +58,14 @@ public void onceOver() throws Exception { .setEdits(edits); editor.run(); - File resultConfigProps = new File(outputEtc.toFile(), "config.properties"); Properties properties = new Properties(); - try (InputStream resultInputStream = new FileInputStream(resultConfigProps)) { + try (var resultInputStream = Files.newInputStream(outputEtc.resolve("config.properties"))) { properties.load(resultInputStream); } assertEquals("equinox", properties.getProperty("karaf.framework")); assertEquals("prepended,root,toor", properties.getProperty("karaf.name")); - resultConfigProps = new File(outputEtc.toFile(), "jre.properties"); - try (InputStream resultInputStream = new FileInputStream(resultConfigProps)) { + try (var resultInputStream = Files.newInputStream(outputEtc.resolve("jre.properties"))) { properties.load(resultInputStream); } diff --git a/util/src/main/java/org/apache/karaf/jpm/impl/ProcessImpl.java b/util/src/main/java/org/apache/karaf/jpm/impl/ProcessImpl.java index 41658ed6023..bae28eab926 100644 --- a/util/src/main/java/org/apache/karaf/jpm/impl/ProcessImpl.java +++ b/util/src/main/java/org/apache/karaf/jpm/impl/ProcessImpl.java @@ -18,9 +18,7 @@ import java.io.BufferedReader; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; import java.io.InputStreamReader; import java.io.InterruptedIOException; import java.nio.file.Files; @@ -170,10 +168,8 @@ public static Process attach(int pid) throws IOException { } private static int readPid(File pidFile) throws IOException { - try (InputStream is = new FileInputStream(pidFile)) { - BufferedReader r = new BufferedReader(new InputStreamReader(is)); - String pidString = r.readLine(); - return Integer.valueOf(pidString); + try (var reader = Files.newBufferedReader(pidFile.toPath())) { + return Integer.valueOf(reader.readLine()); } } diff --git a/util/src/main/java/org/apache/karaf/jpm/impl/ScriptUtils.java b/util/src/main/java/org/apache/karaf/jpm/impl/ScriptUtils.java index 10f07e4fd34..45c58fb8d27 100644 --- a/util/src/main/java/org/apache/karaf/jpm/impl/ScriptUtils.java +++ b/util/src/main/java/org/apache/karaf/jpm/impl/ScriptUtils.java @@ -17,7 +17,6 @@ package org.apache.karaf.jpm.impl; import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InterruptedIOException; @@ -64,7 +63,7 @@ public static void copyFilteredResource(String resource, File outFile, Map closeables) { } } + @Deprecated(since = "4.5.0", forRemoval = true) public static void copy(final InputStream input, final OutputStream output) throws IOException { - byte[] buffer = new byte[1024 * 16]; - int n; - while ((n = input.read(buffer)) > 0) { - output.write(buffer, 0, n); - } + input.transferTo(output); output.flush(); } diff --git a/util/src/main/java/org/apache/karaf/util/bundles/BundleUtils.java b/util/src/main/java/org/apache/karaf/util/bundles/BundleUtils.java index e210dec871a..8c6a639a07f 100644 --- a/util/src/main/java/org/apache/karaf/util/bundles/BundleUtils.java +++ b/util/src/main/java/org/apache/karaf/util/bundles/BundleUtils.java @@ -19,7 +19,6 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; @@ -37,7 +36,7 @@ public class BundleUtils { public static File fixBundleWithUpdateLocation(InputStream is, String uri) throws IOException { File file = Files.createTempFile("update-", ".jar").toFile(); try (ZipInputStream zis = new ZipInputStream(is); - ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(file))) { + ZipOutputStream zos = new ZipOutputStream(Files.newOutputStream(file.toPath()))) { byte[] buf = new byte[8192]; zos.setLevel(0); diff --git a/util/src/test/java/org/apache/karaf/util/BundleUtilsTest.java b/util/src/test/java/org/apache/karaf/util/BundleUtilsTest.java index 548d65f5a00..78e7ec45dc0 100644 --- a/util/src/test/java/org/apache/karaf/util/BundleUtilsTest.java +++ b/util/src/test/java/org/apache/karaf/util/BundleUtilsTest.java @@ -20,7 +20,7 @@ import org.junit.Test; import java.io.File; -import java.io.FileInputStream; +import java.nio.file.Files; public class BundleUtilsTest { @@ -29,6 +29,7 @@ public void testJavaxMail() throws Exception { String url = getClass().getClassLoader().getResource("com/sun/mail/util/ASCIIUtility.class").toString(); url = url.substring("jar:file:".length(), url.indexOf("!/")); File file = new File(url); - BundleUtils.fixBundleWithUpdateLocation(new FileInputStream(file), "mvn:com.sun.mail/jakarta.mail/1.6.7"); + BundleUtils.fixBundleWithUpdateLocation(Files.newInputStream(file.toPath()), + "mvn:com.sun.mail/jakarta.mail/1.6.7"); } }