Fix several issues when having more than one RSA
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java b/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
index 3316a93..b20e53b 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
@@ -116,7 +116,9 @@
         try {
             ExportRegistration exportReg = exportService(interfaceNames, serviceReference, serviceProperties);
             exportRegs = new ArrayList<>();
-            exportRegs.add(exportReg);
+            if (exportReg != null) {
+                exportRegs.add(exportReg);
+            }
             store(key, exportRegs);
             return exportRegs;
         } finally {
@@ -204,6 +206,9 @@
             // TODO unget service when export is destroyed
             Object serviceO = serviceContext.getService(serviceReference);
             Endpoint endpoint = provider.exportService(serviceO, serviceContext, eprops, interfaces);
+            if (endpoint == null) {
+                return null;
+            }
             return new ExportRegistrationImpl(serviceReference, endpoint, this);
         } catch (Exception e) {
             return new ExportRegistrationImpl(this, e);
@@ -291,11 +296,14 @@
         for (ExportRegistration exportRegistration : regs) {
             if (exportRegistration instanceof ExportRegistrationImpl) {
                 ExportRegistrationImpl exportRegistrationImpl = (ExportRegistrationImpl) exportRegistration;
-                EndpointDescription epd = exportRegistration.getExportReference().getExportedEndpoint();
-                // create one copy for each distinct endpoint description
-                if (!copiedEndpoints.contains(epd)) {
-                    copiedEndpoints.add(epd);
-                    copy.add(new ExportRegistrationImpl(exportRegistrationImpl));
+                if (exportRegistration.getException() == null) {
+                    // Can only retrieve reference if we have no exception
+                    EndpointDescription epd = exportRegistration.getExportReference().getExportedEndpoint();
+                    // create one copy for each distinct endpoint description
+                    if (!copiedEndpoints.contains(epd)) {
+                        copiedEndpoints.add(epd);
+                        copy.add(new ExportRegistrationImpl(exportRegistrationImpl));
+                    }
                 }
             }
         }
diff --git a/spi/src/main/java/org/apache/aries/rsa/spi/DistributionProvider.java b/spi/src/main/java/org/apache/aries/rsa/spi/DistributionProvider.java
index 31d61bd..ed779d1 100644
--- a/spi/src/main/java/org/apache/aries/rsa/spi/DistributionProvider.java
+++ b/spi/src/main/java/org/apache/aries/rsa/spi/DistributionProvider.java
@@ -29,6 +29,11 @@
     String[] getSupportedTypes();
 
     /**
+     * Called by RemoteServiceAdmin to export a service.
+     * 
+     * The Distribution provider will be called if no config type was set or
+     * if it supports the config type.
+     * 
      * @param serviceO service instance to be exported
      * @param serviceContext bundle context of the bundle exporting the sevice
      * @param effectiveProperties combined properties of the service and additional properties from rsa
diff --git a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/TopologyManagerExport.java b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/TopologyManagerExport.java
index e19f7a0..6200a29 100644
--- a/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/TopologyManagerExport.java
+++ b/topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/TopologyManagerExport.java
@@ -115,7 +115,8 @@
             return;
         }
 
-        for (RemoteServiceAdmin remoteServiceAdmin : rsaSet) {
+        HashSet<RemoteServiceAdmin> rsaSetCopy = new HashSet<>(rsaSet);
+        for (RemoteServiceAdmin remoteServiceAdmin : rsaSetCopy) {
             LOG.debug("TopologyManager: handling remoteServiceAdmin " + remoteServiceAdmin);
             if (endpointRepo.isAlreadyExportedForRsa(sref, remoteServiceAdmin)) {
                 // already handled by this remoteServiceAdmin
@@ -157,7 +158,7 @@
         for (ExportRegistration reg : exportRegs) {
             if (reg.getException() == null) {
                 EndpointDescription endpoint = getExportedEndpoint(reg);
-                LOG.debug("TopologyManager: export succeeded for {}, endpoint {}", sref, endpoint);
+                LOG.debug("TopologyManager: export succeeded for {}, endpoint {}, rsa {}", sref, endpoint, remoteServiceAdmin.getClass());
                 endpoints.add(endpoint);
             } else {
                 LOG.error("TopologyManager: export failed for {}", sref, reg.getException());