SLING-11355: sling discovery bundles: update to sling parent 48 (#7)

* SLING-11355: upgrade to 48

* SLING-11355: fixing pr comments

* SLING-11355: exclude impl packages from baseline

* SLING-11355: stop exporting private packages

* SLING-11355: fixing PR comments and sonar issues

* Revert "SLING-11355: fixing PR comments and sonar issues"
diff --git a/bnd.bnd b/bnd.bnd
new file mode 100644
index 0000000..db30b0c
--- /dev/null
+++ b/bnd.bnd
@@ -0,0 +1,7 @@
+-includeresource:\
+    @commons-net-*.jar!/org/apache/commons/net/util/SubnetUtils*
+
+# whitelist the private reference usage
+-fixupmessages:"Export org.apache.sling.discovery.base.connectors.announcement,  has 1,  private references [org.apache.sling.discovery.base.connectors.announcement.impl]"; \
+    restrict:=warning; \
+    is:=warn
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 023b01a..93d7bbb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,13 +22,12 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.sling</groupId>
-        <artifactId>sling</artifactId>
-        <version>26</version>
+        <artifactId>sling-bundle-parent</artifactId>
+        <version>48</version>
         <relativePath />
     </parent>
 
     <artifactId>org.apache.sling.discovery.base</artifactId>
-    <packaging>bundle</packaging>
     <version>2.0.13-SNAPSHOT</version>
 
     <name>Apache Sling Discovery Base</name>
@@ -38,11 +37,13 @@
         <connection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-discovery-base.git</connection>
         <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-discovery-base.git</developerConnection>
         <url>https://gitbox.apache.org/repos/asf?p=sling-org-apache-sling-discovery-base.git</url>
-      <tag>HEAD</tag>
-  </scm>
+        <tag>HEAD</tag>
+    </scm>
 
     <properties>
-      <jackrabbit.version>2.12.2</jackrabbit.version>
+        <!-- SLING-11355: delete after release has been created -->
+        <bnd.baseline.diffpackages>!*.announcement.*, !*.ping.*, *</bnd.baseline.diffpackages>
+        <jackrabbit.version>2.14.3</jackrabbit.version>
         <!-- by default Slow tests are excluded - use -PincludeSlowTests to include them -->
         <sling.excluded.surefire.groups>org.apache.sling.commons.testing.junit.categories.Slow</sling.excluded.surefire.groups>
     </properties>
@@ -58,29 +59,6 @@
                     <excludedGroups>${sling.excluded.surefire.groups}</excludedGroups>
                 </configuration>
             </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-scr-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <!--  with 3.0.0 the following bundle dependency is failing
-                      on AEM 5.6.1 - thus switching back to 2.5.3 here:
-					javax.servlet,version=[2.6,3) - - Cannot be resolved
-					javax.servlet.http,version=[2.6,3) - - Cannot be resolved
-					org.apache.commons.codec.binary,version=[1.6,2) - - Cannot be resolved
-                       -->
-                <version>2.5.3</version>
-                <extensions>true</extensions>
-                <configuration>
-                  <instructions>
-		            <Embed-Dependency>
-		              commons-net;inline=org/apache/commons/net/util/SubnetUtils*
-		            </Embed-Dependency>
-		          </instructions>
-		        </configuration>
-            </plugin>
 			<!-- discovery.base exports a few test classes for reuse.
                  In order for others to use these, the test-jar must be built/installed too.
                  Note that 'mvn -Dmaven.test.skip=true' does NOT build the test-jar,
@@ -98,38 +76,30 @@
             </plugin>
         </plugins>
     </build>
-    <profiles>
-        <profile>
-            <!-- when -PincludeSlowTests is set, the Slow tests should also be executed, 
-                hence unsetting the category excludes 'sling.excluded.surefire.groups' to 
-                achieve that. -->
-            <id>includeSlowTests</id>
-            <properties>
-                <sling.excluded.surefire.groups />
-            </properties>
-        </profile>
-    </profiles>
+
     <dependencies>
         <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.scr.annotations</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>biz.aQute</groupId>
-            <artifactId>bndlib</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
-	        <version>1.6.1</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <!-- OSGi Dependencies -->
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.core</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
+            <artifactId>org.osgi.annotation.versioning</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
+            <artifactId>org.osgi.service.http</artifactId>
+            <version>1.2.2</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.geronimo.specs</groupId>
@@ -137,12 +107,6 @@
             <version>1.0-alpha-1</version>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.commons.johnzon</artifactId>
-            <version>1.0.0</version>
-            <scope>test</scope>
-        </dependency>
 		<dependency>
 			<groupId>org.apache.sling</groupId>
 			<artifactId>org.apache.sling.jcr.api</artifactId>
@@ -152,21 +116,25 @@
 		<dependency>
 			<groupId>javax.jcr</groupId>
 			<artifactId>jcr</artifactId>
-			<version>2.0</version>
-			<scope>provided</scope>
+            <scope>provided</scope>
 		</dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
 		<dependency>
 			<groupId>org.apache.jackrabbit</groupId>
 			<artifactId>jackrabbit-api</artifactId>
 			<version>${jackrabbit.version}</version>
 			<scope>provided</scope>
 		</dependency>
-		<dependency>
-			<groupId>org.apache.sling</groupId>
-			<artifactId>org.apache.sling.commons.osgi</artifactId>
-			<version>2.1.0</version>
-			<scope>provided</scope>
-		</dependency>
+        <dependency>
+            <groupId>org.apache.jackrabbit</groupId>
+            <artifactId>jackrabbit-spi-commons</artifactId>
+            <version>${jackrabbit.version}</version>
+            <scope>provided</scope>
+        </dependency>
 		<dependency>
 			<groupId>org.apache.sling</groupId>
 			<artifactId>org.apache.sling.settings</artifactId>
@@ -219,10 +187,6 @@
 	      <scope>test</scope>
 	    </dependency>
 		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>servlet-api</artifactId>
-		</dependency>
-		<dependency>
 			<groupId>org.apache.httpcomponents</groupId>
 			<artifactId>httpclient-osgi</artifactId>
 			<version>4.3.5</version>
@@ -240,10 +204,12 @@
             <version>3.3</version>
             <scope>provided</scope>
         </dependency>
+
       <!-- Testing -->
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>junit-addons</groupId>
@@ -252,17 +218,9 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.jmock</groupId>
-            <artifactId>jmock-junit4</artifactId>
-            <!-- with 2.5.1 jmock-junit4, which has a dependency on junit 4.4 
-                you get the following: NoSuchMethodError: org.junit.runner.Request.classes(Lorg/junit/runner/Computer;[Ljava/lang/Class;)Lorg/junit/runner/Request; 
-                hence this explicit newer dependency. -->
-            <!-- <version>2.8.2</version> -->
-        </dependency>
-        <dependency>
             <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <version>1.9.5</version>
+            <artifactId>mockito-core</artifactId>
+            <version>4.4.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -322,10 +280,22 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-          <groupId>org.apache.sling</groupId>
-          <artifactId>org.apache.sling.testing.sling-mock</artifactId>
-          <version>1.2.0</version>
-          <scope>test</scope>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.testing.sling-mock.junit4</artifactId>
+            <version>3.2.2</version>
+            <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <profiles>
+        <profile>
+            <!-- when -PincludeSlowTests is set, the Slow tests should also be executed,
+                hence unsetting the category excludes 'sling.excluded.surefire.groups' to
+                achieve that. -->
+            <id>includeSlowTests</id>
+            <properties>
+                <sling.excluded.surefire.groups />
+            </properties>
+        </profile>
+    </profiles>
 </project>
diff --git a/src/main/java/org/apache/sling/discovery/base/commons/BaseViewChecker.java b/src/main/java/org/apache/sling/discovery/base/commons/BaseViewChecker.java
index 9cacb79..e8bbf22 100644
--- a/src/main/java/org/apache/sling/discovery/base/commons/BaseViewChecker.java
+++ b/src/main/java/org/apache/sling/discovery/base/commons/BaseViewChecker.java
@@ -25,8 +25,6 @@
 import java.util.Map;
 import java.util.UUID;
 
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.commons.scheduler.Scheduler;
 import org.apache.sling.discovery.base.connectors.BaseConfig;
@@ -36,6 +34,12 @@
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
+import org.osgi.service.http.HttpService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -84,7 +88,7 @@
     private boolean forcePing;
 
     /** SLING-4765 : store endpoints to /clusterInstances for more verbose duplicate slingId/ghost detection **/
-    protected final Map<Long, String[]> endpoints = new HashMap<Long, String[]>();
+    protected final Map<Long, String[]> endpoints = new HashMap<>();
 
     protected PeriodicBackgroundJob periodicPingJob;
 
@@ -227,6 +231,10 @@
     /**
      * Bind a http service
      */
+    @Reference(service = HttpService.class,
+            cardinality = ReferenceCardinality.MULTIPLE,
+            policy = ReferencePolicy.DYNAMIC,
+            bind = "bindHttpService", unbind = "unbindHttpService")
     protected void bindHttpService(final ServiceReference reference) {
         String[] endpointUrls = toStringArray(reference.getProperty(REG_PROPERTY_ENDPOINTS));
         if ( endpointUrls == null ) {
@@ -245,6 +253,7 @@
     protected void unbindHttpService(final ServiceReference reference) {
         synchronized ( lock ) {
             if ( this.endpoints.remove(reference.getProperty(Constants.SERVICE_ID)) != null ) {
+                // do nothing
             }
         }
     }
@@ -265,7 +274,7 @@
         } else if (propValue.getClass().isArray()) {
             // other array
             Object[] valueArray = (Object[]) propValue;
-            List<String> values = new ArrayList<String>(valueArray.length);
+            List<String> values = new ArrayList<>(valueArray.length);
             for (Object value : valueArray) {
                 if (value != null) {
                     values.add(value.toString());
@@ -276,7 +285,7 @@
         } else if (propValue instanceof Collection<?>) {
             // collection
             Collection<?> valueCollection = (Collection<?>) propValue;
-            List<String> valueList = new ArrayList<String>(valueCollection.size());
+            List<String> valueList = new ArrayList<>(valueCollection.size());
             for (Object value : valueCollection) {
                 if (value != null) {
                     valueList.add(value.toString());
diff --git a/src/main/java/org/apache/sling/discovery/base/commons/package-info.java b/src/main/java/org/apache/sling/discovery/base/commons/package-info.java
index 91962da..0839ae5 100644
--- a/src/main/java/org/apache/sling/discovery/base/commons/package-info.java
+++ b/src/main/java/org/apache/sling/discovery/base/commons/package-info.java
@@ -23,8 +23,7 @@
  *
  * @version 1.1.0
  */
-@Version("2.0.0")
+@Version("2.0.1")
 package org.apache.sling.discovery.base.commons;
 
-import aQute.bnd.annotation.Version;
-
+import org.osgi.annotation.versioning.Version;
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistry.java b/src/main/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistry.java
index fb8b2c1..05c0610 100644
--- a/src/main/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistry.java
+++ b/src/main/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistry.java
@@ -22,6 +22,7 @@
 
 import org.apache.sling.discovery.ClusterView;
 import org.apache.sling.discovery.InstanceDescription;
+import org.apache.sling.discovery.base.connectors.announcement.impl.CachedAnnouncement;
 
 /**
  * The announcement registry keeps track of all the announcement that this
diff --git a/src/main/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistryImpl.java b/src/main/java/org/apache/sling/discovery/base/connectors/announcement/impl/AnnouncementRegistryImpl.java
similarity index 96%
rename from src/main/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistryImpl.java
rename to src/main/java/org/apache/sling/discovery/base/connectors/announcement/impl/AnnouncementRegistryImpl.java
index a4f3957..5b275eb 100644
--- a/src/main/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistryImpl.java
+++ b/src/main/java/org/apache/sling/discovery/base/connectors/announcement/impl/AnnouncementRegistryImpl.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.sling.discovery.base.connectors.announcement;
+package org.apache.sling.discovery.base.connectors.announcement.impl;
 
 import java.util.Collection;
 import java.util.HashMap;
@@ -27,10 +27,6 @@
 
 import javax.json.JsonException;
 
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.PersistenceException;
 import org.apache.sling.api.resource.Resource;
@@ -40,8 +36,14 @@
 import org.apache.sling.discovery.ClusterView;
 import org.apache.sling.discovery.InstanceDescription;
 import org.apache.sling.discovery.base.connectors.BaseConfig;
+import org.apache.sling.discovery.base.connectors.announcement.Announcement;
+import org.apache.sling.discovery.base.connectors.announcement.AnnouncementFilter;
+import org.apache.sling.discovery.base.connectors.announcement.AnnouncementRegistry;
 import org.apache.sling.discovery.commons.providers.util.ResourceHelper;
 import org.apache.sling.settings.SlingSettingsService;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,8 +52,7 @@
  * handles JSON-backed announcements and does so by storing
  * them in a local like /var/discovery/impl/clusterNodes/$slingId/announcement.
  */
-@Component
-@Service(value = AnnouncementRegistry.class)
+@Component(service = AnnouncementRegistry.class)
 public class AnnouncementRegistryImpl implements AnnouncementRegistry {
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -88,8 +89,7 @@
         slingId = settingsService.getSlingId();
     }
 
-    private final Map<String,CachedAnnouncement> ownAnnouncementsCache =
-            new HashMap<String,CachedAnnouncement>();
+    private final Map<String, CachedAnnouncement> ownAnnouncementsCache = new HashMap<>();
 
     @Override
     public synchronized void unregisterAnnouncement(final String ownerId) {
@@ -138,12 +138,12 @@
 
     @Override
     public synchronized Collection<Announcement> listLocalAnnouncements() {
-        return fillWithCachedAnnouncements(new LinkedList<Announcement>());
+        return fillWithCachedAnnouncements(new LinkedList<>());
     }
 
     @Override
     public synchronized Collection<CachedAnnouncement> listLocalIncomingAnnouncements() {
-        Collection<CachedAnnouncement> result = new LinkedList<CachedAnnouncement>(ownAnnouncementsCache.values());
+        Collection<CachedAnnouncement> result = new LinkedList<>(ownAnnouncementsCache.values());
         for (Iterator<CachedAnnouncement> it = result.iterator(); it.hasNext();) {
             CachedAnnouncement cachedAnnouncement = it.next();
             if (cachedAnnouncement.getAnnouncement().isInherited()) {
@@ -176,7 +176,7 @@
             throw new IllegalArgumentException("clusterView must not be null");
         }
         ResourceResolver resourceResolver = null;
-        final Collection<Announcement> incomingAnnouncements = new LinkedList<Announcement>();
+        final Collection<Announcement> incomingAnnouncements = new LinkedList<>();
         final InstanceDescription localInstance = getLocalInstanceDescription(localClusterView);
         try {
             resourceResolver = resourceResolverFactory
@@ -339,7 +339,7 @@
         }
 
         logger.debug("registerAnnouncement: getting the list of all local announcements");
-        final Collection<Announcement> announcements = new LinkedList<Announcement>();
+        final Collection<Announcement> announcements = new LinkedList<>();
         fillWithCachedAnnouncements(announcements);
         if (logger.isDebugEnabled()) {
             logger.debug("registerAnnouncement: list returned: "+(announcements==null ? "null" : announcements.size()));
@@ -587,7 +587,7 @@
     @Override
     public synchronized Collection<InstanceDescription> listInstances(final ClusterView localClusterView) {
         logger.debug("listInstances: start. localClusterView: {}", localClusterView);
-        final Collection<InstanceDescription> instances = new LinkedList<InstanceDescription>();
+        final Collection<InstanceDescription> instances = new LinkedList<>();
 
         final Collection<Announcement> announcements = listAnnouncementsInSameCluster(localClusterView);
         if (announcements == null) {
diff --git a/src/main/java/org/apache/sling/discovery/base/connectors/announcement/CachedAnnouncement.java b/src/main/java/org/apache/sling/discovery/base/connectors/announcement/impl/CachedAnnouncement.java
similarity index 96%
rename from src/main/java/org/apache/sling/discovery/base/connectors/announcement/CachedAnnouncement.java
rename to src/main/java/org/apache/sling/discovery/base/connectors/announcement/impl/CachedAnnouncement.java
index 426c63f..e1a7042 100644
--- a/src/main/java/org/apache/sling/discovery/base/connectors/announcement/CachedAnnouncement.java
+++ b/src/main/java/org/apache/sling/discovery/base/connectors/announcement/impl/CachedAnnouncement.java
@@ -16,9 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.sling.discovery.base.connectors.announcement;
+package org.apache.sling.discovery.base.connectors.announcement.impl;
 
 import org.apache.sling.discovery.base.connectors.BaseConfig;
+import org.apache.sling.discovery.base.connectors.announcement.Announcement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/src/main/java/org/apache/sling/discovery/base/connectors/announcement/package-info.java b/src/main/java/org/apache/sling/discovery/base/connectors/announcement/package-info.java
index b1e3218..2c89e07 100644
--- a/src/main/java/org/apache/sling/discovery/base/connectors/announcement/package-info.java
+++ b/src/main/java/org/apache/sling/discovery/base/connectors/announcement/package-info.java
@@ -23,8 +23,7 @@
  *
  * @version 1.1.2
  */
-@Version("2.0.0")
+@Version("2.0.1")
 package org.apache.sling.discovery.base.connectors.announcement;
 
-import aQute.bnd.annotation.Version;
-
+import org.osgi.annotation.versioning.Version;
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/discovery/base/connectors/package-info.java b/src/main/java/org/apache/sling/discovery/base/connectors/package-info.java
index 2fa7bf8..c1e6682 100644
--- a/src/main/java/org/apache/sling/discovery/base/connectors/package-info.java
+++ b/src/main/java/org/apache/sling/discovery/base/connectors/package-info.java
@@ -23,8 +23,7 @@
  *
  * @version 1.0.0
  */
-@Version("1.0.0")
+@Version("1.0.1")
 package org.apache.sling.discovery.base.connectors;
 
-import aQute.bnd.annotation.Version;
-
+import org.osgi.annotation.versioning.Version;
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/discovery/base/connectors/ping/TopologyConnectorServlet.java b/src/main/java/org/apache/sling/discovery/base/connectors/ping/TopologyConnectorServlet.java
index 037bc3f..748b868 100644
--- a/src/main/java/org/apache/sling/discovery/base/connectors/ping/TopologyConnectorServlet.java
+++ b/src/main/java/org/apache/sling/discovery/base/connectors/ping/TopologyConnectorServlet.java
@@ -34,23 +34,21 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.discovery.ClusterView;
 import org.apache.sling.discovery.base.commons.ClusterViewHelper;
 import org.apache.sling.discovery.base.commons.ClusterViewService;
 import org.apache.sling.discovery.base.commons.UndefinedClusterViewException;
 import org.apache.sling.discovery.base.connectors.BaseConfig;
 import org.apache.sling.discovery.base.connectors.announcement.Announcement;
-import org.apache.sling.discovery.base.connectors.announcement.AnnouncementFilter;
 import org.apache.sling.discovery.base.connectors.announcement.AnnouncementRegistry;
 import org.apache.sling.discovery.base.connectors.ping.wl.SubnetWhitelistEntry;
 import org.apache.sling.discovery.base.connectors.ping.wl.WhitelistEntry;
 import org.apache.sling.discovery.base.connectors.ping.wl.WildcardWhitelistEntry;
 import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.http.HttpService;
 import org.osgi.service.http.NamespaceException;
 import org.slf4j.Logger;
@@ -63,13 +61,12 @@
  * hmac-signature with a shared key or via a flexible whitelist)
  */
 @SuppressWarnings("serial")
-@Component(immediate = true)
-@Service(value=TopologyConnectorServlet.class)
+@Component(immediate = true, service = TopologyConnectorServlet.class)
 public class TopologyConnectorServlet extends HttpServlet {
 
-    /** 
+    /**
      * prefix under which the topology connector servlet is registered -
-     * the URL will consist of this prefix + "connector.slingId.json" 
+     * the URL will consist of this prefix + "connector.slingId.json"
      */
     private static final String TOPOLOGY_CONNECTOR_PREFIX = "/libs/sling/topology";
 
@@ -83,18 +80,20 @@
 
     @Reference
     private HttpService httpService;
-    
+
     @Reference
     private BaseConfig config;
 
-    /** 
+    /**
      * This list contains WhitelistEntry (ips/hostnames, cidr, wildcards),
      * each filtering some hostname/addresses that are allowed to connect to this servlet.
      **/
-    private final List<WhitelistEntry> whitelist = new ArrayList<WhitelistEntry>();
-    
-    /** Set of plaintext whitelist entries - for faster lookups **/
-    private final Set<String> plaintextWhitelist = new HashSet<String>();
+    private final List<WhitelistEntry> whitelist = new ArrayList<>();
+
+    /**
+     * Set of plaintext whitelist entries - for faster lookups
+     **/
+    private final Set<String> plaintextWhitelist = new HashSet<>();
 
     private TopologyRequestValidator requestValidator;
 
@@ -106,59 +105,57 @@
             initWhitelist(whitelistConfig);
         }
         requestValidator = new TopologyRequestValidator(config);
-        
+
         try {
-            httpService.registerServlet(TopologyConnectorServlet.TOPOLOGY_CONNECTOR_PREFIX, 
-                    this, null, null);
-            logger.info("activate: connector servlet registered at "+
-                    TopologyConnectorServlet.TOPOLOGY_CONNECTOR_PREFIX);
+            httpService.registerServlet(TopologyConnectorServlet.TOPOLOGY_CONNECTOR_PREFIX, this, null, null);
+            logger.info("activate: connector servlet registered at " + TopologyConnectorServlet.TOPOLOGY_CONNECTOR_PREFIX);
         } catch (ServletException e) {
-            logger.error("activate: ServletException while registering topology connector servlet: "+e, e);
+            logger.error("activate: ServletException while registering topology connector servlet: " + e, e);
         } catch (NamespaceException e) {
-            logger.error("activate: NamespaceException while registering topology connector servlet: "+e, e);
+            logger.error("activate: NamespaceException while registering topology connector servlet: " + e, e);
         }
     }
-    
+
     @Deactivate
     protected void deactivate() {
         httpService.unregister(TOPOLOGY_CONNECTOR_PREFIX);
     }
 
     void initWhitelist(String[] whitelistConfig) {
-        if (whitelistConfig==null) {
+        if (whitelistConfig == null) {
             return;
         }
         for (int i = 0; i < whitelistConfig.length; i++) {
             String aWhitelistEntry = whitelistConfig[i];
-            
+
             WhitelistEntry whitelistEntry = null;
             if (aWhitelistEntry.contains(".") && aWhitelistEntry.contains("/")) {
                 // then this is a CIDR notation
-                try{
+                try {
                     whitelistEntry = new SubnetWhitelistEntry(aWhitelistEntry);
-                } catch(Exception e) {
-                    logger.error("activate: wrongly formatted CIDR subnet definition. Expected eg '1.2.3.4/24'. ignoring: "+aWhitelistEntry);
+                } catch (Exception e) {
+                    logger.error("activate: wrongly formatted CIDR subnet definition. Expected eg '1.2.3.4/24'. ignoring: " + aWhitelistEntry);
                     continue;
                 }
             } else if (aWhitelistEntry.contains(".") && aWhitelistEntry.contains(" ")) {
                 // then this is a IP/subnet-mask notation
-                try{
+                try {
                     final StringTokenizer st = new StringTokenizer(aWhitelistEntry, " ");
                     final String ip = st.nextToken();
                     if (st.hasMoreTokens()) {
                         final String mask = st.nextToken();
                         if (st.hasMoreTokens()) {
-                            logger.error("activate: wrongly formatted ip subnet definition. Expected '10.1.2.3 255.0.0.0'. Ignoring: "+aWhitelistEntry);
+                            logger.error("activate: wrongly formatted ip subnet definition. Expected '10.1.2.3 255.0.0.0'. Ignoring: " + aWhitelistEntry);
                             continue;
                         }
                         whitelistEntry = new SubnetWhitelistEntry(ip, mask);
                     }
-                } catch(Exception e) {
-                    logger.error("activate: wrongly formatted ip subnet definition. Expected '10.1.2.3 255.0.0.0'. Ignoring: "+aWhitelistEntry);
+                } catch (Exception e) {
+                    logger.error("activate: wrongly formatted ip subnet definition. Expected '10.1.2.3 255.0.0.0'. Ignoring: " + aWhitelistEntry);
                     continue;
                 }
             }
-            if (whitelistEntry==null) {
+            if (whitelistEntry == null) {
                 if (aWhitelistEntry.contains("*") || aWhitelistEntry.contains("?")) {
                     whitelistEntry = new WildcardWhitelistEntry(aWhitelistEntry);
                 } else {
@@ -166,7 +163,7 @@
                 }
             }
             logger.info("activate: adding whitelist entry: " + aWhitelistEntry);
-            if (whitelistEntry!=null) {
+            if (whitelistEntry != null) {
                 whitelist.add(whitelistEntry);
             }
         }
@@ -184,16 +181,16 @@
         }
 
         final String[] pathInfo = request.getPathInfo().split("\\.");
-        final String extension = pathInfo.length==3 ? pathInfo[2] : "";
+        final String extension = pathInfo.length == 3 ? pathInfo[2] : "";
         if (!"json".equals(extension)) {
             response.sendError(HttpServletResponse.SC_NOT_FOUND);
             return;
         }
-        final String selector = pathInfo.length==3 ? pathInfo[1] : "";
+        final String selector = pathInfo.length == 3 ? pathInfo[1] : "";
 
         announcementRegistry.unregisterAnnouncement(selector);
     }
-    
+
     @Override
     protected void doPut(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
@@ -206,23 +203,23 @@
         }
 
         final String[] pathInfo = request.getPathInfo().split("\\.");
-        final String extension = pathInfo.length==3 ? pathInfo[2] : "";
+        final String extension = pathInfo.length == 3 ? pathInfo[2] : "";
         if (!"json".equals(extension)) {
             response.sendError(HttpServletResponse.SC_NOT_FOUND);
             return;
         }
-        
-        final String selector = pathInfo.length==3 ? pathInfo[1] : "";
+
+        final String selector = pathInfo.length == 3 ? pathInfo[1] : "";
 
         String topologyAnnouncementJSON = requestValidator.decodeMessage(request);
-    	if (logger.isDebugEnabled()) {
-	        logger.debug("doPost: incoming topology announcement is: "
-	                + topologyAnnouncementJSON);
-    	}
+
+        if (logger.isDebugEnabled()) {
+            // javasecurity:S5145: Replace pattern-breaking characters
+            logger.debug("doPost: incoming topology announcement is: " + topologyAnnouncementJSON.replaceAll("[\n\r\t]", "_"));
+        }
         final Announcement incomingTopologyAnnouncement;
         try {
-            incomingTopologyAnnouncement = Announcement
-                    .fromJSON(topologyAnnouncementJSON);
+            incomingTopologyAnnouncement = Announcement.fromJSON(topologyAnnouncementJSON);
 
             if (!incomingTopologyAnnouncement.getOwnerId().equals(selector)) {
                 response.sendError(HttpServletResponse.SC_BAD_REQUEST);
@@ -230,15 +227,14 @@
             }
 
             String slingId = clusterViewService.getSlingId();
-            if (slingId==null) {
-            	response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
-            	logger.info("doPut: no slingId available. Service not ready as expected at the moment.");
-            	return;
+            if (slingId == null) {
+                response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                logger.info("doPut: no slingId available. Service not ready as expected at the moment.");
+                return;
             }
-			incomingTopologyAnnouncement.removeInherited(slingId);
+            incomingTopologyAnnouncement.removeInherited(slingId);
 
-            final Announcement replyAnnouncement = new Announcement(
-                    slingId);
+            final Announcement replyAnnouncement = new Announcement(slingId);
 
             long backoffInterval = -1;
             ClusterView clusterView = clusterViewService.getLocalClusterView();
@@ -249,19 +245,19 @@
                 return;
             } else if (ClusterViewHelper.contains(clusterView, incomingTopologyAnnouncement
                     .getOwnerId())) {
-            	if (logger.isDebugEnabled()) {
-	                logger.debug("doPost: rejecting an announcement from an instance that is part of my cluster: "
-	                        + incomingTopologyAnnouncement);
-            	}
+                if (logger.isDebugEnabled()) {
+                    logger.debug("doPost: rejecting an announcement from an instance that is part of my cluster: "
+                            + incomingTopologyAnnouncement);
+                }
                 // marking as 'loop'
                 replyAnnouncement.setLoop(true);
                 backoffInterval = config.getBackoffStandbyInterval();
             } else if (ClusterViewHelper.containsAny(clusterView, incomingTopologyAnnouncement
                     .listInstances())) {
-            	if (logger.isDebugEnabled()) {
-	                logger.debug("doPost: rejecting an announcement as it contains instance(s) that is/are part of my cluster: "
-	                        + incomingTopologyAnnouncement);
-            	}
+                if (logger.isDebugEnabled()) {
+                    logger.debug("doPost: rejecting an announcement as it contains instance(s) that is/are part of my cluster: "
+                            + incomingTopologyAnnouncement);
+                }
                 // marking as 'loop'
                 replyAnnouncement.setLoop(true);
                 backoffInterval = config.getBackoffStandbyInterval();
@@ -269,13 +265,13 @@
                 backoffInterval = announcementRegistry
                         .registerAnnouncement(incomingTopologyAnnouncement);
                 if (logger.isDebugEnabled()) {
-                    logger.debug("doPost: backoffInterval after registration: "+backoffInterval);
+                    logger.debug("doPost: backoffInterval after registration: " + backoffInterval);
                 }
-                if (backoffInterval==-1) {
-                	if (logger.isDebugEnabled()) {
-    	                logger.debug("doPost: rejecting an announcement from an instance that I already see in my topology: "
-    	                        + incomingTopologyAnnouncement);
-                	}
+                if (backoffInterval == -1) {
+                    if (logger.isDebugEnabled()) {
+                        logger.debug("doPost: rejecting an announcement from an instance that I already see in my topology: "
+                                + incomingTopologyAnnouncement);
+                    }
                     // marking as 'loop'
                     replyAnnouncement.setLoop(true);
                     backoffInterval = config.getBackoffStandbyInterval();
@@ -283,33 +279,29 @@
                     // normal, successful case: replying with the part of the topology which this instance sees
                     replyAnnouncement.setLocalCluster(clusterView);
                     announcementRegistry.addAllExcept(replyAnnouncement, clusterView,
-                            new AnnouncementFilter() {
-    
-                                public boolean accept(final String receivingSlingId, Announcement announcement) {
-                                    if (announcement.getPrimaryKey().equals(
-                                            incomingTopologyAnnouncement
-                                                    .getPrimaryKey())) {
-                                        return false;
-                                    }
-                                    return true;
+                            (receivingSlingId, announcement) -> {
+                                if (announcement.getPrimaryKey().equals(
+                                        incomingTopologyAnnouncement.getPrimaryKey())) {
+                                    return false;
                                 }
+                                return true;
                             });
                 }
             }
-            if (backoffInterval>0) {
+            if (backoffInterval > 0) {
                 replyAnnouncement.setBackoffInterval(backoffInterval);
                 if (logger.isDebugEnabled()) {
-                    logger.debug("doPost: backoffInterval for client set to "+replyAnnouncement.getBackoffInterval());
+                    logger.debug("doPost: backoffInterval for client set to " + replyAnnouncement.getBackoffInterval());
                 }
             }
             final String p = requestValidator.encodeMessage(replyAnnouncement.asJSON());
             requestValidator.trustMessage(response, request, p);
             // gzip the response if the client accepts this
             final String acceptEncodingHeader = request.getHeader("Accept-Encoding");
-            if (acceptEncodingHeader!=null && acceptEncodingHeader.contains("gzip")) {
+            if (acceptEncodingHeader != null && acceptEncodingHeader.contains("gzip")) {
                 // tell the client that the content is gzipped:
                 response.setHeader("Content-Encoding", "gzip");
-                
+
                 // then gzip the body
                 final GZIPOutputStream gzipOut = new GZIPOutputStream(response.getOutputStream());
                 gzipOut.write(p.getBytes("UTF-8"));
@@ -324,13 +316,15 @@
             logger.error("doPost: Got a JSONException: " + e, e);
             response.sendError(500);
         } catch (UndefinedClusterViewException e) {
-            logger.warn("doPost: no clusterView available at the moment - cannot handle connectors now: "+e);
+            logger.warn("doPost: no clusterView available at the moment - cannot handle connectors now: " + e);
             response.sendError(503); // "please retry, but atm I can't help since I'm isolated"
         }
 
     }
-    
-    /** Checks if the provided request's remote server is whitelisted **/
+
+    /**
+     * Checks if the provided request's remote server is whitelisted
+     **/
     boolean isWhitelisted(final HttpServletRequest request) {
         if (config.isHmacEnabled()) {
             final boolean isTrusted = requestValidator.isTrusted(request);
@@ -340,20 +334,19 @@
             }
             return isTrusted;
         }
-        
+
         if (plaintextWhitelist.contains(request.getRemoteHost()) ||
                 plaintextWhitelist.contains(request.getRemoteAddr())) {
             return true;
         }
 
-        for (Iterator<WhitelistEntry> it = whitelist.iterator(); it.hasNext();) {
+        for (Iterator<WhitelistEntry> it = whitelist.iterator(); it.hasNext(); ) {
             WhitelistEntry whitelistEntry = it.next();
             if (whitelistEntry.accepts(request)) {
                 return true;
             }
         }
-        logger.info("isWhitelisted: rejecting " + request.getRemoteAddr()
-                + ", " + request.getRemoteHost());
+        logger.info("isWhitelisted: rejecting " + request.getRemoteAddr() + ", " + request.getRemoteHost());
         return false;
     }
 
diff --git a/src/main/java/org/apache/sling/discovery/base/connectors/ping/ConnectorRegistryImpl.java b/src/main/java/org/apache/sling/discovery/base/connectors/ping/impl/ConnectorRegistryImpl.java
similarity index 86%
rename from src/main/java/org/apache/sling/discovery/base/connectors/ping/ConnectorRegistryImpl.java
rename to src/main/java/org/apache/sling/discovery/base/connectors/ping/impl/ConnectorRegistryImpl.java
index f46a6e4..2baa8db 100644
--- a/src/main/java/org/apache/sling/discovery/base/connectors/ping/ConnectorRegistryImpl.java
+++ b/src/main/java/org/apache/sling/discovery/base/connectors/ping/impl/ConnectorRegistryImpl.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.sling.discovery.base.connectors.ping;
+package org.apache.sling.discovery.base.connectors.ping.impl;
 
 import java.net.InetAddress;
 import java.net.URL;
@@ -28,15 +28,16 @@
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.discovery.base.commons.ClusterViewService;
 import org.apache.sling.discovery.base.connectors.BaseConfig;
 import org.apache.sling.discovery.base.connectors.announcement.AnnouncementRegistry;
-import org.osgi.service.component.ComponentContext;
+import org.apache.sling.discovery.base.connectors.ping.ConnectorRegistry;
+import org.apache.sling.discovery.base.connectors.ping.TopologyConnectorClientInformation;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -45,14 +46,13 @@
  * keeps a list of outgoing connectors and is capable of
  * pinging them.
  */
-@Component
-@Service(value = ConnectorRegistry.class)
+@Component(service= ConnectorRegistry.class)
 public class ConnectorRegistryImpl implements ConnectorRegistry {
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
     /** A map of id-> topology connector clients currently registered/activate **/
-    private final Map<String, TopologyConnectorClient> outgoingClientsMap = new HashMap<String, TopologyConnectorClient>();
+    private final Map<String, TopologyConnectorClient> outgoingClientsMap = new HashMap<>();
 
     @Reference
     private AnnouncementRegistry announcementRegistry;
@@ -74,8 +74,8 @@
     }
     
     @Activate
-    protected void activate(final ComponentContext cc) {
-        port = cc.getBundleContext().getProperty("org.osgi.service.http.port");
+    protected void activate(BundleContext context) {
+        port = context.getProperty("org.osgi.service.http.port");
     }
     
     @Deactivate
@@ -102,7 +102,7 @@
                 Entry<String, TopologyConnectorClient> entry = it.next();
                 if (entry.getValue().getConnectorUrl().toExternalForm().equals(connectorUrl.toExternalForm())) {
                     it.remove();
-                    logger.info("registerOutgoingConnection: re-registering connector: "+connectorUrl);
+                    logger.info("registerOutgoingConnection: re-registering connector: {}", connectorUrl);
                 }
             }
             String serverInfo;
@@ -122,7 +122,7 @@
     }
 
     public Collection<TopologyConnectorClientInformation> listOutgoingConnectors() {
-        final List<TopologyConnectorClientInformation> result = new ArrayList<TopologyConnectorClientInformation>();
+        final List<TopologyConnectorClientInformation> result = new ArrayList<>();
         synchronized (outgoingClientsMap) {
             result.addAll(outgoingClientsMap.values());
         }
@@ -145,7 +145,7 @@
     public void pingOutgoingConnectors(boolean force) {
         List<TopologyConnectorClient> outgoingTemplatesClone;
         synchronized (outgoingClientsMap) {
-            outgoingTemplatesClone = new ArrayList<TopologyConnectorClient>(
+            outgoingTemplatesClone = new ArrayList<>(
                     outgoingClientsMap.values());
         }
         for (Iterator<TopologyConnectorClient> it = outgoingTemplatesClone
diff --git a/src/main/java/org/apache/sling/discovery/base/connectors/ping/TopologyConnectorClient.java b/src/main/java/org/apache/sling/discovery/base/connectors/ping/impl/TopologyConnectorClient.java
similarity index 97%
rename from src/main/java/org/apache/sling/discovery/base/connectors/ping/TopologyConnectorClient.java
rename to src/main/java/org/apache/sling/discovery/base/connectors/ping/impl/TopologyConnectorClient.java
index 9cb6e2c..e3a27c0 100644
--- a/src/main/java/org/apache/sling/discovery/base/connectors/ping/TopologyConnectorClient.java
+++ b/src/main/java/org/apache/sling/discovery/base/connectors/ping/impl/TopologyConnectorClient.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.sling.discovery.base.connectors.ping;
+package org.apache.sling.discovery.base.connectors.ping.impl;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -53,6 +53,8 @@
 import org.apache.sling.discovery.base.connectors.announcement.Announcement;
 import org.apache.sling.discovery.base.connectors.announcement.AnnouncementFilter;
 import org.apache.sling.discovery.base.connectors.announcement.AnnouncementRegistry;
+import org.apache.sling.discovery.base.connectors.ping.TopologyConnectorClientInformation;
+import org.apache.sling.discovery.base.connectors.ping.TopologyRequestValidator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -113,8 +115,8 @@
     private long backoffPeriodEnd = -1;
     
     TopologyConnectorClient(final ClusterViewService clusterViewService,
-            final AnnouncementRegistry announcementRegistry, final BaseConfig config,
-            final URL connectorUrl, final String serverInfo) {
+                                   final AnnouncementRegistry announcementRegistry, final BaseConfig config,
+                                   final URL connectorUrl, final String serverInfo) {
         if (clusterViewService == null) {
             throw new IllegalArgumentException(
                     "clusterViewService must not be null");
diff --git a/src/main/java/org/apache/sling/discovery/base/connectors/ping/package-info.java b/src/main/java/org/apache/sling/discovery/base/connectors/ping/package-info.java
index c1aa7e0..2732bd1 100644
--- a/src/main/java/org/apache/sling/discovery/base/connectors/ping/package-info.java
+++ b/src/main/java/org/apache/sling/discovery/base/connectors/ping/package-info.java
@@ -23,8 +23,7 @@
  *
  * @version 1.0.0
  */
-@Version("1.0.0")
+@Version("1.0.1")
 package org.apache.sling.discovery.base.connectors.ping;
 
-import aQute.bnd.annotation.Version;
-
+import org.osgi.annotation.versioning.Version;
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/discovery/base/connectors/ping/wl/package-info.java b/src/main/java/org/apache/sling/discovery/base/connectors/ping/wl/package-info.java
index 091715c..441f9a9 100644
--- a/src/main/java/org/apache/sling/discovery/base/connectors/ping/wl/package-info.java
+++ b/src/main/java/org/apache/sling/discovery/base/connectors/ping/wl/package-info.java
@@ -23,8 +23,7 @@
  *
  * @version 1.0.0
  */
-@Version("1.0.0")
+@Version("1.0.1")
 package org.apache.sling.discovery.base.connectors.ping.wl;
 
-import aQute.bnd.annotation.Version;
-
+import org.osgi.annotation.versioning.Version;
\ No newline at end of file
diff --git a/src/test/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistryImplTest.java b/src/test/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistryImplTest.java
index 3706d6e..bd8bf74 100644
--- a/src/test/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistryImplTest.java
+++ b/src/test/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistryImplTest.java
@@ -35,6 +35,7 @@
 import org.apache.sling.discovery.ClusterView;
 import org.apache.sling.discovery.InstanceDescription;
 import org.apache.sling.discovery.base.connectors.BaseConfig;
+import org.apache.sling.discovery.base.connectors.announcement.impl.AnnouncementRegistryImpl;
 import org.apache.sling.discovery.base.its.setup.TopologyHelper;
 import org.apache.sling.discovery.base.its.setup.VirtualInstanceHelper;
 import org.apache.sling.discovery.base.its.setup.mock.MockFactory;
diff --git a/src/test/java/org/apache/sling/discovery/base/connectors/ping/ConnectorRegistryImplTest.java b/src/test/java/org/apache/sling/discovery/base/connectors/ping/ConnectorRegistryImplTest.java
index f743418..0d6ee31 100644
--- a/src/test/java/org/apache/sling/discovery/base/connectors/ping/ConnectorRegistryImplTest.java
+++ b/src/test/java/org/apache/sling/discovery/base/connectors/ping/ConnectorRegistryImplTest.java
@@ -26,7 +26,8 @@
 import org.apache.sling.discovery.base.commons.ClusterViewService;
 import org.apache.sling.discovery.base.connectors.BaseConfig;
 import org.apache.sling.discovery.base.connectors.DummyVirtualInstanceBuilder;
-import org.apache.sling.discovery.base.connectors.announcement.AnnouncementRegistryImpl;
+import org.apache.sling.discovery.base.connectors.announcement.impl.AnnouncementRegistryImpl;
+import org.apache.sling.discovery.base.connectors.ping.impl.ConnectorRegistryImpl;
 import org.apache.sling.discovery.base.its.setup.VirtualInstance;
 import org.apache.sling.discovery.base.its.setup.VirtualInstanceBuilder;
 import org.apache.sling.discovery.base.its.setup.mock.MockFactory;
diff --git a/src/test/java/org/apache/sling/discovery/base/connectors/ping/TopologyConnectorServletTest.java b/src/test/java/org/apache/sling/discovery/base/connectors/ping/TopologyConnectorServletTest.java
index 8bf4c5a..6cd804a 100644
--- a/src/test/java/org/apache/sling/discovery/base/connectors/ping/TopologyConnectorServletTest.java
+++ b/src/test/java/org/apache/sling/discovery/base/connectors/ping/TopologyConnectorServletTest.java
@@ -25,16 +25,24 @@
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.sling.discovery.base.commons.ClusterViewService;
 import org.apache.sling.discovery.base.connectors.BaseConfig;
+import org.apache.sling.discovery.base.connectors.announcement.AnnouncementRegistry;
+import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
+import org.osgi.service.http.HttpService;
 
-import junitx.util.PrivateAccessor;
+import java.util.Hashtable;
 
 public class TopologyConnectorServletTest {
 
     private TopologyConnectorServlet servlet;
-    
+
+    @Rule
+    public final OsgiContext context = new OsgiContext();
+
     private HttpServletRequest getRequest(String host, String addr) {
         HttpServletRequest result = mock(HttpServletRequest.class);
         when(result.getRemoteAddr()).thenReturn(addr);
@@ -44,9 +52,23 @@
     
     @Before
     public void setUp() throws Exception {
-        servlet = new TopologyConnectorServlet();
-        BaseConfig config = mock(BaseConfig.class);
-        PrivateAccessor.setField(servlet, "config", config);
+        //Mock BaseConfig
+        BaseConfig baseConfig = mock(BaseConfig.class);
+        context.registerService(BaseConfig.class, baseConfig);
+
+        //Mock AnnouncementRegistry
+        AnnouncementRegistry announcementRegistry = mock(AnnouncementRegistry.class);
+        context.registerService(AnnouncementRegistry.class, announcementRegistry);
+
+        //Mock ClusterViewService
+        ClusterViewService clusterViewService = mock(ClusterViewService.class);
+        context.registerService(ClusterViewService.class, clusterViewService);
+
+        //Mock HttpService
+        HttpService httpService = mock(HttpService.class);
+        context.registerService(HttpService.class, httpService);
+
+        servlet = context.registerInjectActivateService(TopologyConnectorServlet.class, new TopologyConnectorServlet(), new Hashtable<>());
     }
     
     @Test
diff --git a/src/test/java/org/apache/sling/discovery/base/its/setup/VirtualInstanceBuilder.java b/src/test/java/org/apache/sling/discovery/base/its/setup/VirtualInstanceBuilder.java
index 15eee4b..7925258 100644
--- a/src/test/java/org/apache/sling/discovery/base/its/setup/VirtualInstanceBuilder.java
+++ b/src/test/java/org/apache/sling/discovery/base/its/setup/VirtualInstanceBuilder.java
@@ -26,9 +26,9 @@
 import org.apache.sling.discovery.base.commons.ClusterViewService;
 import org.apache.sling.discovery.base.commons.ViewChecker;
 import org.apache.sling.discovery.base.connectors.announcement.AnnouncementRegistry;
-import org.apache.sling.discovery.base.connectors.announcement.AnnouncementRegistryImpl;
+import org.apache.sling.discovery.base.connectors.announcement.impl.AnnouncementRegistryImpl;
 import org.apache.sling.discovery.base.connectors.ping.ConnectorRegistry;
-import org.apache.sling.discovery.base.connectors.ping.ConnectorRegistryImpl;
+import org.apache.sling.discovery.base.connectors.ping.impl.ConnectorRegistryImpl;
 import org.apache.sling.discovery.base.its.setup.mock.ArtificialDelay;
 import org.apache.sling.discovery.base.its.setup.mock.FailingScheduler;
 import org.apache.sling.discovery.commons.providers.base.DummyScheduler;