You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2021/07/07 07:06:47 UTC

[jackrabbit-filevault] 01/01: JCRVLT-546 remove private references from public API

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

kwin pushed a commit to branch feature/JCRVLT-546-remove-private-references
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git

commit 0a67908bb0c383ca84a0c2ad5c150750c1a9d3b4
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Tue Jul 6 12:26:52 2021 +0200

    JCRVLT-546 remove private references from public API
    
    deprecate Packaging.getJcrPackageRegistry which returns private
    JcrPackageRegistry
    Move artifact implementations to non-exported package (potentially
    backwards incompatible)
    import and export o.a.j.spi2dav.ConnectionOptions due to usage in API
---
 parent/pom.xml                                                |  4 ++++
 vault-core/bnd.bnd                                            | 11 ++++++++---
 .../org/apache/jackrabbit/vault/fs/impl/AbstractArtifact.java |  4 +++-
 .../org/apache/jackrabbit/vault/fs/impl/ArtifactSetImpl.java  |  2 --
 .../jackrabbit/vault/fs/{ => impl}/DirectoryArtifact.java     |  5 +++--
 .../apache/jackrabbit/vault/fs/{ => impl}/HintArtifact.java   |  5 +++--
 .../jackrabbit/vault/fs/{ => impl}/PropertyValueArtifact.java |  5 +++--
 .../jackrabbit/vault/fs/{ => impl}/SerializerArtifact.java    |  5 +++--
 .../org/apache/jackrabbit/vault/fs/impl/TransactionImpl.java  |  1 -
 .../jackrabbit/vault/fs/impl/aggregator/FileAggregator.java   |  2 +-
 .../vault/fs/impl/aggregator/GenericAggregator.java           |  2 +-
 .../jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java       |  2 +-
 .../main/java/org/apache/jackrabbit/vault/fs/io/Importer.java |  4 ++--
 .../java/org/apache/jackrabbit/vault/fs/package-info.java     |  2 +-
 .../java/org/apache/jackrabbit/vault/packaging/Packaging.java |  9 +++++++++
 .../apache/jackrabbit/vault/packaging/impl/PackagingImpl.java |  6 ++++++
 vault-rcp/bnd.bnd                                             |  9 ++++++++-
 17 files changed, 56 insertions(+), 22 deletions(-)

diff --git a/parent/pom.xml b/parent/pom.xml
index 922baae..b47f14d 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -147,6 +147,10 @@ Bundle-Category: jackrabbit
 -exportcontents: ${removeall;${packages;VERSIONED};${packages;CONDITIONAL}}
 # support only DS 1.4 (https://github.com/bndtools/bnd/pull/3121/files)
 -dsannotations-options: version;maximum=1.4.0
+# generate error (instead of warning) when exported package uses private (non-exported) reference
+-fixupmessages:"Export *,  has \\d+,  private references"; \
+    restrict:=warning; \
+    is:=error
                                 ]]></bnd>
                             </configuration>
                         </execution>
diff --git a/vault-core/bnd.bnd b/vault-core/bnd.bnd
index 342c6eb..5c5a0d4 100644
--- a/vault-core/bnd.bnd
+++ b/vault-core/bnd.bnd
@@ -13,12 +13,17 @@
 #  See the License for the specific language governing permissions and
 #  limitations under the License.
 
-Import-Package: org.apache.jackrabbit.*;version=!,\
+# JR2 packages not semantically versioned
+Import-Package: org.apache.jackrabbit.spi2dav;resolution:=optional,\
                             org.apache.sling.jcr.api;resolution:=optional,\
+                            org.apache.jackrabbit.*;version=!,\
                             *
 DynamicImport-Package: *
 -includeresource: @txw2-[0-9.]*.jar!/com/sun/xml/txw2/output/(IndentingXMLStreamWriter|DelegatingXMLStreamWriter).*,\
                   @woodstox-core-[0-9.]*.jar!/!module-info.class,\
                   @stax2-api-[0-9.]*.jar!/!module-info.class,\
