You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by tm...@apache.org on 2022/09/22 09:35:01 UTC

[sling-org-apache-sling-distribution-core] branch master updated: SLING-11560 : Vault error when importing a node with the same name and UUID as a pre-existing non-sibling node (#66)

This is an automated email from the ASF dual-hosted git repository.

tmaret pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-distribution-core.git


The following commit(s) were added to refs/heads/master by this push:
     new f4d5e6e0 SLING-11560 : Vault error when importing a node with the same name and UUID as a pre-existing non-sibling node (#66)
f4d5e6e0 is described below

commit f4d5e6e0ab4bf22a03eafa8f63e5e307f28e5963
Author: Manas Kumar Maji <ma...@gmail.com>
AuthorDate: Thu Sep 22 15:04:55 2022 +0530

    SLING-11560 : Vault error when importing a node with the same name and UUID as a pre-existing non-sibling node (#66)
---
 pom.xml                                            |  2 +-
 .../impl/vlt/FileVaultContentSerializer.java       | 22 ++------
 .../serialization/impl/vlt/ImportSettings.java     | 61 ++++++++++++++++++++++
 .../VaultDistributionPackageBuilderFactory.java    | 49 ++++++++++++-----
 .../serialization/impl/vlt/VltUtils.java           | 35 +++++++------
 .../LocalDistributionPackageImporterTest.java      | 11 ++--
 .../impl/vlt/FileVaultContentSerializerTest.java   | 19 ++++---
 .../serialization/impl/vlt/VltUtilsTest.java       |  2 +-
 8 files changed, 138 insertions(+), 63 deletions(-)

diff --git a/pom.xml b/pom.xml
index 4ae89609..b5e4818e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -324,7 +324,7 @@
         <dependency>
             <groupId>org.apache.jackrabbit.vault</groupId>
             <artifactId>org.apache.jackrabbit.vault</artifactId>
-            <version>3.4.0</version>
+            <version>3.6.4</version>
         </dependency>
         <!-- HTTP -->
         <dependency>
diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
index 71bded70..ef060f18 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
@@ -30,11 +30,9 @@ import java.util.UUID;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
-import org.apache.jackrabbit.vault.fs.api.ImportMode;
 import org.apache.jackrabbit.vault.fs.api.RegexpPathMapping;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.config.MetaInf;
-import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.ImportOptions;
 import org.apache.jackrabbit.vault.fs.io.Importer;
@@ -71,34 +69,24 @@ public class FileVaultContentSerializer implements DistributionContentSerializer
     private static final String MAPPING_DELIMITER = ";";
 
     private final Packaging packaging;
-    private final ImportMode importMode;
-    private final AccessControlHandling aclHandling;
-    private final AccessControlHandling cugHandling;
     private final String[] packageRoots;
-    private final int autosaveThreshold;
     private final TreeMap<String, List<String>> nodeFilters;
     private final TreeMap<String, List<String>> propertyFilters;
     private final boolean useBinaryReferences;
     private final String name;
     private final Map<String, String> exportPathMapping;
-    private final boolean strict;
+    private final ImportSettings importSettings;
 
-    public FileVaultContentSerializer(String name, Packaging packaging, ImportMode importMode, AccessControlHandling aclHandling, AccessControlHandling cugHandling, String[] packageRoots,
-                                      String[] nodeFilters, String[] propertyFilters, boolean useBinaryReferences, int autosaveThreshold,
-                                      Map<String, String> exportPathMapping,
-                                      boolean strict) {
+    public FileVaultContentSerializer(String name, Packaging packaging, String[] packageRoots, String[] nodeFilters, String[] propertyFilters,
+                                      boolean useBinaryReferences, Map<String, String> exportPathMapping, ImportSettings importSettings) {
         this.name = name;
         this.packaging = packaging;
-        this.importMode = importMode;
-        this.aclHandling = aclHandling;
-        this.cugHandling = cugHandling;
         this.packageRoots = packageRoots;
-        this.autosaveThreshold = autosaveThreshold;
         this.nodeFilters = VltUtils.parseFilters(nodeFilters);
         this.propertyFilters = VltUtils.parseFilters(propertyFilters);
         this.useBinaryReferences = useBinaryReferences;
         this.exportPathMapping = exportPathMapping;
-        this.strict = strict;
+        this.importSettings = importSettings;
     }
 
     @Override
@@ -131,7 +119,7 @@ public class FileVaultContentSerializer implements DistributionContentSerializer
         Archive archive = null;
         try {
             session = getSession(resourceResolver);
-            ImportOptions importOptions = VltUtils.getImportOptions(aclHandling, cugHandling, importMode, autosaveThreshold, strict);
+            ImportOptions importOptions = VltUtils.getImportOptions(importSettings);
             ErrorListener errorListener = new ErrorListener();
             importOptions.setListener(errorListener);
             Importer importer = new Importer(importOptions);
diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/ImportSettings.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/ImportSettings.java
new file mode 100644
index 00000000..5daab856
--- /dev/null
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/ImportSettings.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.distribution.serialization.impl.vlt;
+
+import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
+import org.apache.jackrabbit.vault.fs.api.ImportMode;
+import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
+
+/**
+ * Settings that control the package import.
+ */
+public class ImportSettings {
+    private final ImportMode importMode;
+    private final AccessControlHandling aclHandling;
+    private final AccessControlHandling cugHandling;
+    private final int autosaveThreshold;
+    private final boolean isStrict;
+    private final boolean overwritePrimaryTypesOfFolders;
+    private final IdConflictPolicy idConflictPolicy;
+
+    public ImportSettings(ImportMode importMode, AccessControlHandling aclHandling, AccessControlHandling cugHandling, int autosaveThreshold,
+                          boolean isStrict, boolean overwritePrimaryTypesOfFolders, IdConflictPolicy idConflictPolicy) {
+        this.importMode = importMode;
+        this.aclHandling = aclHandling;
+        this.cugHandling = cugHandling;
+        this.autosaveThreshold = autosaveThreshold;
+        this.isStrict = isStrict;
+        this.overwritePrimaryTypesOfFolders = overwritePrimaryTypesOfFolders;
+        this.idConflictPolicy = idConflictPolicy;
+    }
+
+    public ImportMode getImportMode() { return importMode; }
+
+    public AccessControlHandling getAclHandling() { return aclHandling; }
+
+    public AccessControlHandling getCugHandling() { return cugHandling; }
+
+    public int getAutosaveThreshold() { return autosaveThreshold; }
+
+    public boolean isStrict() { return isStrict; }
+
+    public boolean isOverwritePrimaryTypesOfFolders() { return overwritePrimaryTypesOfFolders; }
+
+    public IdConflictPolicy getIdConflictPolicy() { return idConflictPolicy; }
+}
diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
index 5e16a05b..2caa121e 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
@@ -18,6 +18,7 @@
  */
 package org.apache.sling.distribution.serialization.impl.vlt;
 
+import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
 import org.apache.jackrabbit.vault.fs.api.ImportMode;
 import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
 import org.apache.jackrabbit.vault.packaging.Packaging;
@@ -160,13 +161,23 @@ public class VaultDistributionPackageBuilderFactory implements DistributionPacka
                 description = "List of paths that require be mapped." +
                 "The format is {sourcePattern}={destinationPattern}, e.g. /etc/(.*)=/var/$1/some or simply /data=/bak")
         String[] pathsMapping();
-        
+
         @AttributeDefinition(
                 name = "Install a content package in a strict mode",
-                description = "Flag to mark an error response will be thrown, if a content package will incorrectly installed")
-        boolean strictImport() default DEFAULT_STRICT_IMPORT_SETTINGS;
+                description = "Whether an error will be thrown, if a content package is incorrectly installed")
+        boolean strictImport() default DEFAULT_IS_STRICT;
+
+        @AttributeDefinition(
+                name = "Legacy Folder Primary Type Mode",
+                description = "Whether to overwrite the primary type of folders during imports")
+        boolean overwritePrimaryTypesOfFolders() default DEFAULT_OVERWRITE_PRIMARY_TYPES_OF_FOLDER;
+
+        @AttributeDefinition(
+                name = "ID Conflict Policy",
+                description = "Node id conflict policy to be used during import")
+        IdConflictPolicy idConflictPolicy() default IdConflictPolicy.LEGACY;
     }
-    
+
     private static final long DEFAULT_PACKAGE_CLEANUP_DELAY = 60L;
     // 1M
     private static final int DEFAULT_FILE_THRESHOLD_VALUE = 1;
@@ -174,8 +185,9 @@ public class VaultDistributionPackageBuilderFactory implements DistributionPacka
     private static final boolean DEFAULT_USE_OFF_HEAP_MEMORY = false;
     private static final String DEFAULT_DIGEST_ALGORITHM = "NONE";
     private static final int DEFAULT_MONITORING_QUEUE_SIZE = 0;
-    private static final boolean DEFAULT_STRICT_IMPORT_SETTINGS = true;
-
+    // importer setting constants
+    private static final boolean DEFAULT_IS_STRICT = true;
+    private static final boolean DEFAULT_OVERWRITE_PRIMARY_TYPES_OF_FOLDER = true;
 
     @Reference
     private Packaging packaging;
@@ -204,13 +216,19 @@ public class VaultDistributionPackageBuilderFactory implements DistributionPacka
 
         String tempFsFolder = SettingsUtils.removeEmptyEntry(conf.tempFsFolder());
         boolean useBinaryReferences = conf.useBinaryReferences();
-        int autosaveThreshold = conf.autoSaveThreshold();
 
         String digestAlgorithm = conf.digestAlgorithm();
         if (DEFAULT_DIGEST_ALGORITHM.equals(digestAlgorithm)) {
             digestAlgorithm = null;
         }
 
+        // check the mount path patterns, if any
+        Map<String, String> pathsMapping = toMap(conf.pathsMapping(), new String[0]);
+        pathsMapping = SettingsUtils.removeEmptyEntries(pathsMapping);
+
+        // import settings
+        int autosaveThreshold = conf.autoSaveThreshold();
+
         ImportMode importMode = null;
         if (importModeString != null) {
             importMode = ImportMode.valueOf(importModeString.trim());
@@ -226,14 +244,17 @@ public class VaultDistributionPackageBuilderFactory implements DistributionPacka
             cugHandling = AccessControlHandling.valueOf(cugHandlingString.trim());
         }
 
-        // check the mount path patterns, if any
-        Map<String, String> pathsMapping = toMap(conf.pathsMapping(), new String[0]);
-        pathsMapping = SettingsUtils.removeEmptyEntries(pathsMapping);
-
         boolean strictImport = conf.strictImport();
 
-        DistributionContentSerializer contentSerializer = new FileVaultContentSerializer(name, packaging, importMode, aclHandling, cugHandling,
-                packageRoots, packageNodeFilters, packagePropertyFilters, useBinaryReferences, autosaveThreshold, pathsMapping, strictImport);
+        boolean overwritePrimaryTypesOfFolders = conf.overwritePrimaryTypesOfFolders();
+
+        IdConflictPolicy idConflictPolicy = conf.idConflictPolicy();
+
+        ImportSettings importSettings = new ImportSettings(importMode, aclHandling, cugHandling, autosaveThreshold, strictImport,
+                overwritePrimaryTypesOfFolders, idConflictPolicy);
+
+        DistributionContentSerializer contentSerializer = new FileVaultContentSerializer(name, packaging, packageRoots, packageNodeFilters,
+                packagePropertyFilters, useBinaryReferences, pathsMapping, importSettings);
 
         DistributionPackageBuilder wrapped;
         if ("filevlt".equals(type)) {
@@ -301,7 +322,7 @@ public class VaultDistributionPackageBuilderFactory implements DistributionPacka
     * (taken and adjusted from PropertiesUtil, because the handy toMap() function is not available as
     * part of the metatype functionality
     * 
-    * @param propValue The object to convert.
+    * @param values The path mappings.
     * @param defaultArray The default array converted to map.
     * @return Map value
     */
diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
index dfc501fb..40cef7cb 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
@@ -44,6 +44,7 @@ import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.vault.fs.api.ImportMode;
 import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
+import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
 import org.apache.jackrabbit.vault.fs.config.DefaultMetaInf;
 import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.config.MetaInf;
@@ -79,14 +80,13 @@ public class VltUtils {
     private static final String MAPPING_DELIMITER = ";";
 
     public static WorkspaceFilter createFilter(DistributionRequest distributionRequest, NavigableMap<String, List<String>> nodeFilters,
-                                               NavigableMap<String, List<String>> propertyFilters) {
+                                               NavigableMap<String, List<String>> propertyFilters) throws ConfigurationException {
         DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
 
         for (String path : distributionRequest.getPaths()) {
 
             // Set node path filters
-            List<String> patterns = new ArrayList<String>();
-            patterns.addAll(Arrays.asList(distributionRequest.getFilters(path)));
+            List<String> patterns = new ArrayList<String>(Arrays.asList(distributionRequest.getFilters(path)));
             boolean deep = distributionRequest.isDeep(path);
             PathFilterSet nodeFilterSet = new PathFilterSet(path);
             if (!deep) {
@@ -122,7 +122,8 @@ public class VltUtils {
         return paths;
     }
 
-    private static void initFilterSet(PathFilterSet filterSet, NavigableMap<String, List<String>> globalFilters, List<String> patterns) {
+    private static void initFilterSet(PathFilterSet filterSet, NavigableMap<String, List<String>> globalFilters,
+                                      List<String> patterns) throws ConfigurationException {
 
         // add the most specific filter rules
         String root = filterSet.getRoot();
@@ -227,22 +228,22 @@ public class VltUtils {
         return packageRoot;
     }
 
-    public static ImportOptions getImportOptions(AccessControlHandling aclHandling, AccessControlHandling cugHandling, ImportMode importMode, int autosaveThreshold, boolean strict) {
+    public static ImportOptions getImportOptions(ImportSettings importSettings) {
         ImportOptions opts = new ImportOptions();
-        if (aclHandling != null) {
-            opts.setAccessControlHandling(aclHandling);
+        if (importSettings.getAclHandling() != null) {
+            opts.setAccessControlHandling(importSettings.getAclHandling());
         } else {
             // default to overwrite
             opts.setAccessControlHandling(AccessControlHandling.OVERWRITE);
         }
-        if (cugHandling != null) {
-            opts.setCugHandling(cugHandling);
+        if (importSettings.getCugHandling() != null) {
+            opts.setCugHandling(importSettings.getCugHandling());
         } else {
             // default to overwrite
             opts.setCugHandling(AccessControlHandling.OVERWRITE);
         }
-        if (importMode != null) {
-            opts.setImportMode(importMode);
+        if (importSettings.getImportMode() != null) {
+            opts.setImportMode(importSettings.getImportMode());
         } else {
             // default to update
             opts.setImportMode(ImportMode.UPDATE);
@@ -250,11 +251,15 @@ public class VltUtils {
 
         opts.setPatchKeepInRepo(false);
 
-        if (autosaveThreshold >= 0) {
-            opts.setAutoSaveThreshold(autosaveThreshold);
+        if (importSettings.getAutosaveThreshold() >= 0) {
+            opts.setAutoSaveThreshold(importSettings.getAutosaveThreshold());
         }
 
-        opts.setStrict(strict);
+        opts.setStrict(importSettings.isStrict());
+
+        opts.setIdConflictPolicy(importSettings.getIdConflictPolicy());
+
+        opts.setOverwritePrimaryTypesOfFolders(importSettings.isOverwritePrimaryTypesOfFolders());
 
         return opts;
     }
@@ -435,7 +440,7 @@ public class VltUtils {
         return new SimpleDistributionRequest(requestType, paths.toArray(new String[paths.size()]), deepPaths, filters);
     }
 
-    private static PathFilterSet.Entry<DefaultPathFilter> extractPathPattern(String pattern) {
+    private static PathFilterSet.Entry<DefaultPathFilter> extractPathPattern(String pattern) throws ConfigurationException {
         PathFilterSet.Entry<DefaultPathFilter> result;
         if (pattern.startsWith("+")) {
             result = new PathFilterSet.Entry<DefaultPathFilter>(new DefaultPathFilter(pattern.substring(1)), true);
diff --git a/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java b/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java
index e66c3164..64afbbe4 100644
--- a/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java
+++ b/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java
@@ -19,6 +19,7 @@
 package org.apache.sling.distribution.packaging.impl.importer;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
 import org.apache.jackrabbit.vault.fs.api.ImportMode;
 import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
 import org.apache.jackrabbit.vault.packaging.impl.PackagingImpl;
@@ -35,6 +36,7 @@ import org.apache.sling.distribution.packaging.DistributionPackageInfo;
 import org.apache.sling.distribution.packaging.impl.DistributionPackageUtils;
 import org.apache.sling.distribution.packaging.impl.FileDistributionPackageBuilder;
 import org.apache.sling.distribution.serialization.impl.vlt.FileVaultContentSerializer;
+import org.apache.sling.distribution.serialization.impl.vlt.ImportSettings;
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.junit.Rule;
@@ -78,19 +80,18 @@ public class LocalDistributionPackageImporterTest {
         LocalDistributionPackageImporter localdistributionPackageImporter =
                 new LocalDistributionPackageImporter("mockImporter", distributionEventFactory, packageBuilder);
 
+        ImportSettings importSettings = new ImportSettings(ImportMode.UPDATE, AccessControlHandling.IGNORE,
+                AccessControlHandling.IGNORE, -1, false, false, IdConflictPolicy.LEGACY);
+
         FileVaultContentSerializer vaultSerializer = new FileVaultContentSerializer(
                 "importPackageWithLargeHeader",
                 new PackagingImpl(),
-                ImportMode.UPDATE,
-                AccessControlHandling.IGNORE,
-                AccessControlHandling.IGNORE,
                 new String[0],
                 new String[0],
                 new String[0],
                 false,
-                -1,
                 null,
-                false
+                importSettings
         );
 
         DistributionPackageBuilder builder =
diff --git a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java
index f74b0121..8149c884 100644
--- a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java
+++ b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java
@@ -27,6 +27,7 @@ import java.io.FileInputStream;
 import java.io.OutputStream;
 import java.util.HashMap;
 
+import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
 import org.apache.jackrabbit.vault.fs.api.ImportMode;
 import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
 import org.apache.jackrabbit.vault.packaging.ExportOptions;
@@ -73,17 +74,16 @@ public class FileVaultContentSerializerTest {
     @Test
     public void testExportToStream() throws Exception {
         Packaging packaging = mock(Packaging.class);
-
-        ImportMode importMode = ImportMode.REPLACE;
-        AccessControlHandling aclHandling = AccessControlHandling.IGNORE;
+        ImportSettings importSettings = new ImportSettings(ImportMode.REPLACE, AccessControlHandling.IGNORE,
+                AccessControlHandling.IGNORE, 1024, false, false, IdConflictPolicy.LEGACY);
 
         String[] packageRoots = new String[]{"/etc/packages"};
         String[] nodeFilters = new String[0];
         String[] propertyFilters = new String[0];
         boolean useReferences = false;
         int threshold = 1024;
-        FileVaultContentSerializer fileVaultContentSerializer = new FileVaultContentSerializer("vlt", packaging, importMode,
-                aclHandling, aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, threshold, new HashMap<String, String>(), false);
+        FileVaultContentSerializer fileVaultContentSerializer = new FileVaultContentSerializer("vlt", packaging, packageRoots, nodeFilters,
+                propertyFilters, useReferences, new HashMap<String, String>(), importSettings);
 
         ResourceResolver sessionResolver = mock(ResourceResolver.class);
         Session session = mock(Session.class);
@@ -116,16 +116,15 @@ public class FileVaultContentSerializerTest {
     @Test
     public void testImportFromStream() throws Exception {
         Packaging packaging = mock(Packaging.class);
-        ImportMode importMode = ImportMode.REPLACE;
-        AccessControlHandling aclHandling = AccessControlHandling.IGNORE;
+        ImportSettings importSettings = new ImportSettings(ImportMode.REPLACE, AccessControlHandling.IGNORE,
+                AccessControlHandling.IGNORE, 1024, true, true, IdConflictPolicy.LEGACY);
 
         String[] packageRoots = new String[]{"/"};
         String[] nodeFilters = new String[0];
         String[] propertyFilters = new String[0];
         boolean useReferences = false;
-        int thershold = 1024;
-        FileVaultContentSerializer fileVaultContentSerializer = new FileVaultContentSerializer("vlt", packaging, importMode,
-                aclHandling, aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, thershold, new HashMap<String, String>(), true);
+        FileVaultContentSerializer fileVaultContentSerializer = new FileVaultContentSerializer("vlt", packaging, packageRoots, nodeFilters,
+                propertyFilters, useReferences, new HashMap<String, String>(), importSettings);
 
         File file = new File(getClass().getResource("/vlt/dp.vlt").getFile());
 
diff --git a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtilsTest.java b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtilsTest.java
index 348db108..55184b51 100644
--- a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtilsTest.java
+++ b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtilsTest.java
@@ -119,7 +119,7 @@ public class VltUtilsTest {
     }
     
     @Test
-    public void testCreateFilterWithParenthesis() {
+    public void testCreateFilterWithParenthesis() throws Exception {
         DistributionRequest request = new SimpleDistributionRequest(ADD, false, "/nodewith(shouldwork");
         NavigableMap<String, List<String>> nodeFilters = new TreeMap<String, List<String>>();
         NavigableMap<String, List<String>> propFilters = new TreeMap<String, List<String>>();