You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by du...@apache.org on 2021/12/08 17:15:45 UTC

[sling-org-apache-sling-testing-clients] branch master updated (359dd7b -> 1f35614)

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

dulvac pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-clients.git.


    from 359dd7b  [maven-release-plugin] prepare for next development iteration
     new 9f6c001  SLING-10974 - update jackson dependencies - remove all usage of org.codehaus.jackson packages
     new 1f35614  SLING-10974 update other dependencies

The 2 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.


Summary of changes:
 pom.xml                                            |  75 ++++-----
 .../apache/sling/testing/clients/SlingClient.java  |  19 ++-
 .../testing/clients/email/SlingEmailClient.java    | 172 ++++++++++-----------
 .../sling/testing/clients/email/package-info.java  |   2 +-
 .../sling/testing/clients/html/package-info.java   |   2 +-
 .../sling/testing/clients/osgi/BundleInfo.java     |  32 ++--
 .../sling/testing/clients/osgi/BundlesInfo.java    |  48 +++---
 .../sling/testing/clients/osgi/ComponentInfo.java  |  16 +-
 .../sling/testing/clients/osgi/ComponentsInfo.java |  15 +-
 .../testing/clients/osgi/OsgiConsoleClient.java    |  62 ++++----
 .../sling/testing/clients/osgi/ServiceInfo.java    |  16 +-
 .../sling/testing/clients/osgi/ServicesInfo.java   |  27 ++--
 .../sling/testing/clients/osgi/package-info.java   |   2 +-
 .../apache/sling/testing/clients/package-info.java |   2 +-
 .../sling/testing/clients/query/QueryClient.java   |   4 +-
 .../sling/testing/clients/util/JsonUtils.java      |   7 +-
 .../sling/testing/clients/util/package-info.java   |   2 +-
 .../clients/SlingClientConstructorTest.java        |   9 --
 .../testing/clients/SlingClientDoGetJsonTest.java  |   8 +-
 .../clients/SlingClientImportContentTest.java      |   5 +-
 .../clients/osgi/OsgiConsoleClientTest.java        |  30 ++--
 .../testing/clients/query/QueryClientTest.java     |  22 +--
 22 files changed, 278 insertions(+), 299 deletions(-)

[sling-org-apache-sling-testing-clients] 02/02: SLING-10974 update other dependencies

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

dulvac pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-clients.git

commit 1f3561422ae3ce60d5350224335bc5bb38dd0499
Author: Andrei Dulvac <ad...@adobe.com>
AuthorDate: Wed Dec 8 18:14:49 2021 +0100

    SLING-10974 update other dependencies
---
 pom.xml | 62 +++++++++++++++++---------------------------------------------
 1 file changed, 17 insertions(+), 45 deletions(-)

diff --git a/pom.xml b/pom.xml
index 5f79e61..5a3c503 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling-bundle-parent</artifactId>
-        <version>41</version>
+        <version>43</version>
         <relativePath/>
     </parent>
 
@@ -56,17 +56,17 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.22.1</version>
+                <version>2.22.2</version>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-failsafe-plugin</artifactId>
-                <version>2.22.1</version>
+                <version>2.22.2</version>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-javadoc-plugin</artifactId>
-                <version>3.0.1</version>
+                <version>3.3.0</version>
             </plugin>
             <plugin>
                 <groupId>org.apache.rat</groupId>
@@ -92,24 +92,13 @@
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-exec</artifactId>
-            <version>1.1</version>
-        </dependency>
-        <!--        <dependency>-->
-        <!--            <groupId>org.codehaus.jackson</groupId>-->
-        <!--            <artifactId>jackson-core-asl</artifactId>-->
-        <!--            <version>1.5.5</version>-->
-        <!--        </dependency>-->
-        <!--        <dependency>-->
-        <!--            <groupId>org.codehaus.jackson</groupId>-->
-        <!--            <artifactId>jackson-mapper-asl</artifactId>-->
-        <!--            <version>1.5.5</version>-->
-        <!--        </dependency>-->
+            <version>1.3</version>
+        </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-core</artifactId>
             <version>2.13.0</version>
         </dependency>
-
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
@@ -118,12 +107,12 @@
         <dependency>
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpclient</artifactId>
-            <version>4.5</version>
+            <version>4.4.1</version>
         </dependency>
         <dependency>
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpmime</artifactId>
-            <version>4.5</version>
+            <version>4.4.1</version>
         </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
@@ -133,7 +122,7 @@
         <dependency>
             <groupId>org.jsoup</groupId>
             <artifactId>jsoup</artifactId>
-            <version>1.7.2</version>
+            <version>1.14.3</version>
         </dependency>
         <dependency>
             <groupId>com.google.guava</groupId>
@@ -143,12 +132,12 @@
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
-            <version>1.7.5</version>
+            <version>1.7.32</version>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.xss</artifactId>
-            <version>1.0.4</version>
+            <version>2.2.16</version>
         </dependency>
         <dependency>
             <groupId>org.ops4j.pax.tinybundles</groupId>
@@ -165,12 +154,12 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
-            <version>2.16.0</version>
+            <version>2.23.6</version>
         </dependency>
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
+            <version>2.5</version>
         </dependency>
         <dependency>
             <groupId>javax.jcr</groupId>
@@ -182,29 +171,12 @@
             <artifactId>org.osgi.compendium</artifactId>
             <version>5.0.0</version>
         </dependency>
-        <!--
-        The dependency below is a duplicate of org.codehaus.jackson,
-        which was renamed to com.fasterxml.jackson.core. Yet, because of
-        package name changes, we cannot automatically switch because it would
-        cause a major change of the API. The new packages are currently needed for
-        the query servlet, but everything should be updated at some point.
-        -->
-<!--        <dependency>-->
-<!--            <groupId>com.fasterxml.jackson.core</groupId>-->
-<!--            <artifactId>jackson-core</artifactId>-->
-<!--            <version>2.9.4</version>-->
-<!--        </dependency>-->
-<!--        <dependency>-->
-<!--            <groupId>com.fasterxml.jackson.core</groupId>-->
-<!--            <artifactId>jackson-databind</artifactId>-->
-<!--            <version>2.9.10.1</version>-->
-<!--        </dependency>-->
 
         <!-- For tests -->
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
-            <version>4.12</version>
+            <version>4.13</version>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -216,20 +188,20 @@
         <dependency>
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpclient</artifactId>
-            <version>4.5.3</version>
+            <version>4.5.13</version>
             <classifier>tests</classifier>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
-            <version>2.6</version>
+            <version>2.11.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-simple</artifactId>
-            <version>1.7.5</version>
+            <version>1.7.32</version>
             <scope>test</scope>
         </dependency>
     </dependencies>

[sling-org-apache-sling-testing-clients] 01/02: SLING-10974 - update jackson dependencies - remove all usage of org.codehaus.jackson packages

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

dulvac pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-clients.git

commit 9f6c0010053a23256ddee21663c66fd4a23f8ac3
Author: Marc Pfaff <pf...@adobe.com>
AuthorDate: Tue Dec 7 14:42:51 2021 +0100

    SLING-10974 - update jackson dependencies
    - remove all usage of org.codehaus.jackson packages