-                  @jackrabbit-spi2dav-*.jar!/org/apache/jackrabbit/spi2dav/ConnectionOptions*.class,\
-                  @maven-artifact-*.jar!/org/apache/maven/artifact/versioning/ComparableVersion*.class
\ No newline at end of file
+                  @maven-artifact-*.jar!/org/apache/maven/artifact/versioning/ComparableVersion*.class
+# whitelist the private reference usage in Packaging.getJcrPackageRegistry(Session)
+-fixupmessages:"Export org.apache.jackrabbit.vault.packaging,  has 1,  private references [org.apache.jackrabbit.vault.packaging.registry.impl]"; \
+    restrict:=warning; \
+    is:=warn
\ No newline at end of file
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/AbstractArtifact.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/AbstractArtifact.java
index 4a46699..619c2a6 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/AbstractArtifact.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/AbstractArtifact.java
@@ -28,11 +28,13 @@ import org.apache.jackrabbit.vault.fs.api.ArtifactType;
 import org.apache.jackrabbit.vault.fs.api.DumpContext;
 import org.apache.jackrabbit.vault.util.PathUtil;
 import org.apache.jackrabbit.vault.util.PlatformNameFormat;
+import org.osgi.annotation.versioning.ProviderType;
 
 /**
  * Implements a generic abstract artifact
  *
  */
