diff --git a/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceConfigurationManagerNIO.java b/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceConfigurationManagerNIO.java index 5bec89875b14..5e1e4f1fe07c 100644 --- a/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceConfigurationManagerNIO.java +++ b/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceConfigurationManagerNIO.java @@ -111,7 +111,11 @@ public List getConfigurationStorages() { @Override public InputStream readConfiguration(@NotNull String name) throws IOException { Path path = getConfigurationPath(false).resolve(name); - if (!Files.exists(path)) { + if (Files.notExists(path)) { + // maybe it's .dbeaver-data-sources*.xml in the project folder (DBeaver < 6.1.3 (Legacy)) + path = project.getAbsolutePath().resolve(name); + } + if (Files.notExists(path)) { return null; } return Files.newInputStream(path); diff --git a/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java b/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java index b081da8a9d7d..da78a3af533c 100644 --- a/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java +++ b/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java @@ -46,7 +46,10 @@ import org.jkiss.utils.ArrayUtils; import org.jkiss.utils.CommonUtils; +import java.io.IOException; import java.lang.reflect.InvocationTargetException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.*; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -170,7 +173,16 @@ DBPDataSourceConfigurationStorage getDefaultStorage() { } } // No default storage. Seems to be an internal error - throw new IllegalStateException("no default storage in registry " + this); + log.warn("no default storage in registry " + this); + try { + java.nio.file.Path configPath = this.getProject().getMetadataFolder(false).resolve(MODERN_CONFIG_FILE_NAME); + Files.createFile(configPath); + DBPDataSourceConfigurationStorage defaultStorage = new DataSourceFileStorage(configPath, false, true); + this.storages.add(defaultStorage); + return defaultStorage; + } catch (IOException e) { + throw new IllegalStateException("Unable to create a default storage in registry " + this, e); + } } } diff --git a/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceSerializerModern.java b/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceSerializerModern.java index e8fa5a3d49d2..991c78c93100 100644 --- a/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceSerializerModern.java +++ b/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceSerializerModern.java @@ -363,7 +363,9 @@ public void parseDataSources( credJson, new TypeToken>>>() { }.getType()); - secureProperties.putAll(res); + if (res != null) { + secureProperties.putAll(res); + } } catch (Exception e) { log.error("Error decrypting secure credentials", e); } @@ -526,7 +528,7 @@ public void parseDataSources( } dataSource = new DataSourceDescriptor( registry, - registry.getDefaultStorage(), + configurationStorage, origin, id, driver,