---
 pom.xml                                            |  57 ++++---
 .../apache/sling/testing/clients/SlingClient.java  |  19 ++-
 .../testing/clients/email/SlingEmailClient.java    | 172 ++++++++++-----------
 .../sling/testing/clients/email/package-info.java  |   2 +-
 .../sling/testing/clients/html/package-info.java   |   2 +-
 .../sling/testing/clients/osgi/BundleInfo.java     |  32 ++--
 .../sling/testing/clients/osgi/BundlesInfo.java    |  48 +++---
 .../sling/testing/clients/osgi/ComponentInfo.java  |  16 +-
 .../sling/testing/clients/osgi/ComponentsInfo.java |  15 +-
 .../testing/clients/osgi/OsgiConsoleClient.java    |  62 ++++----
 .../sling/testing/clients/osgi/ServiceInfo.java    |  16 +-
 .../sling/testing/clients/osgi/ServicesInfo.java   |  27 ++--
 .../sling/testing/clients/osgi/package-info.java   |   2 +-
 .../apache/sling/testing/clients/package-info.java |   2 +-
 .../sling/testing/clients/query/QueryClient.java   |   4 +-
 .../sling/testing/clients/util/JsonUtils.java      |   7 +-
 .../sling/testing/clients/util/package-info.java   |   2 +-
 .../clients/SlingClientConstructorTest.java        |   9 --
 .../testing/clients/SlingClientDoGetJsonTest.java  |   8 +-
 .../clients/SlingClientImportContentTest.java      |   5 +-
 .../clients/osgi/OsgiConsoleClientTest.java        |  30 ++--
 .../testing/clients/query/QueryClientTest.java     |  22 +--
 22 files changed, 283 insertions(+), 276 deletions(-)

diff --git a/pom.xml b/pom.xml
index eae85d0..5f79e61 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,18 +17,19 @@
     specific language governing permissions and limitations
     under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling-bundle-parent</artifactId>
         <version>41</version>
-        <relativePath />
+        <relativePath/>
     </parent>
 
     <artifactId>org.apache.sling.testing.clients</artifactId>
-    <version>2.0.13-SNAPSHOT</version>
+    <version>3.0.0-SNAPSHOT</version>
 
     <name>Apache Sling Testing Clients</name>
     <description>
@@ -36,11 +37,12 @@
     </description>
     <scm>
         <connection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-clients.git</connection>
-        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-clients.git</developerConnection>
+        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-clients.git
+        </developerConnection>
         <url>https://gitbox.apache.org/repos/asf?p=sling-org-apache-sling-testing-clients.git</url>
         <tag>HEAD</tag>
     </scm>
-    
+
     <build>
         <plugins>
             <plugin>
@@ -71,7 +73,7 @@
                 <artifactId>apache-rat-plugin</artifactId>
                 <configuration>
                     <excludes combine.children="append">
-                            <exclude>src/test/resources/**/*.txt</exclude>
+                        <exclude>src/test/resources/**/*.txt</exclude>
                     </excludes>
                 </configuration>
             </plugin>
@@ -92,15 +94,26 @@
             <artifactId>commons-exec</artifactId>
             <version>1.1</version>
         </dependency>
+        <!--        <dependency>-->
+        <!--            <groupId>org.codehaus.jackson</groupId>-->
+        <!--            <artifactId>jackson-core-asl</artifactId>-->
+        <!--            <version>1.5.5</version>-->
+        <!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>org.codehaus.jackson</groupId>-->
+        <!--            <artifactId>jackson-mapper-asl</artifactId>-->
+        <!--            <version>1.5.5</version>-->
+        <!--        </dependency>-->
         <dependency>
-            <groupId>org.codehaus.jackson</groupId>
-            <artifactId>jackson-core-asl</artifactId>
-            <version>1.5.5</version>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+            <version>2.13.0</version>
         </dependency>
+
         <dependency>
-            <groupId>org.codehaus.jackson</groupId>
-            <artifactId>jackson-mapper-asl</artifactId>
-            <version>1.5.5</version>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>2.13.0</version>
         </dependency>
         <dependency>
             <groupId>org.apache.httpcomponents</groupId>
@@ -176,16 +189,16 @@
         cause a major change of the API. The new packages are currently needed for
         the query servlet, but everything should be updated at some point.
         -->
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-core</artifactId>
-            <version>2.9.4</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-            <version>2.9.10.1</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.fasterxml.jackson.core</groupId>-->
+<!--            <artifactId>jackson-core</artifactId>-->
+<!--            <version>2.9.4</version>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>com.fasterxml.jackson.core</groupId>-->
+<!--            <artifactId>jackson-databind</artifactId>-->
+<!--            <version>2.9.10.1</version>-->
+<!--        </dependency>-->
 
         <!-- For tests -->
         <dependency>
diff --git a/src/main/java/org/apache/sling/testing/clients/SlingClient.java b/src/main/java/org/apache/sling/testing/clients/SlingClient.java
index 59b8484..4002afe 100644
--- a/src/main/java/org/apache/sling/testing/clients/SlingClient.java
+++ b/src/main/java/org/apache/sling/testing/clients/SlingClient.java
@@ -28,6 +28,7 @@ import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpRequestInterceptor;
@@ -54,7 +55,7 @@ import org.apache.sling.testing.clients.util.ServerErrorRetryStrategy;
 import org.apache.sling.testing.clients.util.poller.AbstractPoller;
 import org.apache.sling.testing.clients.util.poller.Polling;
 import org.apache.sling.testing.timeouts.TimeoutsProvider;
-import org.codehaus.jackson.JsonNode;
+
 
 /**
  * <p>The Base class for all Integration Test Clients. It provides generic methods to send HTTP requests to a server. </p>
@@ -356,13 +357,13 @@ public class SlingClient extends AbstractSlingClient {
     }
 
     /**
-     * Returns the JSON content of a node already mapped to a {@link org.codehaus.jackson.JsonNode}.<br>
+     * Returns the JSON content of a node already mapped to a {@link com.fasterxml.jackson.databind.JsonNode}.<br>
      * Waits max 10 seconds for the node to be created.
      *
      * @deprecated use {@link #waitExists(String, long, long)} and {@link #doGetJson(String, int, int...)} instead
      * @param path  the path to the content node
      * @param depth the number of levels to go down the tree, -1 for infinity
-     * @return a {@link org.codehaus.jackson.JsonNode} mapping to the requested content node.
+     * @return a {@link com.fasterxml.jackson.databind.JsonNode} mapping to the requested content node.
      * @throws ClientException if something fails during request/response processing
      * @throws InterruptedException to mark this operation as "waiting"
      */
@@ -372,7 +373,7 @@ public class SlingClient extends AbstractSlingClient {
     }
 
     /**
-     * Returns JSON format of a content node already mapped to a {@link org.codehaus.jackson.JsonNode}.
+     * Returns JSON format of a content node already mapped to a {@link com.fasterxml.jackson.databind.JsonNode}.
      *
      * @deprecated use {@link #waitExists(String, long, long)} and {@link #doGetJson(String, int, int...)} instead
      * @param path                 the path to the content node
@@ -381,7 +382,7 @@ public class SlingClient extends AbstractSlingClient {
      * @param retryNumber          number of retries before throwing an exception
      * @param expectedStatus       list of allowed HTTP Status to be returned. If not set,
      *                             http status 200 (OK) is assumed.
-     * @return a {@link org.codehaus.jackson.JsonNode} mapping to the requested content node.
+     * @return a {@link com.fasterxml.jackson.databind.JsonNode} mapping to the requested content node.
      * @throws ClientException if something fails during request/response cycle
      * @throws InterruptedException to mark this operation as "waiting"
      */