+@ProviderType
 public abstract class AbstractArtifact implements Artifact {
 
     /**
@@ -170,7 +172,7 @@ public abstract class AbstractArtifact implements Artifact {
      * Sets the content type
      * @param contentType the content type
      */
-    protected void setContentType(String contentType) {
+    public void setContentType(String contentType) {
         this.contentType = contentType;
     }
 
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/ArtifactSetImpl.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/ArtifactSetImpl.java
index 8309dbc..4a1fc3f 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/ArtifactSetImpl.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/ArtifactSetImpl.java
@@ -30,8 +30,6 @@ import java.util.Set;
 import javax.jcr.Property;
 import javax.jcr.RepositoryException;
 
-import org.apache.jackrabbit.vault.fs.PropertyValueArtifact;
-import org.apache.jackrabbit.vault.fs.SerializerArtifact;
 import org.apache.jackrabbit.vault.fs.api.Artifact;
 import org.apache.jackrabbit.vault.fs.api.ArtifactIterator;
 import org.apache.jackrabbit.vault.fs.api.ArtifactSet;
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/DirectoryArtifact.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/DirectoryArtifact.java
similarity index 96%
rename from vault-core/src/main/java/org/apache/jackrabbit/vault/fs/DirectoryArtifact.java
rename to vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/DirectoryArtifact.java
index feb9c82..3f137a2 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/DirectoryArtifact.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/DirectoryArtifact.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.jackrabbit.vault.fs;
+package org.apache.jackrabbit.vault.fs.impl;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -29,12 +29,13 @@ import org.apache.jackrabbit.vault.fs.api.ExportArtifact;
 import org.apache.jackrabbit.vault.fs.api.ImportArtifact;
 import org.apache.jackrabbit.vault.fs.api.SerializationType;
 import org.apache.jackrabbit.vault.fs.api.VaultInputSource;
-import org.apache.jackrabbit.vault.fs.impl.AbstractArtifact;
+import org.osgi.annotation.versioning.ProviderType;
 
 /**
  * Implements a generic directory artifact.
  *
  */
+@ProviderType
 public class DirectoryArtifact extends AbstractArtifact
         implements ExportArtifact, ImportArtifact {
 
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/HintArtifact.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/HintArtifact.java
similarity index 96%
rename from vault-core/src/main/java/org/apache/jackrabbit/vault/fs/HintArtifact.java
rename to vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/HintArtifact.java
index 1a5aabd..a29096e 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/HintArtifact.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/HintArtifact.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.jackrabbit.vault.fs;
+package org.apache.jackrabbit.vault.fs.impl;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -29,11 +29,12 @@ import org.apache.jackrabbit.vault.fs.api.ExportArtifact;
 import org.apache.jackrabbit.vault.fs.api.ImportArtifact;
 import org.apache.jackrabbit.vault.fs.api.SerializationType;
 import org.apache.jackrabbit.vault.fs.api.VaultInputSource;
-import org.apache.jackrabbit.vault.fs.impl.AbstractArtifact;
+import org.osgi.annotation.versioning.ProviderType;
 
 /**
  * Implements a generic hint artifact.
  */
+@ProviderType
 public class HintArtifact extends AbstractArtifact
         implements ExportArtifact, ImportArtifact {
 
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/PropertyValueArtifact.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/PropertyValueArtifact.java
similarity index 99%
rename from vault-core/src/main/java/org/apache/jackrabbit/vault/fs/PropertyValueArtifact.java
rename to vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/PropertyValueArtifact.java
index 5120a88..8a54673 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/PropertyValueArtifact.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/PropertyValueArtifact.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.jackrabbit.vault.fs;
+package org.apache.jackrabbit.vault.fs.impl;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -37,13 +37,14 @@ import org.apache.jackrabbit.vault.fs.api.ArtifactType;
 import org.apache.jackrabbit.vault.fs.api.ExportArtifact;
 import org.apache.jackrabbit.vault.fs.api.SerializationType;
 import org.apache.jackrabbit.vault.fs.api.VaultInputSource;
-import org.apache.jackrabbit.vault.fs.impl.AbstractArtifact;
 import org.apache.jackrabbit.vault.util.JcrConstants;
+import org.osgi.annotation.versioning.ProviderType;
 
 /**
  * Implements a artifact that is based on a property value.
  *
  */
+@ProviderType
 public class PropertyValueArtifact extends AbstractArtifact implements ExportArtifact {
     /**
      * The property of this artifact
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/SerializerArtifact.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/SerializerArtifact.java
similarity index 98%
rename from vault-core/src/main/java/org/apache/jackrabbit/vault/fs/SerializerArtifact.java
rename to vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/SerializerArtifact.java
index e780bc2..b7f240a 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/SerializerArtifact.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/SerializerArtifact.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.jackrabbit.vault.fs;
+package org.apache.jackrabbit.vault.fs.impl;
 
 import java.io.ByteArrayInputStream;
 import java.io.FileNotFoundException;
@@ -32,15 +32,16 @@ import org.apache.jackrabbit.vault.fs.api.ArtifactType;
 import org.apache.jackrabbit.vault.fs.api.ExportArtifact;
 import org.apache.jackrabbit.vault.fs.api.SerializationType;
 import org.apache.jackrabbit.vault.fs.api.VaultInputSource;
-import org.apache.jackrabbit.vault.fs.impl.AbstractArtifact;
 import org.apache.jackrabbit.vault.fs.io.Serializer;
 import org.apache.jackrabbit.vault.util.TempFileInputStream;
+import org.osgi.annotation.versioning.ProviderType;
 
 /**
  * Implements an output artifact that is based on a serializer, i.e. the
  * preferred access method is {@link AccessType#SPOOL}
  *
  */
+@ProviderType
 public class SerializerArtifact extends AbstractArtifact implements ExportArtifact {
 
     /** the serializer that is able to spool the content */
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/TransactionImpl.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/TransactionImpl.java
index 3befca2..e9ff127 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/TransactionImpl.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/TransactionImpl.java
@@ -28,7 +28,6 @@ import java.util.TreeMap;
 
 import javax.jcr.RepositoryException;
 
-import org.apache.jackrabbit.vault.fs.DirectoryArtifact;
 import org.apache.jackrabbit.vault.fs.api.Aggregate;
 import org.apache.jackrabbit.vault.fs.api.Artifact;
 import org.apache.jackrabbit.vault.fs.api.ArtifactType;
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/aggregator/FileAggregator.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/aggregator/FileAggregator.java
index 3a7f6c0..f405ac1 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/aggregator/FileAggregator.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/aggregator/FileAggregator.java
@@ -23,7 +23,6 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.Value;
 
-import org.apache.jackrabbit.vault.fs.DirectoryArtifact;
 import org.apache.jackrabbit.vault.fs.api.Aggregate;
 import org.apache.jackrabbit.vault.fs.api.Aggregator;
 import org.apache.jackrabbit.vault.fs.api.Artifact;
@@ -34,6 +33,7 @@ import org.apache.jackrabbit.vault.fs.api.Dumpable;
 import org.apache.jackrabbit.vault.fs.api.ImportInfo;
 import org.apache.jackrabbit.vault.fs.api.ItemFilterSet;
 import org.apache.jackrabbit.vault.fs.impl.ArtifactSetImpl;
+import org.apache.jackrabbit.vault.fs.impl.DirectoryArtifact;
 import org.apache.jackrabbit.vault.fs.impl.io.DocViewSerializer;
 import org.apache.jackrabbit.vault.fs.impl.io.ImportInfoImpl;
 import org.apache.jackrabbit.vault.fs.io.Serializer;
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/aggregator/GenericAggregator.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/aggregator/GenericAggregator.java
index 43b4ed3..d769cca 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/aggregator/GenericAggregator.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/aggregator/GenericAggregator.java
@@ -23,7 +23,6 @@ import javax.jcr.Node;
 import javax.jcr.Property;
 import javax.jcr.RepositoryException;
 
-import org.apache.jackrabbit.vault.fs.DirectoryArtifact;
 import org.apache.jackrabbit.vault.fs.api.Aggregate;
 import org.apache.jackrabbit.vault.fs.api.Aggregator;
 import org.apache.jackrabbit.vault.fs.api.Artifact;
@@ -34,6 +33,7 @@ import org.apache.jackrabbit.vault.fs.api.Dumpable;
 import org.apache.jackrabbit.vault.fs.api.ImportInfo;
 import org.apache.jackrabbit.vault.fs.api.ItemFilterSet;
 import org.apache.jackrabbit.vault.fs.impl.ArtifactSetImpl;
+import org.apache.jackrabbit.vault.fs.impl.DirectoryArtifact;
 import org.apache.jackrabbit.vault.fs.impl.io.DocViewSerializer;
 import org.apache.jackrabbit.vault.fs.impl.io.ImportInfoImpl;
 import org.apache.jackrabbit.vault.fs.io.Serializer;
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java
index 8e128cc..e2aa8a2 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java
@@ -54,7 +54,6 @@ import org.apache.jackrabbit.spi.commons.conversion.DefaultNamePathResolver;
 import org.apache.jackrabbit.spi.commons.name.NameConstants;
 import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver;
 import org.apache.jackrabbit.util.ISO9075;
-import org.apache.jackrabbit.vault.fs.PropertyValueArtifact;
 import org.apache.jackrabbit.vault.fs.api.Artifact;
 import org.apache.jackrabbit.vault.fs.api.ArtifactType;
 import org.apache.jackrabbit.vault.fs.api.ImportMode;
@@ -63,6 +62,7 @@ import org.apache.jackrabbit.vault.fs.api.NodeNameList;
 import org.apache.jackrabbit.vault.fs.api.SerializationType;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.impl.ArtifactSetImpl;
+import org.apache.jackrabbit.vault.fs.impl.PropertyValueArtifact;
 import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
 import org.apache.jackrabbit.vault.fs.spi.ACLManagement;
 import org.apache.jackrabbit.vault.fs.spi.ServiceProviderFactory;
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java
index 372ba8d..e94d8b1 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java
@@ -45,8 +45,6 @@ import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.spi.commons.namespace.NamespaceMapping;
 import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver;
 import org.apache.jackrabbit.spi.commons.namespace.SessionNamespaceResolver;
-import org.apache.jackrabbit.vault.fs.DirectoryArtifact;
-import org.apache.jackrabbit.vault.fs.HintArtifact;
 import org.apache.jackrabbit.vault.fs.api.Artifact;
 import org.apache.jackrabbit.vault.fs.api.ArtifactType;
 import org.apache.jackrabbit.vault.fs.api.ImportInfo;
@@ -62,6 +60,8 @@ import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.config.MetaInf;
 import org.apache.jackrabbit.vault.fs.config.VaultSettings;
 import org.apache.jackrabbit.vault.fs.impl.ArtifactSetImpl;
+import org.apache.jackrabbit.vault.fs.impl.DirectoryArtifact;
+import org.apache.jackrabbit.vault.fs.impl.HintArtifact;
 import org.apache.jackrabbit.vault.fs.impl.io.FileArtifactHandler;
 import org.apache.jackrabbit.vault.fs.impl.io.FolderArtifactHandler;
 import org.apache.jackrabbit.vault.fs.impl.io.GenericArtifactHandler;
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/package-info.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/package-info.java
index 5fa92b7..dc2c0d2 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/package-info.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/package-info.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-@Version("2.4.0")
+@Version("3.0.0")
 package org.apache.jackrabbit.vault.fs;
 
 import org.osgi.annotation.versioning.Version;
\ No newline at end of file
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/Packaging.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/Packaging.java
index de67cf2..a45cc97 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/Packaging.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/Packaging.java
@@ -92,6 +92,15 @@ public interface Packaging {
      * Returns a JCR-based package registry using the given session.
      * @param session the JCR session to use for reading/writing nodes in the repository
      * @return the JCR-based package registry
+     * @deprecated Rather use {@link #getJcrBasedPackageRegistry(Session)} which doesn't return a private class
      */
+    @Deprecated
     JcrPackageRegistry getJcrPackageRegistry(Session session);
+
+    /**
+     * Returns a JCR-based package registry using the given session.
+     * @param session the JCR session to use for reading/writing nodes in the repository
+     * @return the JCR-based package registry
+     */
+    PackageRegistry getJcrBasedPackageRegistry(Session session);
 }
\ No newline at end of file
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagingImpl.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagingImpl.java
index 45df491..6b1347b 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagingImpl.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagingImpl.java
@@ -170,6 +170,12 @@ public class PackagingImpl implements Packaging {
         return getJcrPackageRegistry(session, true);
     }
 
+    
+    @Override
+    public PackageRegistry getJcrBasedPackageRegistry(Session session) {
+        return getJcrPackageRegistry(session);
+    }
+
     private JcrPackageRegistry getJcrPackageRegistry(Session session, boolean useBaseRegistry) {
         JcrPackageRegistry registry = new JcrPackageRegistry(session, new AbstractPackageRegistry.SecurityConfig(config.authIdsForHookExecution(), config.authIdsForRootInstallation()), config.isStrict(), config.packageRoots());
         registry.setDispatcher(eventDispatcher);
diff --git a/vault-rcp/bnd.bnd b/vault-rcp/bnd.bnd
index 3dd73ce..0fd45fe 100644
--- a/vault-rcp/bnd.bnd
+++ b/vault-rcp/bnd.bnd
@@ -21,4 +21,11 @@
                   @jackrabbit-jcr2spi-[0-9.]*(-SNAPSHOT)?.jar
 -conditionalpackage: org.apache.jackrabbit.util,org.apache.jackrabbit.api.security
 # make sure to only export the relevant packages (https://github.com/bndtools/bnd/issues/4219)
--exportcontents: org.apache.jackrabbit.vault.rcp
\ No newline at end of file
+-exportcontents: org.apache.jackrabbit.vault.rcp
+# due to Jackrabbit2 JARs poorly designed for OSGi, only export the class used in the API from package "org.apache.jackrabbit.spi2dav", as the other classes in that package have lots of private references
+# http://docs.osgi.org/specification/osgi.core/7.0.0/framework.module.html#i3106983
+Export-Package: org.apache.jackrabbit.spi2dav;include:=ConnectionOptions;-split-package:=merge-first
+# prevent false positive due to https://github.com/bndtools/bnd/issues/1943
+-fixupmessages:"Export org.apache.jackrabbit.spi2dav,  has 8,  private references [org.apache.jackrabbit.spi, org.apache.jackrabbit.spi.commons, org.apache.jackrabbit.spi.commons.conversion, org.apache.jackrabbit.webdav, org.apache.jackrabbit.webdav.lock, org.apache.jackrabbit.webdav.observation, org.apache.jackrabbit.webdav.property, org.apache.jackrabbit.webdav.xml]";\
+    restrict:=warning; \
+    is:=ignore
\ No newline at end of file