From 59135590f84f59007d0210131c609e8257a75150 Mon Sep 17 00:00:00 2001 From: Dan Timoney Date: Tue, 10 Nov 2020 12:53:16 -0500 Subject: Handle properties file reference outside OSGi Update properties file resolves for OSGi to handle ClassNotFoundError exception correctly. Change-Id: I511213e447d07576c9a44654956b207174ed6638 Issue-ID: CCSDK-2976 Signed-off-by: Dan Timoney --- .../onap/ccsdk/sli/core/utils/JREFileResolver.java | 32 +++++++++++++--------- .../utils/common/BundleContextFileResolver.java | 26 ++++++++++-------- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/JREFileResolver.java b/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/JREFileResolver.java index 9ae094f1..c4a4fca4 100755 --- a/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/JREFileResolver.java +++ b/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/JREFileResolver.java @@ -23,11 +23,16 @@ package org.onap.ccsdk.sli.core.utils; import java.io.File; import java.io.InputStream; import java.net.URL; +import java.nio.file.CopyOption; import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; import java.util.Optional; import org.osgi.framework.Bundle; import org.osgi.framework.FrameworkUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Resolves project properties files relative to the directory identified by the JRE property @@ -39,6 +44,7 @@ public class JREFileResolver implements PropertiesFileResolver { * Key for JRE argument representing the configuration directory */ + private static final Logger LOGGER = LoggerFactory.getLogger(JREFileResolver.class); private final String successMessage; private final Class clazz; @@ -55,18 +61,9 @@ public class JREFileResolver implements PropertiesFileResolver { @Override public Optional resolveFile(final String filename) { - final Bundle bundle; - try { - bundle = FrameworkUtil.getBundle(this.clazz); - } catch (NoClassDefFoundError e) { - return Optional.empty(); - } - - final File dataFile; - - try { + final Bundle bundle = FrameworkUtil.getBundle(this.clazz); if (bundle == null) { return Optional.empty(); } @@ -77,7 +74,7 @@ public class JREFileResolver implements PropertiesFileResolver { } - dataFile = bundle.getDataFile(filename); + final File dataFile = bundle.getDataFile(filename); if(dataFile.exists()) { dataFile.delete(); } @@ -89,8 +86,17 @@ public class JREFileResolver implements PropertiesFileResolver { } return Optional.of(dataFile); - } catch (NoClassDefFoundError e) { - return Optional.empty(); + } catch (final NoClassDefFoundError e) { + LOGGER.info("Getting /{} embedded with {}", filename, clazz.getCanonicalName()); + try (InputStream input = clazz.getResourceAsStream("/"+filename)) { + File propFile = File.createTempFile("tmp", ".properties", null); + LOGGER.info("Copying /{} to {}", filename, propFile.getAbsolutePath()); + Files.copy(input, propFile.toPath(), StandardCopyOption.REPLACE_EXISTING); + return Optional.of(propFile); + } catch (Exception e1) { + LOGGER.info("Caught exception getting {} embedded in jar", filename, e1); + return Optional.empty(); + } } catch(final Exception e) { return Optional.empty(); diff --git a/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/common/BundleContextFileResolver.java b/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/common/BundleContextFileResolver.java index 9496d90e..356009f3 100755 --- a/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/common/BundleContextFileResolver.java +++ b/utils/provider/src/main/java/org/onap/ccsdk/sli/core/utils/common/BundleContextFileResolver.java @@ -56,20 +56,22 @@ public class BundleContextFileResolver implements PropertiesFileResolver { */ @Override public Optional resolveFile(final String filename) { - if(FrameworkUtil.getBundle(clazz) == null) { - return Optional.empty(); - } else { - try { - final String pathProperty = FrameworkUtil.getBundle(this.clazz).getBundleContext().getProperty(SDNC_CONFIG_DIR_PROP_KEY); - if(Strings.isNullOrEmpty(pathProperty)) { - return Optional.empty(); - } - final Path dblibPath = Paths.get(pathProperty); - return Optional.of(dblibPath.resolve(filename).toFile()); - } catch(final Exception e) { - LoggerFactory.getLogger(this.getClass()).error("", e); + try { + if (FrameworkUtil.getBundle(clazz) == null) { return Optional.empty(); + } else { + final String pathProperty = FrameworkUtil.getBundle(this.clazz).getBundleContext() + .getProperty(SDNC_CONFIG_DIR_PROP_KEY); + if (Strings.isNullOrEmpty(pathProperty)) { + return Optional.empty(); + } + final Path dblibPath = Paths.get(pathProperty); + return Optional.of(dblibPath.resolve(filename).toFile()); + } + } catch (Exception|NoClassDefFoundError e) { + LoggerFactory.getLogger(this.getClass()).error("", e); + return Optional.empty(); } } -- cgit 1.2.3-korg