@@ -407,13 +408,13 @@ public class SlingClient extends AbstractSlingClient {
     }
 
     /**
-     * Returns the {@link org.codehaus.jackson.JsonNode} object corresponding to a content node.
+     * Returns the {@link com.fasterxml.jackson.databind.JsonNode} object corresponding to a content node.
      *
      * @param path the path to the content node
      * @param depth the number of levels to go down the tree, -1 for infinity
      * @param expectedStatus list of allowed HTTP Status to be returned. If not set, 200 (OK) is assumed.
      *
-     * @return a {@link org.codehaus.jackson.JsonNode} mapping to the requested content node.
+     * @return a {@link com.fasterxml.jackson.databind.JsonNode} mapping to the requested content node.
      * @throws ClientException if the path does not exist or something fails during request/response cycle
      * @since 1.1.0
      */
@@ -598,7 +599,9 @@ public class SlingClient extends AbstractSlingClient {
             return null;
         }
 
-        return uuidNode.getValueAsText();
+        //TODO write test to ensure uuidNode.asText() == uuidNode.getValueAsText(), to avoid regression
+        //return uuidNode.getValueAsText();
+        return uuidNode.asText();
     }
 
     @Override
diff --git a/src/main/java/org/apache/sling/testing/clients/email/SlingEmailClient.java b/src/main/java/org/apache/sling/testing/clients/email/SlingEmailClient.java
index a41c72f..8a235e9 100644
--- a/src/main/java/org/apache/sling/testing/clients/email/SlingEmailClient.java
+++ b/src/main/java/org/apache/sling/testing/clients/email/SlingEmailClient.java
@@ -18,15 +18,8 @@
  */
 package org.apache.sling.testing.clients.email;
 
-import static org.apache.http.HttpStatus.SC_NO_CONTENT;
-import static org.apache.http.HttpStatus.SC_OK;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.http.Header;
 import org.apache.http.NameValuePair;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -34,90 +27,97 @@ import org.apache.sling.testing.clients.ClientException;
 import org.apache.sling.testing.clients.SlingClient;
 import org.apache.sling.testing.clients.SlingClientConfig;
 import org.apache.sling.testing.clients.SlingHttpResponse;
-import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.map.ObjectMapper;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import static org.apache.http.HttpStatus.SC_NO_CONTENT;
+import static org.apache.http.HttpStatus.SC_OK;
 
 /**
- * Accesses email stored by a mock SMTP server deployed to Sling 
+ * Accesses email stored by a mock SMTP server deployed to Sling
  *
  * <p>Requires that the <code>org.apache.sling.testing.email</code> bundle is deployed.</p>
  */
 public final class SlingEmailClient extends SlingClient {
 
-	/**
-	 * The well-known path under which the EmailServlet is deployed
-	 */
-	private static final String EMAIL_SERVLET_PATH = "/system/sling/testing/email";
-	
-	/**
-	 * The well-known property name of the email body contents
-	 */
-	private static final String PN_CONTENT = "-Content-";
-	
-	
-	private final ObjectMapper mapper = new ObjectMapper();
-
-	public SlingEmailClient(CloseableHttpClient http, SlingClientConfig config) throws ClientException {
-		super(http, config);
-	}
-	
-	/**
-	 * Retrieves the actual bind port of the SMTP server
-	 * 
-	 * @return the port value
-	 * @throws ClientException in case of any errors
-	 */
-	public int getBindPort() throws ClientException {
+    /**
+     * The well-known path under which the EmailServlet is deployed
+     */
+    private static final String EMAIL_SERVLET_PATH = "/system/sling/testing/email";
+
+    /**
+     * The well-known property name of the email body contents
+     */
+    private static final String PN_CONTENT = "-Content-";
+
+
+    private final ObjectMapper mapper = new ObjectMapper();
+
+    public SlingEmailClient(CloseableHttpClient http, SlingClientConfig config) throws ClientException {
+        super(http, config);
+    }
+
+    /**
+     * Retrieves the actual bind port of the SMTP server
+     *
+     * @return the port value
+     * @throws ClientException in case of any errors
+     */
+    public int getBindPort() throws ClientException {
         try {
-			SlingHttpResponse mockEmailConfig = doGet(EMAIL_SERVLET_PATH + "/config", SC_OK);
-			
-			JsonNode configNode = mapper.readTree(mockEmailConfig.getContent());
-			return configNode.get("bindPort").getIntValue();
-		} catch (IOException e) {
-			throw new ClientException("Failed retrieving configuration", e);
-		}
-	}
-	
-	/**
-	 * Retrieves the list of mail messages currently stored
-	 * 
-	 * @return the list of messages, possibly empty
-	 * @throws ClientException in case of any errors
-	 */
-	public List<EmailMessage> getMessages() throws ClientException {
-    	List<EmailMessage> emails = new ArrayList<>();
-    	
+            SlingHttpResponse mockEmailConfig = doGet(EMAIL_SERVLET_PATH + "/config", SC_OK);
+
+            JsonNode configNode = mapper.readTree(mockEmailConfig.getContent());
+            return configNode.get("bindPort").intValue();
+        } catch (IOException e) {
+            throw new ClientException("Failed retrieving configuration", e);
+        }
+    }
+
+    /**
+     * Retrieves the list of mail messages currently stored
+     *
+     * @return the list of messages, possibly empty
+     * @throws ClientException in case of any errors
+     */
+    public List<EmailMessage> getMessages() throws ClientException {
+        List<EmailMessage> emails = new ArrayList<>();
+
         try {
-			SlingHttpResponse response = doGet(EMAIL_SERVLET_PATH + "/messages", SC_OK);
-			JsonNode messages = mapper.readTree(response.getContent());
-			for ( JsonNode emailNode : messages.get("messages") ) {
-				EmailMessage msg = new EmailMessage(emailNode.get(PN_CONTENT).getTextValue());
-				Iterator<String> fieldNames = emailNode.getFieldNames();
-				while ( fieldNames.hasNext() ) {
-					String fieldName = fieldNames.next();
-					if ( fieldName.equals(PN_CONTENT) ) {
-						continue;
-					}
-					msg.addHeader(fieldName, emailNode.get(fieldName).getTextValue());
-				}
-					
-				emails.add(msg);
-			}
-		} catch (IOException e) {
-			throw new ClientException("Failed retrieving email messages", e);
-		}
-        
-        
-        return emails;		
-	}
-	
-	/**
-	 * Deletes all mail messages currently stored
-	 * 
-	 * @throws ClientException in case of any errors
-	 */
-	public void deleteMessages() throws ClientException {
-		doDelete(EMAIL_SERVLET_PATH, Collections.<NameValuePair>emptyList(), 
-				Collections.<Header> emptyList(), SC_NO_CONTENT);		
-	}
+            SlingHttpResponse response = doGet(EMAIL_SERVLET_PATH + "/messages", SC_OK);
+            JsonNode messages = mapper.readTree(response.getContent());
+            for (JsonNode emailNode : messages.get("messages")) {
+                EmailMessage msg = new EmailMessage(emailNode.get(PN_CONTENT).textValue());
+                Iterator<String> fieldNames = emailNode.fieldNames();
+                while (fieldNames.hasNext()) {
+                    String fieldName = fieldNames.next();
+                    if (fieldName.equals(PN_CONTENT)) {
+                        continue;
+                    }
+                    msg.addHeader(fieldName, emailNode.get(fieldName).textValue());
+                }
+
+                emails.add(msg);
+            }
+        } catch (IOException e) {
+            throw new ClientException("Failed retrieving email messages", e);
+        }
+
+
+        return emails;
+    }
+
+    /**
+     * Deletes all mail messages currently stored
+     *
+     * @throws ClientException in case of any errors
+     */
+    public void deleteMessages() throws ClientException {
+        doDelete(EMAIL_SERVLET_PATH, Collections.<NameValuePair>emptyList(),
+                Collections.<Header>emptyList(), SC_NO_CONTENT);
+    }
 }
