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 2021/08/12 23:01:56 UTC

[sling-org-apache-sling-distribution-core] branch SLING-10097 created (now 25ca03b)

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

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


      at 25ca03b  SLING-10097 - Surface latest importer error as an exception

This branch includes the following new commits:

     new 25ca03b  SLING-10097 - Surface latest importer error as an exception

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[sling-org-apache-sling-distribution-core] 01/01: SLING-10097 - Surface latest importer error as an exception

Posted by tm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 25ca03bf4d0a8dd0be2418b25f55d9725dcb1e92
Author: tmaret <tm...@adobe.com>
AuthorDate: Fri Aug 13 01:01:29 2021 +0200

    SLING-10097 - Surface latest importer error as an exception
---
 .../serialization/impl/vlt/ErrorListener.java      | 49 ++++++++++++++++++
 .../impl/vlt/FileVaultContentSerializer.java       |  5 +-
 .../serialization/impl/vlt/ErrorListenerTest.java  | 60 ++++++++++++++++++++++
 3 files changed, 112 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/ErrorListener.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/ErrorListener.java
new file mode 100644
index 0000000..99de55f
--- /dev/null
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/ErrorListener.java
@@ -0,0 +1,49 @@
+/*
+ * 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.ProgressTrackerListener;
+import org.apache.jackrabbit.vault.packaging.PackageException;
+
+import static java.lang.String.format;
+
+/**
+ * Keeps track of the latest error
+ */
+public class ErrorListener implements ProgressTrackerListener {
+
+    private Exception last = new PackageException("Failed to import");
+
+    public Exception getLastError() {
+        return last;
+    }
+
+    @Override
+    public void onMessage(Mode mode, String action, String path) {
+    }
+
+    @Override
+    public void onError(Mode mode, String path, Exception e) {
+        last = exception(mode, path, e);
+    }
+
+    private Exception exception(Mode mode, String path, Exception e) {
+        return new PackageException(format("Failed to import %s (%s)", path, e.toString()), e);
+    }
+}
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 2b7e1cb..71bded7 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
@@ -40,7 +40,6 @@ import org.apache.jackrabbit.vault.fs.io.ImportOptions;
 import org.apache.jackrabbit.vault.fs.io.Importer;
 import org.apache.jackrabbit.vault.fs.io.ZipStreamArchive;
 import org.apache.jackrabbit.vault.packaging.ExportOptions;
-import org.apache.jackrabbit.vault.packaging.PackageException;
 import org.apache.jackrabbit.vault.packaging.Packaging;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
@@ -133,6 +132,8 @@ public class FileVaultContentSerializer implements DistributionContentSerializer
         try {
             session = getSession(resourceResolver);
             ImportOptions importOptions = VltUtils.getImportOptions(aclHandling, cugHandling, importMode, autosaveThreshold, strict);
+            ErrorListener errorListener = new ErrorListener();
+            importOptions.setListener(errorListener);
             Importer importer = new Importer(importOptions);
             archive = new ZipStreamArchive(inputStream);
             archive.open(false);
@@ -161,7 +162,7 @@ public class FileVaultContentSerializer implements DistributionContentSerializer
             // now import the content
             importer.run(archive, session, "/");
             if (importer.hasErrors() && importOptions.isStrict()) {
-                throw new PackageException("Errors during import.");
+                throw errorListener.getLastError();
             }
             if (session.hasPendingChanges()) {
                 session.save();
diff --git a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/ErrorListenerTest.java b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/ErrorListenerTest.java
new file mode 100644
index 0000000..e085bd2
--- /dev/null
+++ b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/ErrorListenerTest.java
@@ -0,0 +1,60 @@
+/*
+ * 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.junit.Before;
+import org.junit.Test;
+
+import static org.apache.jackrabbit.vault.fs.api.ProgressTrackerListener.Mode.PATHS;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+public class ErrorListenerTest {
+
+    private ErrorListener errorListener;
+
+    private static final String path = "/some/path";
+
+    private static final Exception exception = new Exception();
+
+    @Before
+    public void before() {
+        errorListener = new ErrorListener();
+    }
+
+    @Test
+    public void testDefaultErrorNotNull() {
+        assertNotNull(errorListener.getLastError());
+    }
+
+    @Test
+    public void testError() {
+        errorListener.onError(PATHS, path, exception);
+        assertEquals(exception, errorListener.getLastError().getCause());
+        assertTrue(errorListener.getLastError().getMessage().contains(path));
+    }
+
+    @Test
+    public void testLastError() {
+        errorListener.onError(PATHS, path, new Exception());
+        errorListener.onError(PATHS, path, exception);
+        assertEquals(exception, errorListener.getLastError().getCause());
+    }
+}
\ No newline at end of file