diff --git a/src/main/java/org/apache/sling/testing/clients/email/package-info.java b/src/main/java/org/apache/sling/testing/clients/email/package-info.java
index 01de7b2..fd7b7a0 100644
--- a/src/main/java/org/apache/sling/testing/clients/email/package-info.java
+++ b/src/main/java/org/apache/sling/testing/clients/email/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@Version("1.3.0")
+@Version("2.0.0")
 package org.apache.sling.testing.clients.email;
 
 import org.osgi.annotation.versioning.Version;
diff --git a/src/main/java/org/apache/sling/testing/clients/html/package-info.java b/src/main/java/org/apache/sling/testing/clients/html/package-info.java
index 2723070..bf17816 100644
--- a/src/main/java/org/apache/sling/testing/clients/html/package-info.java
+++ b/src/main/java/org/apache/sling/testing/clients/html/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@Version("2.4.0")
+@Version("3.0.0")
 package org.apache.sling.testing.clients.html;
 
 import org.osgi.annotation.versioning.Version;
diff --git a/src/main/java/org/apache/sling/testing/clients/osgi/BundleInfo.java b/src/main/java/org/apache/sling/testing/clients/osgi/BundleInfo.java
index 33cdd22..1d8d0b5 100644
--- a/src/main/java/org/apache/sling/testing/clients/osgi/BundleInfo.java
+++ b/src/main/java/org/apache/sling/testing/clients/osgi/BundleInfo.java
@@ -17,8 +17,8 @@
 
 package org.apache.sling.testing.clients.osgi;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import org.apache.sling.testing.clients.ClientException;
-import org.codehaus.jackson.JsonNode;
 
 import java.util.HashMap;
 import java.util.Iterator;
@@ -29,13 +29,13 @@ public class BundleInfo {
     private JsonNode bundle;
 
     public BundleInfo(JsonNode root) throws ClientException {
-        if(root.get("id") != null) {
-            if(root.get("id") == null) {
+        if (root.get("id") != null) {
+            if (root.get("id") == null) {
                 throw new ClientException("No Bundle Info returned");
             }
             bundle = root;
         } else {
-            if(root.get("data") == null && root.get("data").size() < 1) {
+            if (root.get("data") == null && root.get("data").size() < 1) {
                 throw new ClientException("No Bundle Info returned");
             }
             bundle = root.get("data").get(0);
@@ -46,51 +46,51 @@ public class BundleInfo {
      * @return the bundle identifier
      */
     public int getId() {
-        return bundle.get("id").getIntValue();
+        return bundle.get("id").intValue();
     }
 
     /**
      * @return the bundle name
      */
     public String getName() {
-        return bundle.get("name").getTextValue();
+        return bundle.get("name").textValue();
     }
 
     /**
      * @return the bundle version
      */
     public String getVersion() {
-        return bundle.get("version").getTextValue();
+        return bundle.get("version").textValue();
     }
 
     /**
      * Returns the indicator if the bundle is a fragment
-     * 
+     *
      * @return {@code true} if bundle is a fragment, {@code false} otherwise.
      */
     public boolean isFragment() {
-        return bundle.get("fragment").getBooleanValue();
+        return bundle.get("fragment").booleanValue();
     }
 
     /**
      * @return the bundle current state
      */
     public Bundle.Status getStatus() {
-        return Bundle.Status.value(bundle.get("state").getTextValue());
+        return Bundle.Status.value(bundle.get("state").textValue());
     }
 
     /**
      * @return the bundle symbolic name
      */
     public String getSymbolicName() {
-        return bundle.get("symbolicName").getTextValue();
+        return bundle.get("symbolicName").textValue();
     }
 
     /**
      * @return the category of the bundle
      */
     public String getCategory() {
-        return bundle.get("category").getTextValue();
+        return bundle.get("category").textValue();
     }
 
     /**
@@ -111,11 +111,11 @@ public class BundleInfo {
         JsonNode props = bundle.get("props");
         Map<String, String> entries = new HashMap<String, String>();
 
-        if(props != null) {
-            Iterator<JsonNode> it = props.getElements();
-            while(it.hasNext()) {
+        if (props != null) {
+            Iterator<JsonNode> it = props.elements();
+            while (it.hasNext()) {
                 JsonNode n = it.next();
-                entries.put(n.get("key").getTextValue(), n.get("value").getTextValue());
+                entries.put(n.get("key").textValue(), n.get("value").textValue());
             }
         }
         return entries;
diff --git a/src/main/java/org/apache/sling/testing/clients/osgi/BundlesInfo.java b/src/main/java/org/apache/sling/testing/clients/osgi/BundlesInfo.java
index b99fbf5..eb47093 100644
--- a/src/main/java/org/apache/sling/testing/clients/osgi/BundlesInfo.java
+++ b/src/main/java/org/apache/sling/testing/clients/osgi/BundlesInfo.java
@@ -17,8 +17,8 @@
 
 package org.apache.sling.testing.clients.osgi;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import org.apache.sling.testing.clients.ClientException;
-import org.codehaus.jackson.JsonNode;
 
 import java.util.Iterator;
 
@@ -33,16 +33,16 @@ public class BundlesInfo {
 
     /**
      * The only constructor.
-     * 
+     *
      * @param root the root JSON node of the bundles info.
      * @throws ClientException if the json does not contain the proper info
      */
     public BundlesInfo(JsonNode root) throws ClientException {
         this.root = root;
         // some simple sanity checks
-        if(root.get("s") == null)
+        if (root.get("s") == null)
             throw new ClientException("No Status Info returned!");
-        if(root.get("s").size() != 5)
+        if (root.get("s").size() != 5)
             throw new ClientException("Wrong number of status numbers listed!");
         status = root.get("s");
     }
@@ -52,16 +52,16 @@ public class BundlesInfo {
      * @throws ClientException if the request cannot be completed
      */
     public String getStatusMessage() throws ClientException {
-        if(root.get("status") == null)
+        if (root.get("status") == null)
             throw new ClientException("No Status message returned!");
-        return root.get("status").getValueAsText();
+        return root.get("status").asText();
     }
 
     /**
      * @return total number of bundles.
      */
     public int getTotalNumOfBundles() {
-        return Integer.parseInt(status.get(0).getValueAsText());
+        return Integer.parseInt(status.get(0).asText());
     }
 
     /**
@@ -72,21 +72,21 @@ public class BundlesInfo {
      */
     public int getNumBundlesByStatus(Bundle.Status status) {
         int index = -1;
-        switch(status) {
-        case ACTIVE:
-            index = 1;
-            break;
-        case FRAGMENT:
-            index = 2;
-            break;
-        case RESOLVED:
-            index = 3;
-            break;
-        case INSTALLED:
-            index = 4;
-            break;
+        switch (status) {
+            case ACTIVE:
+                index = 1;
+                break;
+            case FRAGMENT:
+                index = 2;
+                break;
+            case RESOLVED:
+                index = 3;
+                break;
+            case INSTALLED:
+                index = 4;
+                break;
         }
-        return Integer.parseInt(this.status.get(index).getValueAsText());
+        return Integer.parseInt(this.status.get(index).asText());
     }
 
     /**
@@ -126,11 +126,11 @@ public class BundlesInfo {
     }
 
     private JsonNode findBy(String key, String value) {
-        Iterator<JsonNode> nodes = root.get("data").getElements();
-        while(nodes.hasNext()) {
+        Iterator<JsonNode> nodes = root.get("data").elements();
+        while (nodes.hasNext()) {
             JsonNode node = nodes.next();
             if ((null != node.get(key)) && (node.get(key).isValueNode())) {
-                final String valueNode = node.get(key).getTextValue();
+                final String valueNode = node.get(key).textValue();
                 if (valueNode.equals(value)) {
                     return node;
                 }
diff --git a/src/main/java/org/apache/sling/testing/clients/osgi/ComponentInfo.java b/src/main/java/org/apache/sling/testing/clients/osgi/ComponentInfo.java
index 32ed94c..50b7e9d 100644
--- a/src/main/java/org/apache/sling/testing/clients/osgi/ComponentInfo.java
+++ b/src/main/java/org/apache/sling/testing/clients/osgi/ComponentInfo.java
@@ -17,21 +17,21 @@
 
 package org.apache.sling.testing.clients.osgi;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import org.apache.sling.testing.clients.ClientException;
-import org.codehaus.jackson.JsonNode;
 
 public class ComponentInfo {
 
     private JsonNode component;
 
     public ComponentInfo(JsonNode root) throws ClientException {
-        if(root.get("id") != null) {
-            if(root.get("id") == null) {
+        if (root.get("id") != null) {
+            if (root.get("id") == null) {
                 throw new ClientException("No Component Info returned");
             }
             component = root;
         } else {
-            if(root.get("data") == null && root.get("data").size() < 1) {
+            if (root.get("data") == null && root.get("data").size() < 1) {
                 throw new ClientException("No Component Info returned");
             }
             component = root.get("data").get(0);
@@ -42,28 +42,28 @@ public class ComponentInfo {
      * @return the component identifier
      */
     public int getId() {
-        return component.get("id").getIntValue();
+        return component.get("id").intValue();
     }
 
     /**
      * @return the component name
      */
     public String getName() {
-        return component.get("name").getTextValue();
+        return component.get("name").textValue();
     }
 
     /**
      * @return the component status
      */
     public Component.Status getStatus() {
-        return Component.Status.value(component.get("state").getTextValue());
+        return Component.Status.value(component.get("state").textValue());
     }
 
     /**
      * @return the component persistent identifier
      */
     public String getPid() {
-        return component.get("pid").getTextValue();
+        return component.get("pid").textValue();
     }
 
 }
diff --git a/src/main/java/org/apache/sling/testing/clients/osgi/ComponentsInfo.java b/src/main/java/org/apache/sling/testing/clients/osgi/ComponentsInfo.java
index 49b7b14..9770cc1 100644
--- a/src/main/java/org/apache/sling/testing/clients/osgi/ComponentsInfo.java
+++ b/src/main/java/org/apache/sling/testing/clients/osgi/ComponentsInfo.java
@@ -17,11 +17,12 @@
 
 package org.apache.sling.testing.clients.osgi;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import org.apache.sling.testing.clients.ClientException;
-import org.codehaus.jackson.JsonNode;
 
 import java.util.Iterator;
 
+
 /**
  * Thin wrapper around the list of components
  */
@@ -31,7 +32,7 @@ public class ComponentsInfo {
 
     /**
      * The only constructor.
-     * 
+     *
      * @param rootNode the root JSON node of the components info.
      * @throws ClientException if the info cannot be retrieved
      */
@@ -44,9 +45,9 @@ public class ComponentsInfo {
      * @throws ClientException if the info cannot be retrieved
      */
     public int getNumberOfInstalledComponents() throws ClientException {
-        if(root.get("status") == null)
+        if (root.get("status") == null)
             throw new ClientException("Number of installed Components not defined!");
-        return Integer.parseInt(root.get("status").getValueAsText());
+        return Integer.parseInt(root.get("status").asText());
     }
 
     /**
@@ -80,11 +81,11 @@ public class ComponentsInfo {
     }
 
     private JsonNode findBy(String key, String value) {
-        Iterator<JsonNode> nodes = root.get("data").getElements();
-        while(nodes.hasNext()) {
+        Iterator<JsonNode> nodes = root.get("data").elements();
+        while (nodes.hasNext()) {
             JsonNode node = nodes.next();
             if ((null != node.get(key)) && (node.get(key).isValueNode())) {
-                final String valueNode = node.get(key).getTextValue();
+                final String valueNode = node.get(key).textValue();
                 if (valueNode.equals(value)) {
                     return node;
                 }
diff --git a/src/main/java/org/apache/sling/testing/clients/osgi/OsgiConsoleClient.java b/src/main/java/org/apache/sling/testing/clients/osgi/OsgiConsoleClient.java
index b5119c9..b3fdfea 100644
--- a/src/main/java/org/apache/sling/testing/clients/osgi/OsgiConsoleClient.java
+++ b/src/main/java/org/apache/sling/testing/clients/osgi/OsgiConsoleClient.java
@@ -17,23 +17,7 @@
 
 package org.apache.sling.testing.clients.osgi;
 
-import static org.apache.http.HttpStatus.SC_MOVED_TEMPORARILY;
-import static org.apache.http.HttpStatus.SC_OK;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeoutException;
-import java.util.jar.JarInputStream;
-import java.util.jar.Manifest;
-
+import com.fasterxml.jackson.databind.JsonNode;
 import org.apache.http.Header;
 import org.apache.http.entity.mime.MultipartEntityBuilder;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -46,11 +30,27 @@ import org.apache.sling.testing.clients.util.HttpUtils;
 import org.apache.sling.testing.clients.util.JsonUtils;
 import org.apache.sling.testing.clients.util.poller.PathPoller;
 import org.apache.sling.testing.clients.util.poller.Polling;
-import org.codehaus.jackson.JsonNode;
 import org.osgi.framework.Constants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeoutException;
+import java.util.jar.JarInputStream;
+import java.util.jar.Manifest;
+
+import static org.apache.http.HttpStatus.SC_MOVED_TEMPORARILY;
+import static org.apache.http.HttpStatus.SC_OK;
+
 /**
  * A client that wraps the Felix OSGi Web Console REST API calls.
  * @see <a href=http://felix.apache.org/documentation/subprojects/apache-felix-web-console/web-console-restful-api.html>
@@ -294,19 +294,19 @@ public class OsgiConsoleClient extends SlingClient {
         if(rootNode.get("properties") == null)
             return props;
         JsonNode properties = rootNode.get("properties");
-        for(Iterator<String> it = properties.getFieldNames(); it.hasNext();) {
+        for(Iterator<String> it = properties.fieldNames(); it.hasNext();) {
             String propName = it.next();
             JsonNode value = properties.get(propName).get("value");
             if(value != null) {
-                props.put(propName, value.getValueAsText());
+                props.put(propName, value.asText());
                 continue;
             }
             value = properties.get(propName).get("values");
             if(value != null) {
-                Iterator<JsonNode> iter = value.getElements();
+                Iterator<JsonNode> iter = value.elements();
                 List<String> list = new ArrayList<String>();
                 while(iter.hasNext()) {
-                    list.add(iter.next().getValueAsText());
+                    list.add(iter.next().asText());
                 }
                 props.put(propName, list.toArray(new String[list.size()]));
             }
@@ -345,22 +345,22 @@ public class OsgiConsoleClient extends SlingClient {
         // go through the properties
         final JsonNode propertiesNode = rootNode.get("properties");
         if ( propertiesNode != null ) {
-            for(Iterator<String> it = propertiesNode.getFieldNames(); it.hasNext();) {
+            for(Iterator<String> it = propertiesNode.fieldNames(); it.hasNext();) {
                 final String propName = it.next();
                 final JsonNode propNode = propertiesNode.get(propName);
 
-                final boolean isSet = propNode.get("is_set").getBooleanValue();
+                final boolean isSet = propNode.get("is_set").booleanValue();
                 if ( isSet ) {
                     JsonNode value = propNode.get("value");
                     if (value != null) {
-                        result.put(propName, value.getValueAsText());
+                        result.put(propName, value.asText());
                     } else {
                         value = propNode.get("values");
                         if (value != null) {
-                            final Iterator<JsonNode> iter = value.getElements();
+                            final Iterator<JsonNode> iter = value.elements();
                             List<String> list = new ArrayList<String>();
                             while(iter.hasNext()) {
-                                list.add(iter.next().getValueAsText());
+                                list.add(iter.next().asText());
                             }
                             result.put(propName, list.toArray(new String[list.size()]));
                         }
@@ -727,7 +727,7 @@ public class OsgiConsoleClient extends SlingClient {
             throw new ClientException("Cannot get id from bundle json");
         }
 
-        return idNode.getLongValue();
+        return idNode.longValue();
     }
 
     /**
@@ -744,7 +744,7 @@ public class OsgiConsoleClient extends SlingClient {
             throw new ClientException("Cannot get version from bundle json");
         }
 
-        return versionNode.getTextValue();
+        return versionNode.textValue();
     }
 
     /**
@@ -761,7 +761,7 @@ public class OsgiConsoleClient extends SlingClient {
             throw new ClientException("Cannot get state from bundle json");
         }
 
-        return stateNode.getTextValue();
+        return stateNode.textValue();
     }
 
     /**
@@ -874,7 +874,7 @@ public class OsgiConsoleClient extends SlingClient {
             throw new ClientException(path + " does not provide '" + JSON_KEY_DATA + "' element, JSON content=" + content);
         }
 
-        Iterator<JsonNode> data = root.get(JSON_KEY_DATA).getElements();
+        Iterator<JsonNode> data = root.get(JSON_KEY_DATA).elements();
         if (!data.hasNext()) {
             throw new ClientException(path + "." + JSON_KEY_DATA + " is empty, JSON content=" + content);
         }
diff --git a/src/main/java/org/apache/sling/testing/clients/osgi/ServiceInfo.java b/src/main/java/org/apache/sling/testing/clients/osgi/ServiceInfo.java
index 2d703d8..6fcb050 100644
--- a/src/main/java/org/apache/sling/testing/clients/osgi/ServiceInfo.java
+++ b/src/main/java/org/apache/sling/testing/clients/osgi/ServiceInfo.java
@@ -17,10 +17,10 @@
 
 package org.apache.sling.testing.clients.osgi;
 
-import java.util.List;
-
+import com.fasterxml.jackson.databind.JsonNode;
 import org.apache.sling.testing.clients.ClientException;
-import org.codehaus.jackson.JsonNode;
+
+import java.util.List;
 
 public class ServiceInfo {
 
@@ -41,7 +41,7 @@ public class ServiceInfo {
      * @return the service identifier
      */
     public int getId() {
-        return Integer.parseInt(service.get("id").getValueAsText());
+        return Integer.parseInt(service.get("id").asText());
     }
 
     /**
@@ -49,25 +49,25 @@ public class ServiceInfo {
      */
     public List<String> getTypes() {
         // this is not a proper JSON array (https://issues.apache.org/jira/browse/FELIX-5762)
-        return ServicesInfo.splitPseudoJsonValueArray(service.get("types").getTextValue());
+        return ServicesInfo.splitPseudoJsonValueArray(service.get("types").textValue());
     }
 
     public String getPid() {
-        return service.get("pid").getTextValue();
+        return service.get("pid").textValue();
     }
 
     /**
      * @return the bundle id of the bundle exposing the service
      */
     public int getBundleId() {
-        return service.get("bundleId").getIntValue();
+        return service.get("bundleId").intValue();
     }
 
     /**
      * @return the bundle symbolic name of bundle implementing the service
      */
     public String getBundleSymbolicName() {
-        return service.get("bundleSymbolicName").getTextValue();
+        return service.get("bundleSymbolicName").textValue();
     }
 
 }
diff --git a/src/main/java/org/apache/sling/testing/clients/osgi/ServicesInfo.java b/src/main/java/org/apache/sling/testing/clients/osgi/ServicesInfo.java
index 8ec3bbd..ce25aed 100644
--- a/src/main/java/org/apache/sling/testing/clients/osgi/ServicesInfo.java
+++ b/src/main/java/org/apache/sling/testing/clients/osgi/ServicesInfo.java
@@ -17,8 +17,8 @@
 
 package org.apache.sling.testing.clients.osgi;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import org.apache.sling.testing.clients.ClientException;
-import org.codehaus.jackson.JsonNode;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -36,16 +36,16 @@ public class ServicesInfo {
 
     /**
      * The only constructor.
-     * 
+     *
      * @param root the root JSON node of the bundles info.
      * @throws ClientException if the json does not contain the proper info
      */
     public ServicesInfo(JsonNode root) throws ClientException {
         this.root = root;
         // some simple sanity checks
-        if(root.get("status") == null)
+        if (root.get("status") == null)
             throw new ClientException("No Status returned!");
-        if(root.get("serviceCount") == null)
+        if (root.get("serviceCount") == null)
             throw new ClientException("No serviceCount returned!");
     }
 
@@ -53,7 +53,7 @@ public class ServicesInfo {
      * @return total number of bundles.
      */
     public int getTotalNumOfServices() {
-        return root.get("serviceCount").getIntValue();
+        return root.get("serviceCount").intValue();
     }
 
     /**
@@ -96,14 +96,14 @@ public class ServicesInfo {
     private List<JsonNode> findAllContainingValueInArray(String key, String value) {
         return findBy(key, value, false, true);
     }
-    
+
     private List<JsonNode> findBy(String key, String value, boolean onlyReturnFirstMatch, boolean arrayContainingMatch) {
-        Iterator<JsonNode> nodes = root.get("data").getElements();
+        Iterator<JsonNode> nodes = root.get("data").elements();
         List<JsonNode> results = new LinkedList<>();
-        while(nodes.hasNext()) {
+        while (nodes.hasNext()) {
             JsonNode node = nodes.next();
             if ((null != node.get(key)) && (node.get(key).isValueNode())) {
-                final String valueNode = node.get(key).getTextValue();
+                final String valueNode = node.get(key).textValue();
                 if (arrayContainingMatch) {
                     if (splitPseudoJsonValueArray(valueNode).contains(value)) {
                         results.add(node);
@@ -121,10 +121,11 @@ public class ServicesInfo {
     /**
      * Array values are not returned as proper JSON array for Apache Felix.
      * Therefore we need this dedicated split method, which extracts the individual values from this "pseudo" JSON array.
-     * Example value: 
+     * Example value:
      * <pre>
      * [java.lang.Runnable, org.apache.sling.event.impl.jobs.queues.QueueManager, org.osgi.service.event.EventHandler]
      * </pre>
+     *
      * @param value the value to split
      * @return the list of the individual values in the given array.
      * @see <a href="https://issues.apache.org/jira/browse/FELIX-5762">FELIX-5762</a>
@@ -133,9 +134,9 @@ public class ServicesInfo {
         // is this an array?
         if (value.startsWith("[") && value.length() >= 2) {
             // strip of first and last character
-           String pureArrayValues = value.substring(1, value.length() - 1);
-           String[] resultArray = pureArrayValues.split(", |,");
-           return Arrays.asList(resultArray);
+            String pureArrayValues = value.substring(1, value.length() - 1);
+            String[] resultArray = pureArrayValues.split(", |,");
+            return Arrays.asList(resultArray);
         }
         return Collections.singletonList(value);
     }
diff --git a/src/main/java/org/apache/sling/testing/clients/osgi/package-info.java b/src/main/java/org/apache/sling/testing/clients/osgi/package-info.java
index 7d0e647..efa5e41 100644
--- a/src/main/java/org/apache/sling/testing/clients/osgi/package-info.java
+++ b/src/main/java/org/apache/sling/testing/clients/osgi/package-info.java
@@ -19,7 +19,7 @@
 /**
  * OSGI testing tools.
  */
-@Version("2.1.0")
+@Version("3.0.0")
 package org.apache.sling.testing.clients.osgi;
 
 import org.osgi.annotation.versioning.Version;
diff --git a/src/main/java/org/apache/sling/testing/clients/package-info.java b/src/main/java/org/apache/sling/testing/clients/package-info.java
index 8b3a108..ab6987a 100644
--- a/src/main/java/org/apache/sling/testing/clients/package-info.java
+++ b/src/main/java/org/apache/sling/testing/clients/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@Version("2.4.0")
+@Version("3.0.0")
 package org.apache.sling.testing.clients;
 
 import org.osgi.annotation.versioning.Version;
diff --git a/src/main/java/org/apache/sling/testing/clients/query/QueryClient.java b/src/main/java/org/apache/sling/testing/clients/query/QueryClient.java
index bfad020..f81eaee 100644
--- a/src/main/java/org/apache/sling/testing/clients/query/QueryClient.java
+++ b/src/main/java/org/apache/sling/testing/clients/query/QueryClient.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sling.testing.clients.query;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import org.apache.http.NameValuePair;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.sling.testing.clients.ClientException;
@@ -26,7 +27,6 @@ import org.apache.sling.testing.clients.osgi.OsgiConsoleClient;
 import org.apache.sling.testing.clients.query.servlet.QueryServlet;
 import org.apache.sling.testing.clients.util.JsonUtils;
 import org.apache.sling.testing.clients.util.URLParameterBuilder;
-import org.codehaus.jackson.JsonNode;
 import org.ops4j.pax.tinybundles.core.TinyBundles;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -133,7 +133,7 @@ public class QueryClient extends SlingClient {
      * @throws InterruptedException to mark that this method blocks
      */
     public long doCount(final String query, final QueryType type) throws ClientException, InterruptedException {
-        return doQuery(query, type, false, false).get("total").getLongValue();
+        return doQuery(query, type, false, false).get("total").longValue();
     }
 
     /**
diff --git a/src/main/java/org/apache/sling/testing/clients/util/JsonUtils.java b/src/main/java/org/apache/sling/testing/clients/util/JsonUtils.java
index e64ac8d..6007f96 100644
--- a/src/main/java/org/apache/sling/testing/clients/util/JsonUtils.java
+++ b/src/main/java/org/apache/sling/testing/clients/util/JsonUtils.java
@@ -16,10 +16,9 @@
  */
 package org.apache.sling.testing.clients.util;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.sling.testing.clients.ClientException;
-import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.JsonProcessingException;
-import org.codehaus.jackson.map.ObjectMapper;
 
 import java.io.IOException;
 
@@ -35,8 +34,6 @@ public class JsonUtils {
         try {
             ObjectMapper mapper = new ObjectMapper();
             return mapper.readTree(jsonString);
-        } catch (JsonProcessingException e) {
-            throw new ClientException("Could not read json file.", e);
         } catch (IOException e) {
             throw new ClientException("Could not read json node.", e);
         }
diff --git a/src/main/java/org/apache/sling/testing/clients/util/package-info.java b/src/main/java/org/apache/sling/testing/clients/util/package-info.java
index 1b6436d..5c5d2ae 100644
--- a/src/main/java/org/apache/sling/testing/clients/util/package-info.java
+++ b/src/main/java/org/apache/sling/testing/clients/util/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@Version("2.0.0")
+@Version("3.0.0")
 package org.apache.sling.testing.clients.util;
 
 import org.osgi.annotation.versioning.Version;
diff --git a/src/test/java/org/apache/sling/testing/clients/SlingClientConstructorTest.java b/src/test/java/org/apache/sling/testing/clients/SlingClientConstructorTest.java
index 4ae3caf..076c78b 100644
--- a/src/test/java/org/apache/sling/testing/clients/SlingClientConstructorTest.java
+++ b/src/test/java/org/apache/sling/testing/clients/SlingClientConstructorTest.java
@@ -16,17 +16,8 @@
  */
 package org.apache.sling.testing.clients;
 
-import org.apache.http.HttpException;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.protocol.HttpRequestHandler;
-import org.codehaus.jackson.JsonNode;
-import org.junit.ClassRule;
 import org.junit.Test;
 
-import java.io.IOException;
 import java.net.URI;
 
 import static org.junit.Assert.assertEquals;
diff --git a/src/test/java/org/apache/sling/testing/clients/SlingClientDoGetJsonTest.java b/src/test/java/org/apache/sling/testing/clients/SlingClientDoGetJsonTest.java
index 6eeba23..dd7d621 100644
--- a/src/test/java/org/apache/sling/testing/clients/SlingClientDoGetJsonTest.java
+++ b/src/test/java/org/apache/sling/testing/clients/SlingClientDoGetJsonTest.java
@@ -16,19 +16,19 @@
  */
 package org.apache.sling.testing.clients;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import org.apache.http.HttpException;
 import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.protocol.HttpContext;
 import org.apache.http.protocol.HttpRequestHandler;
-import org.codehaus.jackson.JsonNode;
 import org.junit.ClassRule;
 import org.junit.Test;
 
 import java.io.IOException;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
 
 public class SlingClientDoGetJsonTest {
     private static final String GET_JSON_PATH = "/test/json/resource";
@@ -59,13 +59,13 @@ public class SlingClientDoGetJsonTest {
     public void testDoGetJson() throws Exception {
         SlingClient c = new SlingClient(httpServer.getURI(), "user", "pass");
         JsonNode res = c.doGetJson(GET_JSON_PATH, 1, 200);
-        assertEquals("admin-json", res.get("jcr:createdBy").getTextValue());
+        assertEquals("admin-json", res.get("jcr:createdBy").textValue());
     }
 
     @Test
     public void testDoGetJsonInfinity() throws Exception {
         SlingClient c = new SlingClient(httpServer.getURI(), "user", "pass");
         JsonNode res = c.doGetJson(GET_JSON_PATH, -1, 200);
-        assertEquals("admin-infinity", res.get("jcr:createdBy").getTextValue());
+        assertEquals("admin-infinity", res.get("jcr:createdBy").textValue());
     }
 }
diff --git a/src/test/java/org/apache/sling/testing/clients/SlingClientImportContentTest.java b/src/test/java/org/apache/sling/testing/clients/SlingClientImportContentTest.java
index 7ad5938..5ebc66a 100644
--- a/src/test/java/org/apache/sling/testing/clients/SlingClientImportContentTest.java
+++ b/src/test/java/org/apache/sling/testing/clients/SlingClientImportContentTest.java
@@ -16,14 +16,14 @@
  */
 package org.apache.sling.testing.clients;
 
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.commons.io.IOUtils;
 import org.apache.http.*;
 import org.apache.http.client.utils.URLEncodedUtils;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.protocol.HttpContext;
 import org.apache.http.protocol.HttpRequestHandler;
-import org.codehaus.jackson.node.JsonNodeFactory;
-import org.codehaus.jackson.node.ObjectNode;
 import org.junit.ClassRule;
 import org.junit.Test;
 import org.slf4j.Logger;
@@ -32,7 +32,6 @@ import org.slf4j.LoggerFactory;
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/src/test/java/org/apache/sling/testing/clients/osgi/OsgiConsoleClientTest.java b/src/test/java/org/apache/sling/testing/clients/osgi/OsgiConsoleClientTest.java
index 289323f..72db37f 100644
--- a/src/test/java/org/apache/sling/testing/clients/osgi/OsgiConsoleClientTest.java
+++ b/src/test/java/org/apache/sling/testing/clients/osgi/OsgiConsoleClientTest.java
@@ -16,25 +16,26 @@
  */
 package org.apache.sling.testing.clients.osgi;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-import java.util.Map;
-
+import com.fasterxml.jackson.databind.JsonNode;
 import org.apache.sling.testing.clients.ClientException;
 import org.apache.sling.testing.clients.util.JsonUtils;
-import org.codehaus.jackson.JsonNode;
 import org.junit.Test;
 
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
 public class OsgiConsoleClientTest {
 
-    @Test public void testExtractOSGiConfigurationNoConfig() throws ClientException {
+    @Test
+    public void testExtractOSGiConfigurationNoConfig() throws ClientException {
         final String jsonResult = "{\"pid\":\"org.apache.sling.Factory\","
                 + "\"title\":\"Factory\","
                 + "\"description\":\"A factory\","
                 + "\"properties\":{"
-                  + "\"prop\":{\"name\":\"Prop\",\"optional\":false,\"is_set\":false,\"type\":1,\"values\":[\"a\",\"b\"],"
-                  + "\"description\":\"A property\"}}}";
+                + "\"prop\":{\"name\":\"Prop\",\"optional\":false,\"is_set\":false,\"type\":1,\"values\":[\"a\",\"b\"],"
+                + "\"description\":\"A property\"}}}";
 
         final JsonNode rootNode = JsonUtils.getJsonNodeFromString(jsonResult);
 
@@ -42,15 +43,16 @@ public class OsgiConsoleClientTest {
         assertNull(OsgiConsoleClient.extractOSGiConfiguration(rootNode));
     }
 
-    @Test public void testExtractOSGiConfiguration() throws ClientException {
+    @Test
+    public void testExtractOSGiConfiguration() throws ClientException {
         final String jsonResult = "{\"pid\":\"org.apache.sling.Factory\","
                 + "\"title\":\"Factory\","
                 + "\"description\":\"A factory\","
                 + "\"properties\":{"
-                  + "\"propset\":{\"name\":\"Prop\",\"optional\":false,\"is_set\":true,\"type\":1,\"value\":\"a\","
-                  + "\"description\":\"A property\"},"
-                  + "\"prop\":{\"name\":\"Prop\",\"optional\":false,\"is_set\":false,\"type\":1,\"values\":[\"a\",\"b\"],"
-                  + "\"description\":\"A property\"}"
+                + "\"propset\":{\"name\":\"Prop\",\"optional\":false,\"is_set\":true,\"type\":1,\"value\":\"a\","
+                + "\"description\":\"A property\"},"
+                + "\"prop\":{\"name\":\"Prop\",\"optional\":false,\"is_set\":false,\"type\":1,\"values\":[\"a\",\"b\"],"
+                + "\"description\":\"A property\"}"
                 + "},\"bundleLocation\":\"\",\"bundle_location\":null,\"service_location\":\"\"}";
 
         final JsonNode rootNode = JsonUtils.getJsonNodeFromString(jsonResult);
diff --git a/src/test/java/org/apache/sling/testing/clients/query/QueryClientTest.java b/src/test/java/org/apache/sling/testing/clients/query/QueryClientTest.java
index 8e8d6f5..001572f 100644
--- a/src/test/java/org/apache/sling/testing/clients/query/QueryClientTest.java
+++ b/src/test/java/org/apache/sling/testing/clients/query/QueryClientTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sling.testing.clients.query;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import org.apache.http.HttpException;
 import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
@@ -27,7 +28,6 @@ import org.apache.http.protocol.HttpContext;
 import org.apache.http.protocol.HttpRequestHandler;
 import org.apache.sling.testing.clients.ClientException;
 import org.apache.sling.testing.clients.HttpServerRule;
-import org.codehaus.jackson.JsonNode;
 import org.junit.Assert;
 import org.junit.ClassRule;
 import org.junit.Test;
@@ -77,15 +77,15 @@ public class QueryClientTest {
             serverBootstrap.registerHandler(QUERY_PATH, new HttpRequestHandler() {
                 @Override
                 public void handle(HttpRequest request, HttpResponse response, HttpContext context) throws HttpException, IOException {
-                        List<NameValuePair> parameters = URLEncodedUtils.parse(
-                                request.getRequestLine().getUri(), Charset.defaultCharset());
-
-                        for (NameValuePair parameter : parameters) {
-                            if (parameter.getName().equals("explain") && !parameter.getValue().equals("false")) {
-                                response.setEntity(new StringEntity(EXPLAIN_RESPONSE));
-                                return;
-                            }
+                    List<NameValuePair> parameters = URLEncodedUtils.parse(
+                            request.getRequestLine().getUri(), Charset.defaultCharset());
+
+                    for (NameValuePair parameter : parameters) {
+                        if (parameter.getName().equals("explain") && !parameter.getValue().equals("false")) {
+                            response.setEntity(new StringEntity(EXPLAIN_RESPONSE));
+                            return;
                         }
+                    }
 
                     response.setEntity(new StringEntity(QUERY_RESPONSE));
                 }
@@ -116,7 +116,7 @@ public class QueryClientTest {
             serverBootstrap.registerHandler(BUNDLE_PATH, new HttpRequestHandler() {
                 @Override
                 public void handle(HttpRequest request, HttpResponse response, HttpContext context) throws HttpException, IOException {
-                        response.setStatusCode(200);
+                    response.setStatusCode(200);
                 }
             });
         }
@@ -141,7 +141,7 @@ public class QueryClientTest {
 //        JsonNode response = client.doQuery("SELECT * FROM [cq:Tag] WHERE ISDESCENDANTNODE([/etc/])",
                 QueryClient.QueryType.SQL2);
         LOG.info(response.toString());
-        Assert.assertNotEquals(0, response.get("total").getLongValue());
+        Assert.assertNotEquals(0, response.get("total").longValue());
     }
 
     @Test