You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ra...@apache.org on 2021/12/03 23:25:14 UTC

[trafficcontrol] branch master updated: Update Traffic Router Java version to 11 (#6210)

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

rawlin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new 31c4f96  Update Traffic Router Java version to 11 (#6210)
31c4f96 is described below

commit 31c4f9687acd7b0617177c9bda2d9757f9c08bec
Author: Zach Hoffman <zr...@apache.org>
AuthorDate: Fri Dec 3 15:24:59 2021 -0800

    Update Traffic Router Java version to 11 (#6210)
    
    * Update maven-pmd-plugin to 3.14.0, which uses PMD 6.29.0
    
    * Update Java PMD rule names to their PMD 6 equivalents
    
    * Unlist rules that are scheduled for removal in PMD 7
    
    * Suppress PMD.CyclomaticComplexity and PMD.NPathComplexity
    
    * Fix PMD warnings
    
    * Set JAVA_HOME so Maven can find javac
    
    * Rebuild the Traffic Router builder image if its Dockerfile was changed
    
    * Use a fetch-depth of 4 to check files changed in the last 3 commits for the build-rpms GHA
    
    * Update Traffic Router Java version to 11
    
    * Do not set UseSplitVerifier, SplitVerifier is required in Java 11
    
    * Resolve new CloseResource PMD failure in Java 11
    
    * Use RSAPrivateCrtKey, RSAPrivateCrtKeyImpl is not visible in Java 11
    
    * Decrease NPath complexity of DeliveryService constructor
    
    * Do not escape '"'
    
    * Commant and unabbreviate commit comparison
    
    * Close resources in LetsEncryptDnsChallengeWatcher.readConfigFile()
    
    * Do not close socket before handling the request
    
    * Bind port to wildcard host for OpenJDK 11 compatibility
    
    * Store socketWrapper socket for use after super.doRun()
    
    * Fix PMD failures where all PMD failures were suppressed
    
    * Remove temporary hack from #3392 that resolved an SSL issue in Tomcat
    
    * Use OpenJDK 11 in Systemd service files
    
    * Use OpenJDK 11 for Ansible Java HOME
---
 .github/actions/build-rpms/build-rpms.sh           |   7 +-
 .github/actions/tr-unit-tests/Dockerfile           |   3 +-
 .github/workflows/cache-config-tests.yml           |   4 +
 .github/workflows/ciab.yaml                        |  18 ++
 CHANGELOG.md                                       |   1 +
 docs/source/admin/quick_howto/ciab.rst             |   2 +-
 docs/source/development/building.rst               |   9 +-
 docs/source/development/traffic_router.rst         |  18 +-
 .../ansible/roles/traffic-router/defaults/main.yml |   2 +-
 .../roles/traffic-router/tasks/traffic_router.yml  |   2 +-
 .../cdn-in-a-box/traffic_router/Dockerfile         |   4 +-
 infrastructure/cdn-in-a-box/traffic_router/run.sh  |   2 +-
 .../docker/build/Dockerfile-traffic_router         |   4 +-
 infrastructure/docker/traffic_router/shutdowntr.sh |   2 +-
 infrastructure/docker/traffic_router/starttr.sh    |   2 +-
 traffic_router/build/pom.xml                       |   2 +-
 traffic_router/connector/build/pmd/ruleset.xml     | 311 +++++++++----------
 traffic_router/connector/pom.xml                   |   2 +-
 .../traffic_router/protocol/RouterNioEndpoint.java |  33 ---
 .../secure/CertificateDataConverter.java           |   2 +-
 .../traffic_router/secure/CertificateRegistry.java |   6 +-
 traffic_router/core/build/pmd/ruleset.xml          | 317 +++++++++-----------
 traffic_router/core/pom.xml                        |   4 +-
 .../traffic_router/core/config/ConfigHandler.java  |   4 +-
 .../core/dns/DNSAccessEventBuilder.java            |   8 +-
 .../traffic_router/core/dns/NameServer.java        |   2 +-
 .../traffic_router/core/dns/NameServerMain.java    |   3 +-
 .../traffic_router/core/dns/SignatureManager.java  |   2 +-
 .../traffic_router/core/dns/ZoneManager.java       |  21 +-
 .../traffic_router/core/dns/ZoneUtils.java         |   6 +-
 .../traffic_router/core/dns/protocol/Protocol.java |   2 +-
 .../core/dns/protocol/SocketHandler.java           |   4 +-
 .../traffic_router/core/dns/protocol/TCP.java      |  12 +-
 .../traffic_router/core/ds/DeliveryService.java    |  94 +++---
 .../core/ds/LetsEncryptDnsChallengeWatcher.java    |   6 +-
 .../traffic_router/core/ds/Steering.java           |   1 -
 .../traffic_router/core/ds/SteeringFilter.java     |   6 +-
 .../traffic_router/core/ds/SteeringTarget.java     |  21 +-
 .../traffic_router/core/hash/NumberSearcher.java   |   1 +
 .../core/http/HTTPAccessEventBuilder.java          |   1 +
 .../core/loc/AbstractServiceUpdater.java           |  27 +-
 .../core/loc/AnonymousIpDatabaseService.java       |   5 +-
 .../core/loc/AnonymousIpWhitelist.java             |   4 +-
 .../core/loc/MaxmindGeolocationService.java        |   5 +-
 .../traffic_router/core/loc/RegionalGeoResult.java |   2 +-
 .../traffic_router/core/loc/RegionalGeoRule.java   |   5 +-
 .../core/monitor/TrafficMonitorWatcher.java        |   4 +-
 .../traffic_router/core/router/RouteResult.java    |   2 +-
 .../traffic_router/core/router/StatTracker.java    |   4 +-
 .../traffic_router/core/router/TrafficRouter.java  |   4 +-
 .../core/secure/CertificatesClient.java            |   2 +-
 .../core/secure/CertificatesPoller.java            |   2 +-
 .../core/util/AbstractResourceWatcher.java         |  11 +-
 .../traffic_router/core/util/CidrAddress.java      |   1 +
 .../core/util/ComparableTreeSet.java               |   1 +
 .../traffic_router/core/util/Config.java           |   1 +
 .../traffic_router/core/util/DataExporter.java     |   2 +-
 .../traffic_router/core/util/Fetcher.java          |  73 ++---
 .../core/util/JsonUtilsException.java              |   1 +
 .../core/util/PeriodicResourceUpdater.java         |  17 +-
 .../traffic_router/core/util/ResourceUrl.java      |   2 +-
 .../main/lib/systemd/system/traffic_router.service |   2 +-
 traffic_router/neustar/pom.xml                     |   3 -
 traffic_router/pom.xml                             |   2 +-
 traffic_router/shared/build/pmd/ruleset.xml        | 315 +++++++++-----------
 traffic_router/shared/pom.xml                      |   2 +-
 .../traffic_router/shared/Certificate.java         |   1 -
 .../traffic_router/shared/IsEqualCollection.java   |  17 +-
 .../traffic_router/shared/SigningData.java         | 328 ++++++++++-----------
 .../traffic_router/shared/ZoneTestRecords.java     |  57 ++--
 .../src/test/java/secure/BindPrivateKeyTest.java   |   4 +-
 traffic_router/tests/Dockerfile-test-alpine        |   5 +-
 traffic_router/tests/Dockerfile-test-centos        |   3 +-
 traffic_router/tomcat-rpm/tomcat.service           |   2 +-
 traffic_router/tomcat-rpm/tomcat.spec              |   2 +-
 75 files changed, 895 insertions(+), 974 deletions(-)

diff --git a/.github/actions/build-rpms/build-rpms.sh b/.github/actions/build-rpms/build-rpms.sh
index 87e539c..aaef054 100755
--- a/.github/actions/build-rpms/build-rpms.sh
+++ b/.github/actions/build-rpms/build-rpms.sh
@@ -28,9 +28,12 @@ if [[ "$GITHUB_REF" == refs/pull/*/merge ]]; then
 	pr_number="$(<<<"$GITHUB_REF" grep -o '[0-9]\+')"
 	files_changed="$(curl "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/pulls/${pr_number}/files" | jq -r .[].filename)"
 else
-	files_changed="$(git diff-tree --no-commit-id --name-only -r "$GITHUB_SHA")"
+	files_changed="$(git diff --name-only HEAD~4 HEAD --)" # Files changed by the last 4 commits
 fi
-if <<<"$files_changed" grep '^GO_VERSION$'; then
+if <<<"$files_changed" grep '^GO_VERSION$' ||
+	{ [[ "$ATC_COMPONENT" == traffic_router ]] &&
+		<<<"$files_changed" grep '^infrastructure/docker/build/Dockerfile-traffic_router$'; };
+then
 	pkg_command+=(-b)
 fi
 
diff --git a/.github/actions/tr-unit-tests/Dockerfile b/.github/actions/tr-unit-tests/Dockerfile
index 245ed00..5b73ed5 100644
--- a/.github/actions/tr-unit-tests/Dockerfile
+++ b/.github/actions/tr-unit-tests/Dockerfile
@@ -16,10 +16,11 @@
 FROM alpine@sha256:08d6ca16c60fe7490c03d10dc339d9fd8ea67c6466dea8d558526b1330a85930
 
 RUN apk add --no-cache \
-		openjdk8 \
+		openjdk11 \
 		maven \
 		tomcat-native
 
 ENTRYPOINT	cd traffic_router && \
+			export JAVA_HOME="$(command -v java | xargs realpath | xargs dirname)/.." && \
 			mvn "-Dmaven.repo.local=${GITHUB_WORKSPACE}/.m2/repository" \
 				test -Djava.library.path=/usr/share/java
diff --git a/.github/workflows/cache-config-tests.yml b/.github/workflows/cache-config-tests.yml
index 4253839..5c31bfd 100644
--- a/.github/workflows/cache-config-tests.yml
+++ b/.github/workflows/cache-config-tests.yml
@@ -70,6 +70,8 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@v2
+        with:
+          fetch-depth: 5
       - name: Build RPM
         uses: ./.github/actions/build-rpms
         env:
@@ -86,6 +88,8 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@v2
+        with:
+          fetch-depth: 5
       - name: Build RPM
         uses: ./.github/actions/build-rpms
         env:
diff --git a/.github/workflows/ciab.yaml b/.github/workflows/ciab.yaml
index e085840..1cac861 100644
--- a/.github/workflows/ciab.yaml
+++ b/.github/workflows/ciab.yaml
@@ -85,6 +85,8 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@master
+        with:
+          fetch-depth: 5
       - name: Build RPM
         uses: ./.github/actions/build-rpms
         env:
@@ -101,6 +103,8 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@master
+        with:
+          fetch-depth: 5
       - name: Build RPM
         uses: ./.github/actions/build-rpms
         env:
@@ -117,6 +121,8 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@master
+        with:
+          fetch-depth: 5
       - name: Build RPM
         uses: ./.github/actions/build-rpms
         env:
@@ -133,6 +139,8 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@master
+        with:
+          fetch-depth: 5
       - name: Cache node modules
         uses: actions/cache@v2
         with:
@@ -156,6 +164,8 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@master
+        with:
+          fetch-depth: 5
       - name: Cache local Maven repository
         uses: actions/cache@v2
         with:
@@ -179,6 +189,8 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@master
+        with:
+          fetch-depth: 5
       - name: Build RPM
         uses: ./.github/actions/build-rpms
         env:
@@ -195,6 +207,8 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@master
+        with:
+          fetch-depth: 5
       - name: Build RPM
         uses: ./.github/actions/build-rpms
         env:
@@ -211,6 +225,8 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@master
+        with:
+          fetch-depth: 5
       - name: Build RPM
         uses: ./.github/actions/build-rpms
         env:
@@ -268,6 +284,8 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@master
+        with:
+          fetch-depth: 5
       - name: Cache Alpine Docker image
         uses: actions/cache@v2
         with:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 51e82e6..846f16b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -25,6 +25,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
 ### Fixed
 - [#6197](https://github.com/apache/trafficcontrol/issues/6197) - TO `/deliveryservices/:id/routing` makes requests to all TRs instead of by CDN.
 - Fixed Traffic Router crs/stats to prevent overflow and to correctly record the time used in averages.
+- [#6209](https://github.com/apache/trafficcontrol/pull/6209) Updated Traffic Router to use Java 11 to compile and run
 - [#5893](https://github.com/apache/trafficcontrol/issues/5893) - A self signed certificate is created when an HTTPS delivery service is created or an HTTP delivery service is updated to HTTPS.
 - [#6125](https://github.com/apache/trafficcontrol/issues/6125) - Fix `/cdns/{name}/federations?id=#` to search for CDN.
 - [#6255](https://github.com/apache/trafficcontrol/issues/6255) - Unreadable Prod Mode CDN Notifications in Traffic Portal
diff --git a/docs/source/admin/quick_howto/ciab.rst b/docs/source/admin/quick_howto/ciab.rst
index 5067a6d..92be425 100644
--- a/docs/source/admin/quick_howto/ciab.rst
+++ b/docs/source/admin/quick_howto/ciab.rst
@@ -36,7 +36,7 @@ The CDN in a Box directory is found within the Traffic Control repository at :fi
 * Traffic Portal - at :file:`infrastructure/cdn-in-a-box/traffic_portal/traffic_portal.rpm`
 * Traffic Router - at :file:`infrastructure/cdn-in-a-box/traffic_router/traffic_router.rpm` - also requires an Apache Tomcat RPM at :file:`infrastructure/cdn-in-a-box/traffic_router/tomcat.rpm`
 
-.. note:: These can also be specified via the ``RPM`` variable to a direct Docker build of the component - with the exception of Traffic Router, which instead accepts ``JDK8_RPM`` to specify a Java Development Kit RPM,  ``TRAFFIC_ROUTER_RPM`` to specify a Traffic Router RPM, and  ``TOMCAT_RPM`` to specify an Apache Tomcat RPM.
+.. note:: These can also be specified via the ``RPM`` variable to a direct Docker build of the component - with the exception of Traffic Router, which instead accepts ``TRAFFIC_ROUTER_RPM`` to specify a Traffic Router RPM and ``TOMCAT_RPM`` to specify an Apache Tomcat RPM.
 
 These can all be supplied manually via the steps in :ref:`dev-building` (for Traffic Control component RPMs) or via some external source. Alternatively, the :file:`infrastructure/cdn-in-a-box/Makefile` file contains recipes to build all of these - simply run :manpage:`make(1)` from the :file:`infrastructure/cdn-in-a-box/` directory. Once all RPM dependencies have been satisfied, run ``docker-compose build --parallel`` from the :file:`infrastructure/cdn-in-a-box/` directory to construct t [...]
 
diff --git a/docs/source/development/building.rst b/docs/source/development/building.rst
index 0553e18..dcf03f7 100644
--- a/docs/source/development/building.rst
+++ b/docs/source/development/building.rst
@@ -171,12 +171,12 @@ Install the Dependencies
 	| macOS\ [#mac-jdk]_         | - rpm               | - go                       | - go                   | - npm                     | - maven                   | - go                     | - go     | - go                         | - python3                |
 	| (homebrew_)                |                     |                            |                        | - grunt-cli               |                           |                          |          |                              |                          |
 	+----------------------------+---------------------+----------------------------+------------------------+---------------------------+---------------------------+--------------------------+----------+------------------------------+--------------------------+
-	| CentOS\ [#centos-go]_,     | - git               |                            |                        | - epel-release            | - java-1.8.0-openjdk      |                          |          |                              | - python3-devel          |
+	| CentOS\ [#centos-go]_,     | - git               |                            |                        | - epel-release            | - java-11-openjdk         |                          |          |                              | - python3-devel          |
 	| Red Hat,                   | - rpm-build         |                            |                        | - npm                     | - maven                   |                          |          |                              | - gcc                    |
 	| Fedora                     | - rsync             |                            |                        | - nodejs-grunt-cli        |                           |                          |          |                              | - make                   |
 	| (yum_)                     |                     |                            |                        |                           |                           |                          |          |                              |                          |
 	+----------------------------+---------------------+----------------------------+------------------------+---------------------------+---------------------------+--------------------------+----------+------------------------------+--------------------------+
-	| Arch Linux,                | - git               | - go                       | - go                   | - npm                     | - jdk8-openjdk            | - go                     | - go     | - go                         | - python-pip             |
+	| Arch Linux,                | - git               | - go                       | - go                   | - npm                     | - jdk11-openjdk           | - go                     | - go     | - go                         | - python-pip             |
 	| Manjaro                    | - rpm-tools         |                            |                        | - grunt-cli               | - maven                   |                          |          |                              | - python-sphinx          |
 	| (pacman_)                  | - diff              |                            |                        |                           |                           |                          |          |                              | - make                   |
 	+----------------------------+---------------------+----------------------------+------------------------+---------------------------+---------------------------+--------------------------+----------+------------------------------+--------------------------+
@@ -184,7 +184,7 @@ Install the Dependencies
 	| (cygwin_)\ [#windeps]_     | - rpm-build         |                            |                        |                           |                           |                          |          |                              |                          |
 	|                            | - rsync             |                            |                        |                           |                           |                          |          |                              |                          |
 	+----------------------------+---------------------+----------------------------+------------------------+---------------------------+---------------------------+--------------------------+----------+------------------------------+--------------------------+
-	| Windows                    |                     | - golang                   | - golang               | - nodejs                  | - openjdk8                | - golang                 | - golang | - golang                     | - python                 |
+	| Windows                    |                     | - golang                   | - golang               | - nodejs                  | - openjdk11               | - golang                 | - golang | - golang                     | - python                 |
 	| (chocolatey_)\ [#windeps]_ |                     |                            |                        |                           | - maven                   |                          |          |                              | - pip                    |
 	|                            |                     |                            |                        |                           |                           |                          |          |                              | - make                   |
 	+----------------------------+---------------------+----------------------------+------------------------+---------------------------+---------------------------+--------------------------+----------+------------------------------+--------------------------+
@@ -195,9 +195,6 @@ Install the Dependencies
 .. _cygwin:     https://cygwin.com/
 .. _chocolatey: https://chocolatey.org/
 
-.. |AdoptOpenJDK instructions| replace:: add the AdoptOpenJDK tap and install the ``adoptopenjdk8`` cask
-.. _AdoptOpenJDK instructions: https://github.com/AdoptOpenJDK/homebrew-openjdk#other-versions
-
 After installing the packages using your platform's package manager,
 
 - Install the :ref:`global NPM packages <dev-tp-global-npm>` to build Traffic Portal.
diff --git a/docs/source/development/traffic_router.rst b/docs/source/development/traffic_router.rst
index ae68288..e12433c 100644
--- a/docs/source/development/traffic_router.rst
+++ b/docs/source/development/traffic_router.rst
@@ -36,7 +36,7 @@ To work on Traffic Router you need a \*nix (MacOS and Linux are most commonly us
 
 * Eclipse >= Kepler SR2 (or another Java IDE)
 * Maven >= 3.3.1
-* JDK >= 8.0 (OpenJDK suggested, but not required)
+* JDK >= 11 (OpenJDK suggested, but not required)
 * OpenSSL >= 1.0.2
 * :abbr:`APR (Apache Portable Runtime)` >= 1.4.8-3
 * Tomcat Native >= 1.2.23
@@ -44,27 +44,21 @@ To work on Traffic Router you need a \*nix (MacOS and Linux are most commonly us
 
 .. _dev-tr-mac-jdk:
 
-Get OpenJDK 8 on macOS
+Get OpenJDK 11 on macOS
 --------------------------
-If you are on macOS, OpenJDK 8 is not available from Homebrew by default, but it can still be installed using Homebrew with little effort.
-
-Using Homebrew, |AdoptOpenJDK instructions|_
+Using Homebrew:
 
 .. code-block:: shell
-	:caption: Install OpenJDK 8 on macOS
+	:caption: Install OpenJDK 11 on macOS
 
-	brew tap AdoptOpenJDK/openjdk
-	brew cask install adoptopenjdk8
+	brew install openjdk@11
 
 Next, set the JAVA_HOME environment variable. Add this line to your ``~/.bash_profile``:
 
 .. code-block:: shell
 	:caption: Set JAVA_HOME environment variable
 
-	export JAVA_HOME=$(/usr/libexec/java_home -v1.8)
-
-.. |AdoptOpenJDK instructions| replace:: add the AdoptOpenJDK tap and install the ``adoptopenjdk8`` cask
-.. _AdoptOpenJDK instructions: https://github.com/AdoptOpenJDK/homebrew-openjdk#other-versions
+	export JAVA_HOME=$(/usr/libexec/java_home -v11)
 
 Traffic Router Project Tree Overview
 ====================================
diff --git a/infrastructure/ansible/roles/traffic-router/defaults/main.yml b/infrastructure/ansible/roles/traffic-router/defaults/main.yml
index 7689e12..09a39fa 100644
--- a/infrastructure/ansible/roles/traffic-router/defaults/main.yml
+++ b/infrastructure/ansible/roles/traffic-router/defaults/main.yml
@@ -26,7 +26,7 @@ tr_tomcat_base_dir: '/opt/tomcat'
 tr_tomcat_logs_dir: "{{ tr_tomcat_base_dir }}/logs"
 
 # JAVA_HOME to use in order to specify the desired JRE
-tr_java_home_dir: '/usr/lib/jvm/jre'
+tr_java_home_dir: '/usr/lib/jvm/jre-11-openjdk'
 
 # Remove any locally cached copy of a CRConfig
 tr_purge_crconfig_cache: False
diff --git a/infrastructure/ansible/roles/traffic-router/tasks/traffic_router.yml b/infrastructure/ansible/roles/traffic-router/tasks/traffic_router.yml
index f61c631..b896d79 100644
--- a/infrastructure/ansible/roles/traffic-router/tasks/traffic_router.yml
+++ b/infrastructure/ansible/roles/traffic-router/tasks/traffic_router.yml
@@ -29,7 +29,7 @@
 - name: Install TR Dependencies
   yum:
     name:
-      - java-1.8.0-openjdk
+      - java-11-openjdk
       - tomcat-native-1.2.23
     state: present
     update_cache: yes
diff --git a/infrastructure/cdn-in-a-box/traffic_router/Dockerfile b/infrastructure/cdn-in-a-box/traffic_router/Dockerfile
index d302915..d8e8f84 100644
--- a/infrastructure/cdn-in-a-box/traffic_router/Dockerfile
+++ b/infrastructure/cdn-in-a-box/traffic_router/Dockerfile
@@ -37,9 +37,9 @@ RUN dnf -y install epel-release && \
     dnf -y install jq git rpm-build net-tools iproute nc wget tar unzip \
           perl-JSON perl-WWW-Curl which make autoconf automake gcc gcc-c++ apr apr-devel \
           openssl openssl-devel bind-utils net-tools perl-JSON-PP gettext \
-          java-1.8.0-openjdk-headless java-1.8.0-openjdk-devel tomcat-native && \
+          java-11-openjdk-headless java-11-openjdk-devel tomcat-native && \
     dnf -y clean all && \
-    ln -sfv $(realpath /usr/lib/jvm/java-1.8.0) /opt/java
+    ln -sfv $(realpath /usr/lib/jvm/java-11) /opt/java
 
 ADD $TRAFFIC_ROUTER_RPM /traffic_router.rpm
 ADD $TOMCAT_RPM /tomcat.rpm
diff --git a/infrastructure/cdn-in-a-box/traffic_router/run.sh b/infrastructure/cdn-in-a-box/traffic_router/run.sh
index bd2135f..0bbe62a 100755
--- a/infrastructure/cdn-in-a-box/traffic_router/run.sh
+++ b/infrastructure/cdn-in-a-box/traffic_router/run.sh
@@ -49,7 +49,7 @@ CATALINA_OPTS="\
   -XX:InitiatingHeapOccupancyPercent=30"
 
 if [[ "$TR_DEBUG_ENABLE" == true ]]; then
-    export JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n";
+    export JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=*:5005,server=y,suspend=n";
     longer_dns_timeout;
 fi;
 
diff --git a/infrastructure/docker/build/Dockerfile-traffic_router b/infrastructure/docker/build/Dockerfile-traffic_router
index e91982a..572d352 100644
--- a/infrastructure/docker/build/Dockerfile-traffic_router
+++ b/infrastructure/docker/build/Dockerfile-traffic_router
@@ -46,8 +46,8 @@ FROM common-dependencies AS traffic-router
 RUN	yum -y install \
 		which  \
 		curl \
-		java-1.8.0-openjdk \
-		java-1.8.0-openjdk-devel && \
+		java-11-openjdk \
+		java-11-openjdk-devel && \
 	yum -y clean all
 
 ENV JAVA_HOME=/usr/lib/jvm/java
diff --git a/infrastructure/docker/traffic_router/shutdowntr.sh b/infrastructure/docker/traffic_router/shutdowntr.sh
index e6ffa5e..1bd8b7c 100755
--- a/infrastructure/docker/traffic_router/shutdowntr.sh
+++ b/infrastructure/docker/traffic_router/shutdowntr.sh
@@ -27,7 +27,7 @@
 # TRAFFIC_MONITORS # list of semicolon-delimited FQDN:port monitors. E.g. `monitor.foo.com:80;monitor2.bar.org:80`
 # ORIGIN_URI # origin server (e.g. hotair), used to create a delivery service
 
-export JAVA_HOME=/usr/java/jdk1.8.0_92/jre
+export JAVA_HOME="$(command -v java | xargs realpath | xargs dirname)/.."
 export CATALINA_PID=/opt/traffic_router/temp/tomcat.pid
 export CATALINA_HOME=/opt/tomcat
 export CATALINA_BASE=/opt/traffic_router
diff --git a/infrastructure/docker/traffic_router/starttr.sh b/infrastructure/docker/traffic_router/starttr.sh
index adbb9ab..5b003e3 100755
--- a/infrastructure/docker/traffic_router/starttr.sh
+++ b/infrastructure/docker/traffic_router/starttr.sh
@@ -23,7 +23,7 @@
 # Therefore it is important to keep this script up to date with any changes that are
 # made to traffic_router/build/build_rpm.sh and traffic_router/build/pom.xml
 
-export JAVA_HOME=/usr/java/jdk1.8.0_92/jre
+export JAVA_HOME="$(command -v java | xargs realpath | xargs dirname)/.."
 export CATALINA_PID=/opt/traffic_router/temp/tomcat.pid
 export CATALINA_HOME=/opt/tomcat
 export CATALINA_BASE=/opt/traffic_router
diff --git a/traffic_router/build/pom.xml b/traffic_router/build/pom.xml
index 4187a73..29be769 100644
--- a/traffic_router/build/pom.xml
+++ b/traffic_router/build/pom.xml
@@ -236,7 +236,7 @@
 								</mapping>
 							</mappings>
 							<requires>
-								<require>java >= 1.8</require>
+								<require>java-11</require>
 								<require>tomcat >= ${env.TOMCAT_VERSION}.${env.TOMCAT_RELEASE}</require>
 								<require>apr >= 1.4.8</require>
 								<require>tomcat-native >= 1.2.23</require>
diff --git a/traffic_router/connector/build/pmd/ruleset.xml b/traffic_router/connector/build/pmd/ruleset.xml
index 2ecc748..f025986 100644
--- a/traffic_router/connector/build/pmd/ruleset.xml
+++ b/traffic_router/connector/build/pmd/ruleset.xml
@@ -13,191 +13,170 @@
      See the License for the specific language governing permissions and
      limitations under the License.
  -->
-<ruleset name="Overpass PMD Ruleset" xmlns="http://pmd.sf.net/ruleset/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<ruleset name="Overpass PMD Ruleset" xmlns="http://pmd.sf.net/ruleset/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
     xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
     <description>Overpass PMD Ruleset</description>
 
     <exclude-pattern>.*/src/test/.*</exclude-pattern>
 
-	<rule ref="rulesets/java/empty.xml/EmptyCatchBlock" />
-	<rule ref="rulesets/java/empty.xml/EmptyIfStmt" />
-	<rule ref="rulesets/java/empty.xml/EmptyWhileStmt" />
-	<rule ref="rulesets/java/empty.xml/EmptyTryBlock" />
-	<rule ref="rulesets/java/empty.xml/EmptyFinallyBlock" />
-	<rule ref="rulesets/java/empty.xml/EmptySwitchStatements" />
-	<rule ref="rulesets/java/basic.xml/JumbledIncrementer" />
-	<rule ref="rulesets/java/basic.xml/ForLoopShouldBeWhileLoop" />
-	<rule ref="rulesets/java/unnecessary.xml/UnnecessaryConversionTemporary" />
-	<rule ref="rulesets/java/basic.xml/OverrideBothEqualsAndHashcode" />
-	<rule ref="rulesets/java/basic.xml/DoubleCheckedLocking"
+	<rule ref="category/java/errorprone.xml/EmptyCatchBlock" />
+	<rule ref="category/java/errorprone.xml/EmptyIfStmt" />
+	<rule ref="category/java/errorprone.xml/EmptyWhileStmt" />
+	<rule ref="category/java/errorprone.xml/EmptyTryBlock" />
+	<rule ref="category/java/errorprone.xml/EmptyFinallyBlock" />
+	<rule ref="category/java/errorprone.xml/EmptySwitchStatements" />
+	<rule ref="category/java/errorprone.xml/JumbledIncrementer" />
+	<rule ref="category/java/codestyle.xml/ForLoopShouldBeWhileLoop" />
+	<rule ref="category/java/errorprone.xml/UnnecessaryConversionTemporary" />
+	<rule ref="category/java/errorprone.xml/OverrideBothEqualsAndHashcode" />
+	<rule ref="category/java/multithreading.xml/DoubleCheckedLocking"
 		message="Verify that the double-checked variable is declared as volatile.">
 		<priority>3</priority>
 	</rule>
-	<rule ref="rulesets/java/basic.xml/ReturnFromFinallyBlock" />
-	<rule ref="rulesets/java/empty.xml/EmptySynchronizedBlock" />
-	<rule ref="rulesets/java/unnecessary.xml/UnnecessaryReturn" />
-	<rule ref="rulesets/java/empty.xml/EmptyStaticInitializer" />
-	<rule ref="rulesets/java/basic.xml/UnconditionalIfStatement" />
-	<rule ref="rulesets/java/empty.xml/EmptyStatementNotInLoop" />
-	<rule ref="rulesets/java/basic.xml/BooleanInstantiation" />
-	<rule ref="rulesets/java/unnecessary.xml/UnnecessaryFinalModifier" />
-	<rule ref="rulesets/java/basic.xml/CollapsibleIfStatements" />
-	<rule ref="rulesets/java/unnecessary.xml/UselessOverridingMethod" />
-	<rule ref="rulesets/java/basic.xml/ClassCastExceptionWithToArray" />
-	<rule ref="rulesets/java/basic.xml/AvoidDecimalLiteralsInBigDecimalConstructor" />
-	<rule ref="rulesets/java/unnecessary.xml/UselessOperationOnImmutable" />
-	<rule ref="rulesets/java/basic.xml/MisplacedNullCheck" />
-	<rule ref="rulesets/java/unnecessary.xml/UnusedNullCheckInEquals" />
-	<rule ref="rulesets/java/basic.xml/AvoidThreadGroup" />
-	<rule ref="rulesets/java/basic.xml/BrokenNullCheck" />
-	<rule ref="rulesets/java/basic.xml/BigIntegerInstantiation" />
-	<rule ref="rulesets/java/basic.xml/AvoidUsingOctalValues" />
-	<rule ref="rulesets/java/basic.xml/AvoidUsingHardCodedIP" />
-	<rule ref="rulesets/java/basic.xml/CheckResultSet" />
-	<rule ref="rulesets/java/basic.xml/AvoidMultipleUnaryOperators" />
-	<rule ref="rulesets/java/empty.xml/EmptyInitializer" />
-
-    <rule ref="rulesets/java/braces.xml/IfStmtsMustUseBraces" />
-    <rule ref="rulesets/java/braces.xml/WhileLoopsMustUseBraces" />
-    <rule ref="rulesets/java/braces.xml/IfElseStmtsMustUseBraces" />
-    <rule ref="rulesets/java/braces.xml/ForLoopsMustUseBraces" />
-
-    <rule ref="rulesets/java/clone.xml/ProperCloneImplementation" />
-    <rule ref="rulesets/java/clone.xml/CloneThrowsCloneNotSupportedException" />
-    <rule ref="rulesets/java/clone.xml/CloneMethodMustImplementCloneable" />
-
-	<rule ref="rulesets/java/codesize.xml/NPathComplexity" />
-	<rule ref="rulesets/java/codesize.xml/ExcessiveParameterList" />
-	<rule ref="rulesets/java/codesize.xml/CyclomaticComplexity" />
-	<rule ref="rulesets/java/codesize.xml/ExcessivePublicCount" />
-	<rule ref="rulesets/java/codesize.xml/TooManyFields" />
-	<rule ref="rulesets/java/codesize.xml/NcssMethodCount" />
-	<rule ref="rulesets/java/codesize.xml/NcssTypeCount" />
-	<rule ref="rulesets/java/codesize.xml/NcssConstructorCount" />
-
-    <rule ref="rulesets/java/controversial.xml/SuspiciousOctalEscape" />
-    <rule ref="rulesets/java/controversial.xml/AvoidUsingNativeCode" />
-    <rule ref="rulesets/java/controversial.xml/AvoidAccessibilityAlteration" />
-    <rule ref="rulesets/java/controversial.xml/DoNotCallGarbageCollectionExplicitly" />
-
-    <rule ref="rulesets/java/coupling.xml/LooseCoupling" />
-
-    <rule ref="rulesets/java/design.xml/AvoidDeeplyNestedIfStmts" />
-		<rule ref="rulesets/java/design.xml/AvoidReassigningParameters" >
+	<rule ref="category/java/errorprone.xml/ReturnFromFinallyBlock" />
+	<rule ref="category/java/errorprone.xml/EmptySynchronizedBlock" />
+	<rule ref="category/java/codestyle.xml/UnnecessaryReturn" />
+	<rule ref="category/java/errorprone.xml/UnconditionalIfStatement" />
+	<rule ref="category/java/errorprone.xml/EmptyStatementNotInLoop" />
+	<rule ref="category/java/codestyle.xml/UnnecessaryModifier" />
+	<rule ref="category/java/design.xml/CollapsibleIfStatements" />
+	<rule ref="category/java/design.xml/UselessOverridingMethod" />
+	<rule ref="category/java/errorprone.xml/ClassCastExceptionWithToArray" />
+	<rule ref="category/java/errorprone.xml/AvoidDecimalLiteralsInBigDecimalConstructor" />
+	<rule ref="category/java/errorprone.xml/UselessOperationOnImmutable" />
+	<rule ref="category/java/errorprone.xml/MisplacedNullCheck" />
+	<rule ref="category/java/errorprone.xml/UnusedNullCheckInEquals" />
+	<rule ref="category/java/multithreading.xml/AvoidThreadGroup" />
+	<rule ref="category/java/errorprone.xml/BrokenNullCheck" />
+	<rule ref="category/java/performance.xml/BigIntegerInstantiation" />
+	<rule ref="category/java/errorprone.xml/AvoidUsingOctalValues" />
+	<rule ref="category/java/bestpractices.xml/AvoidUsingHardCodedIP" />
+	<rule ref="category/java/bestpractices.xml/CheckResultSet" />
+	<rule ref="category/java/errorprone.xml/AvoidMultipleUnaryOperators" />
+	<rule ref="category/java/errorprone.xml/EmptyInitializer" />
+
+
+    <rule ref="category/java/errorprone.xml/ProperCloneImplementation" />
+    <rule ref="category/java/errorprone.xml/CloneMethodMustImplementCloneable" />
+
+	<rule ref="category/java/design.xml/NPathComplexity" />
+	<rule ref="category/java/design.xml/ExcessiveParameterList" />
+	<rule ref="category/java/design.xml/CyclomaticComplexity" />
+	<rule ref="category/java/design.xml/ExcessivePublicCount" />
+	<rule ref="category/java/design.xml/TooManyFields" />
+
+    <rule ref="category/java/errorprone.xml/SuspiciousOctalEscape" />
+    <rule ref="category/java/codestyle.xml/AvoidUsingNativeCode" />
+    <rule ref="category/java/errorprone.xml/AvoidAccessibilityAlteration" />
+    <rule ref="category/java/errorprone.xml/DoNotCallGarbageCollectionExplicitly" />
+
+    <rule ref="category/java/bestpractices.xml/LooseCoupling" />
+
+    <rule ref="category/java/design.xml/AvoidDeeplyNestedIfStmts" />
+		<rule ref="category/java/bestpractices.xml/AvoidReassigningParameters" >
 			<priority>3</priority>
 		</rule>
-    <rule ref="rulesets/java/design.xml/SwitchDensity" />
-    <rule ref="rulesets/java/design.xml/ConstructorCallsOverridableMethod" />
-    <rule ref="rulesets/java/design.xml/AccessorClassGeneration" />
-    <rule ref="rulesets/java/design.xml/FinalFieldCouldBeStatic" />
-    <rule ref="rulesets/java/design.xml/CloseResource" />
-    <rule ref="rulesets/java/design.xml/DefaultLabelNotLastInSwitchStmt" />
-    <rule ref="rulesets/java/design.xml/NonCaseLabelInSwitchStatement" />
-    <rule ref="rulesets/java/design.xml/OptimizableToArrayCall" />
-    <rule ref="rulesets/java/design.xml/BadComparison" />
-    <rule ref="rulesets/java/design.xml/EqualsNull" />
-    <rule ref="rulesets/java/design.xml/InstantiationToGetClass" />
-    <rule ref="rulesets/java/design.xml/IdempotentOperations" />
-    <rule ref="rulesets/java/design.xml/ImmutableField" />
-    <rule ref="rulesets/java/design.xml/AvoidProtectedFieldInFinalClass" />
-    <rule ref="rulesets/java/design.xml/AssignmentToNonFinalStatic" />
-    <rule ref="rulesets/java/design.xml/MissingStaticMethodInNonInstantiatableClass" />
-    <rule ref="rulesets/java/design.xml/MissingBreakInSwitch" />
-    <rule ref="rulesets/java/design.xml/UseNotifyAllInsteadOfNotify" />
-    <rule ref="rulesets/java/design.xml/AvoidInstanceofChecksInCatchClause" />
-    <rule ref="rulesets/java/design.xml/AbstractClassWithoutAbstractMethod" />
-    <rule ref="rulesets/java/design.xml/SimplifyConditional" />
-    <rule ref="rulesets/java/design.xml/PositionLiteralsFirstInComparisons" />
-    <rule ref="rulesets/java/design.xml/NonThreadSafeSingleton" />
-    <rule ref="rulesets/java/design.xml/UnsynchronizedStaticDateFormatter" />
-    <rule ref="rulesets/java/design.xml/PreserveStackTrace" />
-    <rule ref="rulesets/java/design.xml/UseCollectionIsEmpty" />
-    <rule ref="rulesets/java/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal" />
-    <rule ref="rulesets/java/design.xml/SingularField" />
-    <rule ref="rulesets/java/design.xml/AbstractClassWithoutAnyMethod" />
-
-    <rule ref="rulesets/java/finalizers.xml/EmptyFinalizer" />
-    <rule ref="rulesets/java/finalizers.xml/FinalizeOnlyCallsSuperFinalize" />
-    <rule ref="rulesets/java/finalizers.xml/FinalizeOverloaded" />
-    <rule ref="rulesets/java/finalizers.xml/FinalizeDoesNotCallSuperFinalize" />
-    <rule ref="rulesets/java/finalizers.xml/FinalizeShouldBeProtected" />
-    <rule ref="rulesets/java/finalizers.xml/AvoidCallingFinalize" />
-
-    <rule ref="rulesets/java/imports.xml/DuplicateImports" />
-    <rule ref="rulesets/java/imports.xml/DontImportJavaLang" />
-    <rule ref="rulesets/java/imports.xml/UnusedImports" />
-    <rule ref="rulesets/java/imports.xml/ImportFromSamePackage" />
-    <rule ref="rulesets/java/imports.xml/TooManyStaticImports" />
-
-    <rule ref="rulesets/java/javabeans.xml/MissingSerialVersionUID" />
-
-    <rule ref="rulesets/java/logging-java.xml/MoreThanOneLogger" />
-    <rule ref="rulesets/java/logging-java.xml/LoggerIsNotStaticFinal" />
-    <rule ref="rulesets/java/logging-java.xml/SystemPrintln" />
-    <rule ref="rulesets/java/logging-java.xml/AvoidPrintStackTrace" />
-
-    <rule ref="rulesets/java/naming.xml/LongVariable">
+    <rule ref="category/java/design.xml/SwitchDensity" />
+    <rule ref="category/java/errorprone.xml/ConstructorCallsOverridableMethod" />
+    <rule ref="category/java/bestpractices.xml/AccessorClassGeneration" />
+    <rule ref="category/java/design.xml/FinalFieldCouldBeStatic" />
+    <rule ref="category/java/errorprone.xml/CloseResource" />
+    <rule ref="category/java/bestpractices.xml/DefaultLabelNotLastInSwitchStmt" />
+    <rule ref="category/java/errorprone.xml/NonCaseLabelInSwitchStatement" />
+    <rule ref="category/java/performance.xml/OptimizableToArrayCall" />
+    <rule ref="category/java/errorprone.xml/BadComparison" />
+    <rule ref="category/java/errorprone.xml/EqualsNull" />
+    <rule ref="category/java/errorprone.xml/InstantiationToGetClass" />
+    <rule ref="category/java/errorprone.xml/IdempotentOperations" />
+    <rule ref="category/java/design.xml/ImmutableField" />
+    <rule ref="category/java/codestyle.xml/AvoidProtectedFieldInFinalClass" />
+    <rule ref="category/java/errorprone.xml/AssignmentToNonFinalStatic" />
+    <rule ref="category/java/errorprone.xml/MissingStaticMethodInNonInstantiatableClass" />
+    <rule ref="category/java/errorprone.xml/MissingBreakInSwitch" />
+    <rule ref="category/java/multithreading.xml/UseNotifyAllInsteadOfNotify" />
+    <rule ref="category/java/errorprone.xml/AvoidInstanceofChecksInCatchClause" />
+    <rule ref="category/java/bestpractices.xml/AbstractClassWithoutAbstractMethod" />
+    <rule ref="category/java/design.xml/SimplifyConditional" />
+    <rule ref="category/java/multithreading.xml/NonThreadSafeSingleton" />
+    <rule ref="category/java/bestpractices.xml/PreserveStackTrace" />
+    <rule ref="category/java/bestpractices.xml/UseCollectionIsEmpty" />
+    <rule ref="category/java/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal" />
+    <rule ref="category/java/design.xml/SingularField" />
+    <rule ref="category/java/design.xml/AbstractClassWithoutAnyMethod" />
+
+    <rule ref="category/java/errorprone.xml/EmptyFinalizer" />
+    <rule ref="category/java/errorprone.xml/FinalizeOnlyCallsSuperFinalize" />
+    <rule ref="category/java/errorprone.xml/FinalizeOverloaded" />
+    <rule ref="category/java/errorprone.xml/FinalizeDoesNotCallSuperFinalize" />
+    <rule ref="category/java/errorprone.xml/FinalizeShouldBeProtected" />
+    <rule ref="category/java/errorprone.xml/AvoidCallingFinalize" />
+
+    <rule ref="category/java/codestyle.xml/TooManyStaticImports" />
+
+    <rule ref="category/java/errorprone.xml/MissingSerialVersionUID" />
+
+    <rule ref="category/java/errorprone.xml/MoreThanOneLogger" />
+    <rule ref="category/java/bestpractices.xml/SystemPrintln" />
+    <rule ref="category/java/bestpractices.xml/AvoidPrintStackTrace" />
+
+    <rule ref="category/java/codestyle.xml/LongVariable">
         <properties>
             <property name="minimum" value="30" />
         </properties>
     </rule>
-    <rule ref="rulesets/java/naming.xml/ShortMethodName" />
-    <rule ref="rulesets/java/naming.xml/MethodNamingConventions" />
-    <rule ref="rulesets/java/naming.xml/ClassNamingConventions" />
-    <rule ref="rulesets/java/naming.xml/AbstractNaming" />
-    <rule ref="rulesets/java/naming.xml/AvoidDollarSigns" />
-    <rule ref="rulesets/java/naming.xml/MethodWithSameNameAsEnclosingClass" />
-    <rule ref="rulesets/java/naming.xml/SuspiciousHashcodeMethodName" />
-    <rule ref="rulesets/java/naming.xml/SuspiciousConstantFieldName" />
-    <rule ref="rulesets/java/naming.xml/SuspiciousEqualsMethodName" />
-    <rule ref="rulesets/java/naming.xml/AvoidFieldNameMatchingTypeName" />
+    <rule ref="category/java/codestyle.xml/ShortMethodName" />
+    <rule ref="category/java/codestyle.xml/MethodNamingConventions" />
+    <rule ref="category/java/codestyle.xml/ClassNamingConventions" />
+    <rule ref="category/java/codestyle.xml/AvoidDollarSigns" />
+    <rule ref="category/java/errorprone.xml/MethodWithSameNameAsEnclosingClass" />
+    <rule ref="category/java/errorprone.xml/SuspiciousHashcodeMethodName" />
+    <rule ref="category/java/errorprone.xml/SuspiciousEqualsMethodName" />
+    <rule ref="category/java/errorprone.xml/AvoidFieldNameMatchingTypeName" />
     <!--<rule ref="rulesets/java/naming.xml/AvoidFieldNameMatchingMethodName" />-->
-    <rule ref="rulesets/java/naming.xml/NoPackage" />
-    <rule ref="rulesets/java/naming.xml/PackageCase" />
-    <rule ref="rulesets/java/naming.xml/MisleadingVariableName" />
-    <rule ref="rulesets/java/naming.xml/BooleanGetMethodName" />
-
-    <rule ref="rulesets/java/optimizations.xml/LocalVariableCouldBeFinal" />
-    <rule ref="rulesets/java/optimizations.xml/MethodArgumentCouldBeFinal" />
-    <rule ref="rulesets/java/optimizations.xml/UseArrayListInsteadOfVector" />
-    <rule ref="rulesets/java/optimizations.xml/UseStringBufferForStringAppends" />
-    <rule ref="rulesets/java/optimizations.xml/UseArraysAsList" />
-    <rule ref="rulesets/java/optimizations.xml/AvoidArrayLoops" />
-    <rule ref="rulesets/java/optimizations.xml/UnnecessaryWrapperObjectCreation" />
-    <rule ref="rulesets/java/optimizations.xml/AddEmptyString" />
-
-    <rule ref="rulesets/java/strictexception.xml/AvoidCatchingThrowable" />
-    <rule ref="rulesets/java/strictexception.xml/SignatureDeclareThrowsException" />
-    <rule ref="rulesets/java/strictexception.xml/ExceptionAsFlowControl" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidCatchingNPE" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidThrowingRawExceptionTypes" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidThrowingNullPointerException" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidRethrowingException" />
-    <rule ref="rulesets/java/strictexception.xml/DoNotExtendJavaLangError" />
-    <rule ref="rulesets/java/strictexception.xml/DoNotThrowExceptionInFinally" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidThrowingNewInstanceOfSameException" />
-
-    <rule ref="rulesets/java/strings.xml/AvoidDuplicateLiterals">
+    <rule ref="category/java/codestyle.xml/NoPackage" />
+    <rule ref="category/java/codestyle.xml/PackageCase" />
+    <rule ref="category/java/codestyle.xml/BooleanGetMethodName" />
+
+    <rule ref="category/java/codestyle.xml/LocalVariableCouldBeFinal" />
+    <rule ref="category/java/codestyle.xml/MethodArgumentCouldBeFinal" />
+    <rule ref="category/java/performance.xml/UseArrayListInsteadOfVector" />
+    <rule ref="category/java/performance.xml/UseStringBufferForStringAppends" />
+    <rule ref="category/java/performance.xml/UseArraysAsList" />
+    <rule ref="category/java/performance.xml/AvoidArrayLoops" />
+    <rule ref="category/java/performance.xml/AddEmptyString" />
+
+    <rule ref="category/java/errorprone.xml/AvoidCatchingThrowable" />
+    <rule ref="category/java/design.xml/SignatureDeclareThrowsException" />
+    <rule ref="category/java/design.xml/ExceptionAsFlowControl" />
+    <rule ref="category/java/errorprone.xml/AvoidCatchingNPE" />
+    <rule ref="category/java/design.xml/AvoidThrowingRawExceptionTypes" />
+    <rule ref="category/java/design.xml/AvoidThrowingNullPointerException" />
+    <rule ref="category/java/design.xml/AvoidRethrowingException" />
+    <rule ref="category/java/design.xml/DoNotExtendJavaLangError" />
+    <rule ref="category/java/errorprone.xml/DoNotThrowExceptionInFinally" />
+    <rule ref="category/java/design.xml/AvoidThrowingNewInstanceOfSameException" />
+
+    <rule ref="category/java/errorprone.xml/AvoidDuplicateLiterals">
         <properties>
             <property name="skipAnnotations" value="true" />
         </properties>
     </rule>
-    <rule ref="rulesets/java/strings.xml/StringInstantiation" />
-    <rule ref="rulesets/java/strings.xml/StringToString" />
-    <rule ref="rulesets/java/strings.xml/InefficientStringBuffering" />
-    <rule ref="rulesets/java/strings.xml/UnnecessaryCaseChange" />
-    <rule ref="rulesets/java/strings.xml/UseStringBufferLength" />
-    <rule ref="rulesets/java/strings.xml/AppendCharacterWithChar" />
-    <rule ref="rulesets/java/strings.xml/ConsecutiveLiteralAppends" />
-    <rule ref="rulesets/java/strings.xml/UseIndexOfChar" />
-    <rule ref="rulesets/java/strings.xml/UselessStringValueOf" />
-    <rule ref="rulesets/java/strings.xml/StringBufferInstantiationWithChar" />
-    <rule ref="rulesets/java/strings.xml/UseEqualsToCompareStrings" />
-
-    <rule ref="rulesets/java/unusedcode.xml/UnusedPrivateField" />
-    <rule ref="rulesets/java/unusedcode.xml/UnusedLocalVariable" />
-    <rule ref="rulesets/java/unusedcode.xml/UnusedPrivateMethod" />
-    <rule ref="rulesets/java/unusedcode.xml/UnusedFormalParameter" />
+    <rule ref="category/java/performance.xml/StringInstantiation" />
+    <rule ref="category/java/performance.xml/StringToString" />
+    <rule ref="category/java/performance.xml/InefficientStringBuffering" />
+    <rule ref="category/java/errorprone.xml/UnnecessaryCaseChange" />
+    <rule ref="category/java/performance.xml/UseStringBufferLength" />
+    <rule ref="category/java/performance.xml/AppendCharacterWithChar" />
+    <rule ref="category/java/performance.xml/ConsecutiveLiteralAppends" />
+    <rule ref="category/java/performance.xml/UseIndexOfChar" />
+    <rule ref="category/java/performance.xml/UselessStringValueOf" />
+    <rule ref="category/java/errorprone.xml/StringBufferInstantiationWithChar" />
+    <rule ref="category/java/errorprone.xml/UseEqualsToCompareStrings" />
+
+    <rule ref="category/java/bestpractices.xml/UnusedPrivateField" />
+    <rule ref="category/java/bestpractices.xml/UnusedLocalVariable" />
+    <rule ref="category/java/bestpractices.xml/UnusedPrivateMethod" />
+    <rule ref="category/java/bestpractices.xml/UnusedFormalParameter" />
 
 </ruleset>
diff --git a/traffic_router/connector/pom.xml b/traffic_router/connector/pom.xml
index 78e9227..c0eebda 100644
--- a/traffic_router/connector/pom.xml
+++ b/traffic_router/connector/pom.xml
@@ -28,7 +28,7 @@
 		<plugins>
 			<plugin>
 				<artifactId>maven-pmd-plugin</artifactId>
-				<version>3.6</version>
+				<version>3.14.0</version>
 				<executions>
 					<execution>
 						<id>PMD</id>
diff --git a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/RouterNioEndpoint.java b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/RouterNioEndpoint.java
index 5a5957a..b75ae68 100644
--- a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/RouterNioEndpoint.java
+++ b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/RouterNioEndpoint.java
@@ -127,39 +127,6 @@ public class RouterNioEndpoint extends NioEndpoint {
 		return super.getSSLHostConfig(sniHostName == null ? null : sniHostName.toLowerCase());
 	}
 
-	@Override
-	protected SocketProcessorBase<NioChannel> createSocketProcessor(
-			final SocketWrapperBase<NioChannel> socketWrapper, final SocketEvent event){
-		return new RouterSocketProcessor(socketWrapper, event);
-	}
-
-	/**
-	 * This class is the equivalent of the Worker, but will simply use in an
-	 * external Executor thread pool.
-	 */
-	protected class RouterSocketProcessor extends SocketProcessor {
-
-		public RouterSocketProcessor(final SocketWrapperBase<NioChannel> socketWrapper, final SocketEvent event){
-			super(socketWrapper, event);
-		}
-
-		/* This override has been added as a temporary hack to resolve an issue in Tomcat.
-		Once the issue has been corrected in Tomcat then this can be removed. The
-		'SSL.getLastErrorNumber()' removes an unwanted error condition from the error stack
-		in those cases where some error condition has caused the socket to get closed and
-		then the processor was put back on the processor stack for reuse in a future connection.
-		*/
-		@Override
-		protected void doRun(){
-			final SocketWrapperBase<NioChannel> localWrapper = socketWrapper;
-			final NioChannel socket = localWrapper.getSocket();
-			super.doRun();
-			if (!socket.isOpen()){
-				SSL.getLastErrorNumber();
-			}
-		}
-	}
-
 	public String getProtocols() {
 		return protocols;
 	}
diff --git a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDataConverter.java b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDataConverter.java
index dacd17c..4b9e7c5 100644
--- a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDataConverter.java
+++ b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDataConverter.java
@@ -59,7 +59,7 @@ public class CertificateDataConverter {
 			}
 			if (hostMatch && modMatch) {
 				return new HandshakeData(certificateData.getDeliveryservice(), certificateData.getHostname(),
-						x509Chain.toArray(new X509Certificate[x509Chain.size()]), privateKey);
+						x509Chain.toArray(new X509Certificate[0]), privateKey);
 			}
 			else if (!hostMatch) {
 				log.warn("Service name doesn't match the subject of the certificate = "+certificateData.getHostname());
diff --git a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateRegistry.java b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateRegistry.java
index 942c46c..21fe6f6 100644
--- a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateRegistry.java
+++ b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateRegistry.java
@@ -156,9 +156,9 @@ public class CertificateRegistry {
 			final String selfSignedKeystoreFile = httpsProperties.get("https.certificate.location");
 			if (new File(selfSignedKeystoreFile).exists()) {
 				final String password = httpsProperties.get("https.password");
-				final InputStream readStream = new FileInputStream(selfSignedKeystoreFile);
-				ks.load(readStream, password.toCharArray());
-				readStream.close();
+				try (InputStream readStream = new FileInputStream(selfSignedKeystoreFile)) {
+					ks.load(readStream, password.toCharArray());
+				}
 				final Certificate[] certs = ks.getCertificateChain(defaultAlias);
 				final List<X509Certificate> x509certs = new ArrayList<>();
 
diff --git a/traffic_router/core/build/pmd/ruleset.xml b/traffic_router/core/build/pmd/ruleset.xml
index dcbc791..2ed0b2a 100644
--- a/traffic_router/core/build/pmd/ruleset.xml
+++ b/traffic_router/core/build/pmd/ruleset.xml
@@ -13,196 +13,171 @@
      See the License for the specific language governing permissions and
      limitations under the License.
  -->
-<ruleset name="Overpass PMD Ruleset" xmlns="http://pmd.sf.net/ruleset/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<ruleset name="Overpass PMD Ruleset" xmlns="http://pmd.sf.net/ruleset/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
     xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
     <description>Overpass PMD Ruleset</description>
 
     <exclude-pattern>.*/src/test/.*</exclude-pattern>
 
-	<rule ref="rulesets/java/empty.xml/EmptyCatchBlock" />
-	<rule ref="rulesets/java/empty.xml/EmptyIfStmt" />
-	<rule ref="rulesets/java/empty.xml/EmptyWhileStmt" />
-	<rule ref="rulesets/java/empty.xml/EmptyTryBlock" />
-	<rule ref="rulesets/java/empty.xml/EmptyFinallyBlock" />
-	<rule ref="rulesets/java/empty.xml/EmptySwitchStatements" />
-	<rule ref="rulesets/java/basic.xml/JumbledIncrementer" />
-	<rule ref="rulesets/java/basic.xml/ForLoopShouldBeWhileLoop" />
-	<rule ref="rulesets/java/unnecessary.xml/UnnecessaryConversionTemporary" />
-	<rule ref="rulesets/java/basic.xml/OverrideBothEqualsAndHashcode" />
-	<rule ref="rulesets/java/basic.xml/DoubleCheckedLocking"
+	<rule ref="category/java/errorprone.xml/EmptyCatchBlock" />
+	<rule ref="category/java/errorprone.xml/EmptyIfStmt" />
+	<rule ref="category/java/errorprone.xml/EmptyWhileStmt" />
+	<rule ref="category/java/errorprone.xml/EmptyTryBlock" />
+	<rule ref="category/java/errorprone.xml/EmptyFinallyBlock" />
+	<rule ref="category/java/errorprone.xml/EmptySwitchStatements" />
+	<rule ref="category/java/errorprone.xml/JumbledIncrementer" />
+	<rule ref="category/java/codestyle.xml/ForLoopShouldBeWhileLoop" />
+	<rule ref="category/java/errorprone.xml/UnnecessaryConversionTemporary" />
+	<rule ref="category/java/errorprone.xml/OverrideBothEqualsAndHashcode" />
+	<rule ref="category/java/multithreading.xml/DoubleCheckedLocking"
 		message="Verify that the double-checked variable is declared as volatile.">
 		<priority>3</priority>
 	</rule>
-	<rule ref="rulesets/java/basic.xml/ReturnFromFinallyBlock" />
-	<rule ref="rulesets/java/empty.xml/EmptySynchronizedBlock" />
-	<rule ref="rulesets/java/unnecessary.xml/UnnecessaryReturn" /> 
-	<rule ref="rulesets/java/empty.xml/EmptyStaticInitializer" />
-	<rule ref="rulesets/java/basic.xml/UnconditionalIfStatement" />  
-	<rule ref="rulesets/java/empty.xml/EmptyStatementNotInLoop" />       
-	<rule ref="rulesets/java/basic.xml/BooleanInstantiation" />              
-	<rule ref="rulesets/java/unnecessary.xml/UnnecessaryFinalModifier" />
-	<rule ref="rulesets/java/basic.xml/CollapsibleIfStatements" />
-	<rule ref="rulesets/java/unnecessary.xml/UselessOverridingMethod" />
-	<rule ref="rulesets/java/basic.xml/ClassCastExceptionWithToArray" />
-	<rule ref="rulesets/java/basic.xml/AvoidDecimalLiteralsInBigDecimalConstructor" />
-	<rule ref="rulesets/java/unnecessary.xml/UselessOperationOnImmutable" />
-	<rule ref="rulesets/java/basic.xml/MisplacedNullCheck" />
-	<rule ref="rulesets/java/unnecessary.xml/UnusedNullCheckInEquals" />
-	<rule ref="rulesets/java/basic.xml/AvoidThreadGroup" />
-	<rule ref="rulesets/java/basic.xml/BrokenNullCheck" />
-	<rule ref="rulesets/java/basic.xml/BigIntegerInstantiation" />
-	<rule ref="rulesets/java/basic.xml/AvoidUsingOctalValues" />
-	<rule ref="rulesets/java/basic.xml/AvoidUsingHardCodedIP" />
-	<rule ref="rulesets/java/basic.xml/CheckResultSet" />
-	<rule ref="rulesets/java/basic.xml/AvoidMultipleUnaryOperators" />
-	<rule ref="rulesets/java/empty.xml/EmptyInitializer" />
-
-    <rule ref="rulesets/java/braces.xml/IfStmtsMustUseBraces" />
-    <rule ref="rulesets/java/braces.xml/WhileLoopsMustUseBraces" />
-    <rule ref="rulesets/java/braces.xml/IfElseStmtsMustUseBraces" />
-    <rule ref="rulesets/java/braces.xml/ForLoopsMustUseBraces" />
-
-    <rule ref="rulesets/java/clone.xml/ProperCloneImplementation" />
-    <rule ref="rulesets/java/clone.xml/CloneThrowsCloneNotSupportedException" />
-    <rule ref="rulesets/java/clone.xml/CloneMethodMustImplementCloneable" />
-
-	<rule ref="rulesets/java/codesize.xml/NPathComplexity" />
-	<rule ref="rulesets/java/codesize.xml/ExcessiveParameterList" />
-	<rule ref="rulesets/java/codesize.xml/CyclomaticComplexity" >
-		<properties>
-			<property name="showClassesComplexity" value="false" />
-		</properties>
-	</rule>
-	<rule ref="rulesets/java/codesize.xml/ExcessivePublicCount" />
-	<rule ref="rulesets/java/codesize.xml/TooManyFields" />
-	<rule ref="rulesets/java/codesize.xml/NcssMethodCount" />
-	<rule ref="rulesets/java/codesize.xml/NcssTypeCount" />
-	<rule ref="rulesets/java/codesize.xml/NcssConstructorCount" />
-
-    <rule ref="rulesets/java/controversial.xml/DontImportSun" />
-    <rule ref="rulesets/java/controversial.xml/SuspiciousOctalEscape" />
-    <rule ref="rulesets/java/controversial.xml/AvoidUsingNativeCode" />
-    <rule ref="rulesets/java/controversial.xml/AvoidAccessibilityAlteration" />
-    <rule ref="rulesets/java/controversial.xml/DoNotCallGarbageCollectionExplicitly" />
-
-    <rule ref="rulesets/java/coupling.xml/LooseCoupling" />
-
-    <rule ref="rulesets/java/design.xml/AvoidDeeplyNestedIfStmts" />
-		<rule ref="rulesets/java/design.xml/AvoidReassigningParameters" >
+	<rule ref="category/java/errorprone.xml/ReturnFromFinallyBlock" />
+	<rule ref="category/java/errorprone.xml/EmptySynchronizedBlock" />
+	<rule ref="category/java/codestyle.xml/UnnecessaryReturn" />
+	<rule ref="category/java/errorprone.xml/UnconditionalIfStatement" />
+	<rule ref="category/java/errorprone.xml/EmptyStatementNotInLoop" />
+	<rule ref="category/java/codestyle.xml/UnnecessaryModifier" />
+	<rule ref="category/java/design.xml/CollapsibleIfStatements" />
+	<rule ref="category/java/design.xml/UselessOverridingMethod" />
+	<rule ref="category/java/errorprone.xml/ClassCastExceptionWithToArray" />
+	<rule ref="category/java/errorprone.xml/AvoidDecimalLiteralsInBigDecimalConstructor" />
+	<rule ref="category/java/errorprone.xml/UselessOperationOnImmutable" />
+	<rule ref="category/java/errorprone.xml/MisplacedNullCheck" />
+	<rule ref="category/java/errorprone.xml/UnusedNullCheckInEquals" />
+	<rule ref="category/java/multithreading.xml/AvoidThreadGroup" />
+	<rule ref="category/java/errorprone.xml/BrokenNullCheck" />
+	<rule ref="category/java/performance.xml/BigIntegerInstantiation" />
+	<rule ref="category/java/errorprone.xml/AvoidUsingOctalValues" />
+	<rule ref="category/java/bestpractices.xml/AvoidUsingHardCodedIP" />
+	<rule ref="category/java/bestpractices.xml/CheckResultSet" />
+	<rule ref="category/java/errorprone.xml/AvoidMultipleUnaryOperators" />
+	<rule ref="category/java/errorprone.xml/EmptyInitializer" />
+
+
+    <rule ref="category/java/errorprone.xml/ProperCloneImplementation" />
+    <rule ref="category/java/errorprone.xml/CloneMethodMustImplementCloneable" />
+
+	<rule ref="category/java/design.xml/NPathComplexity" />
+	<rule ref="category/java/design.xml/ExcessiveParameterList" />
+	<rule ref="category/java/design.xml/CyclomaticComplexity" />
+	<rule ref="category/java/design.xml/ExcessivePublicCount" />
+	<rule ref="category/java/design.xml/TooManyFields" />
+
+    <rule ref="category/java/errorprone.xml/DontImportSun" />
+    <rule ref="category/java/errorprone.xml/SuspiciousOctalEscape" />
+    <rule ref="category/java/codestyle.xml/AvoidUsingNativeCode" />
+    <rule ref="category/java/errorprone.xml/AvoidAccessibilityAlteration" />
+    <rule ref="category/java/errorprone.xml/DoNotCallGarbageCollectionExplicitly" />
+
+    <rule ref="category/java/bestpractices.xml/LooseCoupling" />
+
+    <rule ref="category/java/design.xml/AvoidDeeplyNestedIfStmts" />
+		<rule ref="category/java/bestpractices.xml/AvoidReassigningParameters" >
 			<priority>3</priority>
 		</rule>
-    <rule ref="rulesets/java/design.xml/SwitchDensity" />
-    <rule ref="rulesets/java/design.xml/ConstructorCallsOverridableMethod" />
-    <rule ref="rulesets/java/design.xml/AccessorClassGeneration" />
-    <rule ref="rulesets/java/design.xml/FinalFieldCouldBeStatic" />
-    <rule ref="rulesets/java/design.xml/CloseResource" />
-    <rule ref="rulesets/java/design.xml/DefaultLabelNotLastInSwitchStmt" />
-    <rule ref="rulesets/java/design.xml/NonCaseLabelInSwitchStatement" />
-    <rule ref="rulesets/java/design.xml/OptimizableToArrayCall" />
-    <rule ref="rulesets/java/design.xml/BadComparison" />
-    <rule ref="rulesets/java/design.xml/EqualsNull" />
-    <rule ref="rulesets/java/design.xml/InstantiationToGetClass" />
-    <rule ref="rulesets/java/design.xml/IdempotentOperations" />
-    <rule ref="rulesets/java/design.xml/ImmutableField" />
-    <rule ref="rulesets/java/design.xml/AvoidProtectedFieldInFinalClass" />
-    <rule ref="rulesets/java/design.xml/AssignmentToNonFinalStatic" />
-    <rule ref="rulesets/java/design.xml/MissingStaticMethodInNonInstantiatableClass" />
-    <rule ref="rulesets/java/design.xml/MissingBreakInSwitch" />
-    <rule ref="rulesets/java/design.xml/UseNotifyAllInsteadOfNotify" />
-    <rule ref="rulesets/java/design.xml/AvoidInstanceofChecksInCatchClause" />
-    <rule ref="rulesets/java/design.xml/AbstractClassWithoutAbstractMethod" />
-    <rule ref="rulesets/java/design.xml/SimplifyConditional" />
-    <rule ref="rulesets/java/design.xml/PositionLiteralsFirstInComparisons" />
-    <rule ref="rulesets/java/design.xml/NonThreadSafeSingleton" />
-    <rule ref="rulesets/java/design.xml/UnsynchronizedStaticDateFormatter" />
-    <rule ref="rulesets/java/design.xml/PreserveStackTrace" />
-    <rule ref="rulesets/java/design.xml/UseCollectionIsEmpty" />
-    <rule ref="rulesets/java/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal" />
-    <rule ref="rulesets/java/design.xml/SingularField" />
-    <rule ref="rulesets/java/design.xml/AbstractClassWithoutAnyMethod" />
-
-    <rule ref="rulesets/java/finalizers.xml/EmptyFinalizer" />
-    <rule ref="rulesets/java/finalizers.xml/FinalizeOnlyCallsSuperFinalize" />
-    <rule ref="rulesets/java/finalizers.xml/FinalizeOverloaded" />
-    <rule ref="rulesets/java/finalizers.xml/FinalizeDoesNotCallSuperFinalize" />
-    <rule ref="rulesets/java/finalizers.xml/FinalizeShouldBeProtected" />
-    <rule ref="rulesets/java/finalizers.xml/AvoidCallingFinalize" />
-
-    <rule ref="rulesets/java/imports.xml/DuplicateImports" />
-    <rule ref="rulesets/java/imports.xml/DontImportJavaLang" />
-    <rule ref="rulesets/java/imports.xml/UnusedImports" />
-    <rule ref="rulesets/java/imports.xml/ImportFromSamePackage" />
-    <rule ref="rulesets/java/imports.xml/TooManyStaticImports" />
-
-    <rule ref="rulesets/java/javabeans.xml/MissingSerialVersionUID" />
-
-    <rule ref="rulesets/java/logging-java.xml/MoreThanOneLogger" />
-    <rule ref="rulesets/java/logging-java.xml/LoggerIsNotStaticFinal" />
-    <rule ref="rulesets/java/logging-java.xml/SystemPrintln" />
-    <rule ref="rulesets/java/logging-java.xml/AvoidPrintStackTrace" />
-
-    <rule ref="rulesets/java/naming.xml/LongVariable">
+    <rule ref="category/java/design.xml/SwitchDensity" />
+    <rule ref="category/java/errorprone.xml/ConstructorCallsOverridableMethod" />
+    <rule ref="category/java/bestpractices.xml/AccessorClassGeneration" />
+    <rule ref="category/java/design.xml/FinalFieldCouldBeStatic" />
+    <rule ref="category/java/errorprone.xml/CloseResource" />
+    <rule ref="category/java/bestpractices.xml/DefaultLabelNotLastInSwitchStmt" />
+    <rule ref="category/java/errorprone.xml/NonCaseLabelInSwitchStatement" />
+    <rule ref="category/java/performance.xml/OptimizableToArrayCall" />
+    <rule ref="category/java/errorprone.xml/BadComparison" />
+    <rule ref="category/java/errorprone.xml/EqualsNull" />
+    <rule ref="category/java/errorprone.xml/InstantiationToGetClass" />
+    <rule ref="category/java/errorprone.xml/IdempotentOperations" />
+    <rule ref="category/java/design.xml/ImmutableField" />
+    <rule ref="category/java/codestyle.xml/AvoidProtectedFieldInFinalClass" />
+    <rule ref="category/java/errorprone.xml/AssignmentToNonFinalStatic" />
+    <rule ref="category/java/errorprone.xml/MissingStaticMethodInNonInstantiatableClass" />
+    <rule ref="category/java/errorprone.xml/MissingBreakInSwitch" />
+    <rule ref="category/java/multithreading.xml/UseNotifyAllInsteadOfNotify" />
+    <rule ref="category/java/errorprone.xml/AvoidInstanceofChecksInCatchClause" />
+    <rule ref="category/java/bestpractices.xml/AbstractClassWithoutAbstractMethod" />
+    <rule ref="category/java/design.xml/SimplifyConditional" />
+    <rule ref="category/java/multithreading.xml/NonThreadSafeSingleton" />
+    <rule ref="category/java/bestpractices.xml/PreserveStackTrace" />
+    <rule ref="category/java/bestpractices.xml/UseCollectionIsEmpty" />
+    <rule ref="category/java/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal" />
+    <rule ref="category/java/design.xml/SingularField" />
+    <rule ref="category/java/design.xml/AbstractClassWithoutAnyMethod" />
+
+    <rule ref="category/java/errorprone.xml/EmptyFinalizer" />
+    <rule ref="category/java/errorprone.xml/FinalizeOnlyCallsSuperFinalize" />
+    <rule ref="category/java/errorprone.xml/FinalizeOverloaded" />
+    <rule ref="category/java/errorprone.xml/FinalizeDoesNotCallSuperFinalize" />
+    <rule ref="category/java/errorprone.xml/FinalizeShouldBeProtected" />
+    <rule ref="category/java/errorprone.xml/AvoidCallingFinalize" />
+
+    <rule ref="category/java/codestyle.xml/TooManyStaticImports" />
+
+    <rule ref="category/java/errorprone.xml/MissingSerialVersionUID" />
+
+    <rule ref="category/java/errorprone.xml/MoreThanOneLogger" />
+    <rule ref="category/java/bestpractices.xml/SystemPrintln" />
+    <rule ref="category/java/bestpractices.xml/AvoidPrintStackTrace" />
+
+    <rule ref="category/java/codestyle.xml/LongVariable">
         <properties>
             <property name="minimum" value="30" />
         </properties>
     </rule>
-    <rule ref="rulesets/java/naming.xml/ShortMethodName" />
-    <rule ref="rulesets/java/naming.xml/MethodNamingConventions" />
-    <rule ref="rulesets/java/naming.xml/ClassNamingConventions" />
-    <rule ref="rulesets/java/naming.xml/AbstractNaming" />
-    <rule ref="rulesets/java/naming.xml/AvoidDollarSigns" />
-    <rule ref="rulesets/java/naming.xml/MethodWithSameNameAsEnclosingClass" />
-    <rule ref="rulesets/java/naming.xml/SuspiciousHashcodeMethodName" />
-    <rule ref="rulesets/java/naming.xml/SuspiciousConstantFieldName" />
-    <rule ref="rulesets/java/naming.xml/SuspiciousEqualsMethodName" />
-    <rule ref="rulesets/java/naming.xml/AvoidFieldNameMatchingTypeName" />
+    <rule ref="category/java/codestyle.xml/ShortMethodName" />
+    <rule ref="category/java/codestyle.xml/MethodNamingConventions" />
+    <rule ref="category/java/codestyle.xml/ClassNamingConventions" />
+    <rule ref="category/java/codestyle.xml/AvoidDollarSigns" />
+    <rule ref="category/java/errorprone.xml/MethodWithSameNameAsEnclosingClass" />
+    <rule ref="category/java/errorprone.xml/SuspiciousHashcodeMethodName" />
+    <rule ref="category/java/errorprone.xml/SuspiciousEqualsMethodName" />
+    <rule ref="category/java/errorprone.xml/AvoidFieldNameMatchingTypeName" />
     <!--<rule ref="rulesets/java/naming.xml/AvoidFieldNameMatchingMethodName" />-->
-    <rule ref="rulesets/java/naming.xml/NoPackage" />
-    <rule ref="rulesets/java/naming.xml/PackageCase" />
-    <rule ref="rulesets/java/naming.xml/MisleadingVariableName" />
-    <rule ref="rulesets/java/naming.xml/BooleanGetMethodName" />
-
-    <rule ref="rulesets/java/optimizations.xml/LocalVariableCouldBeFinal" />
-    <rule ref="rulesets/java/optimizations.xml/MethodArgumentCouldBeFinal" />
-    <rule ref="rulesets/java/optimizations.xml/UseArrayListInsteadOfVector" />
-    <rule ref="rulesets/java/optimizations.xml/UseStringBufferForStringAppends" />
-    <rule ref="rulesets/java/optimizations.xml/UseArraysAsList" />
-    <rule ref="rulesets/java/optimizations.xml/AvoidArrayLoops" />
-    <rule ref="rulesets/java/optimizations.xml/UnnecessaryWrapperObjectCreation" />
-    <rule ref="rulesets/java/optimizations.xml/AddEmptyString" />
-
-    <rule ref="rulesets/java/strictexception.xml/AvoidCatchingThrowable" />
-    <rule ref="rulesets/java/strictexception.xml/SignatureDeclareThrowsException" />
-    <rule ref="rulesets/java/strictexception.xml/ExceptionAsFlowControl" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidCatchingNPE" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidThrowingRawExceptionTypes" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidThrowingNullPointerException" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidRethrowingException" />
-    <rule ref="rulesets/java/strictexception.xml/DoNotExtendJavaLangError" />
-    <rule ref="rulesets/java/strictexception.xml/DoNotThrowExceptionInFinally" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidThrowingNewInstanceOfSameException" />
-
-    <rule ref="rulesets/java/strings.xml/AvoidDuplicateLiterals" >
+    <rule ref="category/java/codestyle.xml/NoPackage" />
+    <rule ref="category/java/codestyle.xml/PackageCase" />
+    <rule ref="category/java/codestyle.xml/BooleanGetMethodName" />
+
+    <rule ref="category/java/codestyle.xml/LocalVariableCouldBeFinal" />
+    <rule ref="category/java/codestyle.xml/MethodArgumentCouldBeFinal" />
+    <rule ref="category/java/performance.xml/UseArrayListInsteadOfVector" />
+    <rule ref="category/java/performance.xml/UseStringBufferForStringAppends" />
+    <rule ref="category/java/performance.xml/UseArraysAsList" />
+    <rule ref="category/java/performance.xml/AvoidArrayLoops" />
+    <rule ref="category/java/performance.xml/AddEmptyString" />
+
+    <rule ref="category/java/errorprone.xml/AvoidCatchingThrowable" />
+    <rule ref="category/java/design.xml/SignatureDeclareThrowsException" />
+    <rule ref="category/java/design.xml/ExceptionAsFlowControl" />
+    <rule ref="category/java/errorprone.xml/AvoidCatchingNPE" />
+    <rule ref="category/java/design.xml/AvoidThrowingRawExceptionTypes" />
+    <rule ref="category/java/design.xml/AvoidThrowingNullPointerException" />
+    <rule ref="category/java/design.xml/AvoidRethrowingException" />
+    <rule ref="category/java/design.xml/DoNotExtendJavaLangError" />
+    <rule ref="category/java/errorprone.xml/DoNotThrowExceptionInFinally" />
+    <rule ref="category/java/design.xml/AvoidThrowingNewInstanceOfSameException" />
+
+    <rule ref="category/java/errorprone.xml/AvoidDuplicateLiterals" >
 		<properties>
 			<property name="skipAnnotations" value="true" />
 		</properties>
 	</rule>
-    <rule ref="rulesets/java/strings.xml/StringInstantiation" />
-    <rule ref="rulesets/java/strings.xml/StringToString" />
-    <rule ref="rulesets/java/strings.xml/InefficientStringBuffering" />
-    <rule ref="rulesets/java/strings.xml/UnnecessaryCaseChange" />
-    <rule ref="rulesets/java/strings.xml/UseStringBufferLength" />
-    <rule ref="rulesets/java/strings.xml/AppendCharacterWithChar" />
-    <rule ref="rulesets/java/strings.xml/ConsecutiveLiteralAppends" />
-    <rule ref="rulesets/java/strings.xml/UseIndexOfChar" />
-    <rule ref="rulesets/java/strings.xml/UselessStringValueOf" />
-    <rule ref="rulesets/java/strings.xml/StringBufferInstantiationWithChar" />
-    <rule ref="rulesets/java/strings.xml/UseEqualsToCompareStrings" />
-
-    <rule ref="rulesets/java/unusedcode.xml/UnusedPrivateField" />
-    <rule ref="rulesets/java/unusedcode.xml/UnusedLocalVariable" />
-    <rule ref="rulesets/java/unusedcode.xml/UnusedPrivateMethod" />
-    <rule ref="rulesets/java/unusedcode.xml/UnusedFormalParameter" />
+    <rule ref="category/java/performance.xml/StringInstantiation" />
+    <rule ref="category/java/performance.xml/StringToString" />
+    <rule ref="category/java/performance.xml/InefficientStringBuffering" />
+    <rule ref="category/java/errorprone.xml/UnnecessaryCaseChange" />
+    <rule ref="category/java/performance.xml/UseStringBufferLength" />
+    <rule ref="category/java/performance.xml/AppendCharacterWithChar" />
+    <rule ref="category/java/performance.xml/ConsecutiveLiteralAppends" />
+    <rule ref="category/java/performance.xml/UseIndexOfChar" />
+    <rule ref="category/java/performance.xml/UselessStringValueOf" />
+    <rule ref="category/java/errorprone.xml/StringBufferInstantiationWithChar" />
+    <rule ref="category/java/errorprone.xml/UseEqualsToCompareStrings" />
+
+    <rule ref="category/java/bestpractices.xml/UnusedPrivateField" />
+    <rule ref="category/java/bestpractices.xml/UnusedLocalVariable" />
+    <rule ref="category/java/bestpractices.xml/UnusedPrivateMethod" />
+    <rule ref="category/java/bestpractices.xml/UnusedFormalParameter" />
 
 </ruleset>
diff --git a/traffic_router/core/pom.xml b/traffic_router/core/pom.xml
index 8f3b728..208b171 100644
--- a/traffic_router/core/pom.xml
+++ b/traffic_router/core/pom.xml
@@ -86,7 +86,7 @@
 		<plugins>
 			<plugin>
 				<artifactId>maven-pmd-plugin</artifactId>
-				<version>3.6</version>
+				<version>3.14.0</version>
 				<executions>
 					<execution>
 						<id>PMD</id>
@@ -182,7 +182,7 @@
 				<artifactId>maven-surefire-plugin</artifactId>
 				<version>2.19.1</version>
 				<configuration>
-					<argLine>-XX:-UseSplitVerifier -Djava.library.path=${java.library.path}</argLine>
+					<argLine>-Djava.library.path=${java.library.path}</argLine>
 					<excludedGroups>org.apache.traffic_control.traffic_router.core.util.IntegrationTest,org.apache.traffic_control.traffic_router.core.util.ExternalTest</excludedGroups>
 				</configuration>
 			</plugin>
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/config/ConfigHandler.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/config/ConfigHandler.java
index d30f84d..2b6a697 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/config/ConfigHandler.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/config/ConfigHandler.java
@@ -71,7 +71,7 @@ import org.apache.traffic_control.traffic_router.core.loc.AnonymousIp;
 import org.apache.traffic_control.traffic_router.core.loc.AnonymousIpConfigUpdater;
 import org.apache.traffic_control.traffic_router.core.loc.AnonymousIpDatabaseUpdater;
 
-@SuppressWarnings("PMD.TooManyFields")
+@SuppressWarnings({"PMD.TooManyFields", "PMD.CyclomaticComplexity"})
 public class ConfigHandler {
 	private static final Logger LOGGER = Logger.getLogger(ConfigHandler.class);
 
@@ -592,7 +592,7 @@ public class ConfigHandler {
 				ds.setGeoRedirectFile(url.getFile());
 				//try select the ds by the redirect fake HTTPRequest
 				final DeliveryService rds = cacheRegister.getDeliveryService(req);
-				if (rds == null || rds.getId() != ds.getId()) {
+				if (rds == null || !Objects.equals(rds.getId(), ds.getId())) {
 					//the redirect url not belongs to this ds
 					ds.setGeoRedirectUrlType("NOT_DS_URL");
 					continue;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/DNSAccessEventBuilder.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/DNSAccessEventBuilder.java
index 11ccdc8..590b21e 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/DNSAccessEventBuilder.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/DNSAccessEventBuilder.java
@@ -122,12 +122,12 @@ public class DNSAccessEventBuilder {
                 .append(" rdtl=-")
                 .append(" rerr=\"")
                 .append(rerr)
-                .append("\"")
+                .append('"')
                 .append(" ttl=\"-\"")
                 .append(" ans=\"-\"")
                 .append(" svc=\"")
                 .append(dsID)
-                .append("\"")
+                .append('"')
                 .toString();
     }
 
@@ -145,12 +145,12 @@ public class DNSAccessEventBuilder {
                 .append(" rdtl=-")
                 .append(" rerr=\"")
                 .append(rerr)
-                .append("\"")
+                .append('"')
                 .append(" ttl=\"-\"")
                 .append(" ans=\"-\"")
                 .append(" svc=\"")
                 .append(dsID)
-                .append("\"").toString();
+                .append('"').toString();
     }
 
     private static String createQuery(final Record query) {
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServer.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServer.java
index 73f2242..4b9d574 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServer.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServer.java
@@ -39,7 +39,7 @@ import org.xbill.DNS.ClientSubnetOption;
 import org.apache.traffic_control.traffic_router.core.ds.DeliveryService;
 import org.apache.traffic_control.traffic_router.core.router.TrafficRouterManager;
 
-
+@SuppressWarnings("PMD.CyclomaticComplexity")
 public class NameServer {
 	private static final int MAX_SUPPORTED_EDNS_VERS = 0;
 	private static final int MAX_ITERATIONS = 6;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServerMain.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServerMain.java
index 48db476..f586662 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServerMain.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServerMain.java
@@ -90,8 +90,7 @@ public final class NameServerMain {
      * @param args
      */
     public static void main(final String[] args) {
-        try {
-            final ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("/dns-traffic-router.xml");
+        try (ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("/dns-traffic-router.xml")) {
             ctx.getBean("NameServerMain");
             LOGGER.info("PROCESS_SUCCEEDED");
         } catch (final Exception e) {
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/SignatureManager.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/SignatureManager.java
index db71f00..80c0ebb 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/SignatureManager.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/SignatureManager.java
@@ -50,7 +50,7 @@ import org.apache.traffic_control.traffic_router.core.dns.ZoneManager.ZoneCacheT
 import org.apache.traffic_control.traffic_router.core.util.TrafficOpsUtils;
 import org.apache.traffic_control.traffic_router.core.util.ProtectedFetcher;
 
-
+@SuppressWarnings("PMD.CyclomaticComplexity")
 public final class SignatureManager {
 	private static final Logger LOGGER = Logger.getLogger(SignatureManager.class);
 	private int expirationMultiplier;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneManager.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneManager.java
index 674b8cf..2611bda 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneManager.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneManager.java
@@ -95,6 +95,7 @@ import com.google.common.cache.RemovalNotification;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListenableFutureTask;
 
+@SuppressWarnings("PMD.CyclomaticComplexity")
 public class ZoneManager extends Resolver {
 	private static final Logger LOGGER = Logger.getLogger(ZoneManager.class);
 
@@ -115,7 +116,7 @@ public class ZoneManager extends Resolver {
 	private static Name topLevelDomain;
 	private static final String AAAA = "AAAA";
 
-	protected static enum ZoneCacheType {
+	protected enum ZoneCacheType {
 		DYNAMIC, STATIC
 	}
 
@@ -326,11 +327,11 @@ public class ZoneManager extends Resolver {
 			}
 
 			final File zoneFile = new File(getZoneDirectory(), zone.getOrigin().toString());
-			final FileWriter w = new FileWriter(zoneFile);
-			LOGGER.info("writing: " + zoneFile.getAbsolutePath());
-			IOUtils.write(zone.toMasterFile(), w);
-			w.flush();
-			w.close();
+			try (FileWriter w = new FileWriter(zoneFile)) {
+				LOGGER.info("writing: " + zoneFile.getAbsolutePath());
+				IOUtils.write(zone.toMasterFile(), w);
+				w.flush();
+			}
 		}
 	}
 
@@ -383,7 +384,7 @@ public class ZoneManager extends Resolver {
 			records = signatureManager.signZone(name, records, (SignedZoneKey) zoneKey);
 		}
 
-		final Zone zone = new Zone(name, records.toArray(new Record[records.size()]));
+		final Zone zone = new Zone(name, records.toArray(new Record[0]));
 
 		if (writeZone) {
 			writeZone(zone);
@@ -711,7 +712,7 @@ public class ZoneManager extends Resolver {
 							list.add(new CNAMERecord(name, DClass.IN, ttl, new Name(value)));
 							break;
 						case "TXT":
-							list.add(new TXTRecord(name, DClass.IN, ttl, new String(value)));
+							list.add(new TXTRecord(name, DClass.IN, ttl, value));
 							break;
 					}
 				} catch (JsonUtilsException ex) {
@@ -800,7 +801,7 @@ public class ZoneManager extends Resolver {
 	}
 
 	@SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.NPathComplexity"})
-	private static final Map<String, List<Record>> populateZoneMap(final Map<String, List<Record>> zoneMap,
+	private static Map<String, List<Record>> populateZoneMap(final Map<String, List<Record>> zoneMap,
 			final Map<String, DeliveryService> dsMap, final CacheRegister data) throws IOException {
 		final Map<String, List<Record>> superDomains = new HashMap<String, List<Record>>();
 
@@ -1025,7 +1026,7 @@ public class ZoneManager extends Resolver {
 					LOGGER.error(e, e);
 				}
 
-				return new Zone(staticZone.getOrigin(), records.toArray(new Record[records.size()]));
+				return new Zone(staticZone.getOrigin(), records.toArray(new Record[0]));
 			}
 		} catch (final IOException e) {
 			LOGGER.error(e.getMessage(), e);
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneUtils.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneUtils.java
index 3fc63c5..5d69ae2 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneUtils.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneUtils.java
@@ -75,11 +75,11 @@ public class ZoneUtils {
 	protected static String getAdminString(final JsonNode jo, final String key, final String d, final String domain) {
 
 		if (jo == null) {
-			return new StringBuffer(d).append(".").append(domain).toString();
+			return new StringBuffer(d).append('.').append(domain).toString();
 		}
 
 		if (!jo.has(key)) {
-			return new StringBuffer(d).append(".").append(domain).toString();
+			return new StringBuffer(d).append('.').append(domain).toString();
 		}
 
 		// check for @ sign in string
@@ -87,7 +87,7 @@ public class ZoneUtils {
 		if (admin.contains("@")) {
 			admin = admin.replace("@",".");
 		} else {
-			admin = new StringBuffer(admin).append(".").append(domain).toString();
+			admin = new StringBuffer(admin).append('.').append(domain).toString();
 		}
 
 		return admin;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/Protocol.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/Protocol.java
index a9c325c..ed44b2c 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/Protocol.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/Protocol.java
@@ -19,5 +19,5 @@ public interface Protocol extends Runnable {
     /**
      * Shuts down the protocol canceling all pending and running requests.
      */
-    public void shutdown();
+    void shutdown();
 }
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/SocketHandler.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/SocketHandler.java
index b2f93dc..9f43ede 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/SocketHandler.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/SocketHandler.java
@@ -19,10 +19,10 @@ public interface SocketHandler extends Runnable {
     /**
      * Cleanup method for implementing classes that must also implement Runnable.run().
      */
-    public void cleanup();
+    void cleanup();
 
     /**
      * Cancel method for implementing classes that must also implement Runnable.run().
      */
-    public void cancel();
+    void cancel();
 }
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/TCP.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/TCP.java
index 2871833..9e21532 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/TCP.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/TCP.java
@@ -46,9 +46,9 @@ public class TCP extends AbstractProtocol {
     @Override
     public void run() {
         while (!isShutdownRequested()) {
+            final TCPSocketHandler handler;
             try {
-                final Socket socket = getServerSocket().accept();
-                final TCPSocketHandler handler = new TCPSocketHandler(socket);
+                handler = new TCPSocketHandler(getServerSocket().accept());
                 submit(handler);
             } catch (final IOException e) {
 				LOGGER.warn("error: " + e);
@@ -95,13 +95,13 @@ public class TCP extends AbstractProtocol {
                 return;
             }
 
-            try {
+            try (InputStream iis = Channels.newInputStream(Channels.newChannel(socket.getInputStream()));
+                 DataInputStream is = new DataInputStream(iis);
+                 DataOutputStream os = new DataOutputStream(socket.getOutputStream())
+            ) {
                 socket.setSoTimeout(getReadTimeout());
                 final InetAddress client = socket.getInetAddress();
 
-                final InputStream iis = Channels.newInputStream(Channels.newChannel(socket.getInputStream()));
-                final DataInputStream is = new DataInputStream(iis);
-                final DataOutputStream os = new DataOutputStream(socket.getOutputStream());
                 final int length = is.readUnsignedShort();
                 final byte[] request = new byte[length];
                 is.readFully(request);
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/DeliveryService.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/DeliveryService.java
index b9f6648..1a88c46 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/DeliveryService.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/DeliveryService.java
@@ -145,48 +145,16 @@ public class DeliveryService {
 		this.shouldAppendQueryString = JsonUtils.optBoolean(dsJo, "appendQueryString", true);
 		this.ecsEnabled = JsonUtils.optBoolean(dsJo, "ecsEnabled");
 
-		if (dsJo.has("topology")) {
-			this.topology = JsonUtils.optString(dsJo, "topology");
-		}
+		initTopology(dsJo);
 		this.requiredCapabilities = new HashSet<>();
-		if (dsJo.has("requiredCapabilities")) {
-			final JsonNode requiredCapabilitiesNode = dsJo.get("requiredCapabilities");
-			if (!requiredCapabilitiesNode.isArray()) {
-				LOGGER.error("Delivery Service '" + id + "' has malformed requiredCapabilities. Disregarding.");
-			} else {
-				requiredCapabilitiesNode.forEach((requiredCapabilityNode) -> {
-					final String requiredCapability = requiredCapabilityNode.asText();
-					if (!requiredCapability.isEmpty()) {
-						this.requiredCapabilities.add(requiredCapability);
-					}
-				});
-			}
-		}
+		initRequiredCapabilities(dsJo);
 
-		this.consistentHashQueryParams = new HashSet<String>();
-		if (dsJo.has("consistentHashQueryParams")) {
-			final JsonNode cqpNode = dsJo.get("consistentHashQueryParams");
-			if (!cqpNode.isArray()) {
-				LOGGER.error("Delivery Service '" + id + "' has malformed consistentHashQueryParams. Disregarding.");
-			} else {
-				for (final JsonNode n : cqpNode) {
-					final String s = n.asText();
-					if (!s.isEmpty()) {
-						this.consistentHashQueryParams.add(s);
-					}
-				}
-			}
-		}
+		this.consistentHashQueryParams = new HashSet<>();
+		initConsistentHashQueryParams(dsJo);
 
 		// missLocation: {lat: , long: }
 		final JsonNode mlJo = dsJo.get("missLocation");
-		if(mlJo != null) {
-			final double lat = JsonUtils.optDouble(mlJo, "lat");
-			final double longitude = JsonUtils.optDouble(mlJo, "long");
-			missLocation = new Geolocation(lat, longitude);
-		} else {
-			missLocation = null;
-		}
+		missLocation = initMissLocation(mlJo);
 
 		this.dispersion = new Dispersion(dsJo);
 		this.ip6RoutingEnabled = JsonUtils.optBoolean(dsJo, "ip6RoutingEnabled");
@@ -218,6 +186,54 @@ public class DeliveryService {
 		}
 	}
 
+	private void initRequiredCapabilities(final JsonNode dsJo) {
+		if (dsJo.has("requiredCapabilities")) {
+			final JsonNode requiredCapabilitiesNode = dsJo.get("requiredCapabilities");
+			if (!requiredCapabilitiesNode.isArray()) {
+				LOGGER.error("Delivery Service '" + id + "' has malformed requiredCapabilities. Disregarding.");
+			} else {
+				requiredCapabilitiesNode.forEach((requiredCapabilityNode) -> {
+					final String requiredCapability = requiredCapabilityNode.asText();
+					if (!requiredCapability.isEmpty()) {
+						this.requiredCapabilities.add(requiredCapability);
+					}
+				});
+			}
+		}
+	}
+
+	private void initConsistentHashQueryParams(final JsonNode dsJo) {
+		if (dsJo.has("consistentHashQueryParams")) {
+			final JsonNode cqpNode = dsJo.get("consistentHashQueryParams");
+			if (!cqpNode.isArray()) {
+				LOGGER.error("Delivery Service '" + id + "' has malformed consistentHashQueryParams. Disregarding.");
+			} else {
+				for (final JsonNode n : cqpNode) {
+					final String s = n.asText();
+					if (!s.isEmpty()) {
+						this.consistentHashQueryParams.add(s);
+					}
+				}
+			}
+		}
+	}
+
+	private void initTopology(final JsonNode dsJo) {
+		if (dsJo.has("topology")) {
+			this.topology = JsonUtils.optString(dsJo, "topology");
+		}
+	}
+
+	private Geolocation initMissLocation(final JsonNode mlJo) {
+		if(mlJo != null) {
+			final double lat = JsonUtils.optDouble(mlJo, "lat");
+			final double longitude = JsonUtils.optDouble(mlJo, "long");
+			return new Geolocation(lat, longitude);
+		} else {
+			return null;
+		}
+	}
+
 	private String getDomainFromJson(final JsonNode domains) {
 		if (domains == null) {
 			return null;
@@ -530,8 +546,8 @@ public class DeliveryService {
 	}
 
 	private String getEncryptedTrans(final TransInfoType type, final byte[] ipBytes) throws IOException, GeneralSecurityException {
-		try (final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-		     final DataOutputStream dos = new DataOutputStream(baos)) {
+		try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		     DataOutputStream dos = new DataOutputStream(baos)) {
 
 			dos.write(ipBytes);
 
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/LetsEncryptDnsChallengeWatcher.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/LetsEncryptDnsChallengeWatcher.java
index 5ebc89c..11953cc 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/LetsEncryptDnsChallengeWatcher.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/LetsEncryptDnsChallengeWatcher.java
@@ -128,9 +128,9 @@ public class LetsEncryptDnsChallengeWatcher extends AbstractResourceWatcher {
     }
 
     private String readConfigFile() {
-        try {
-            final InputStream is = new FileInputStream(databasesDirectory.resolve(configFile).toString());
-            final BufferedReader buf = new BufferedReader(new InputStreamReader(is));
+        try (InputStream is = new FileInputStream(databasesDirectory.resolve(configFile).toString());
+             BufferedReader buf = new BufferedReader(new InputStreamReader(is))
+        ) {
             String line = buf.readLine();
             final StringBuilder sb = new StringBuilder();
             while (line != null) {
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/Steering.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/Steering.java
index 34f519f..38da78f 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/Steering.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/Steering.java
@@ -99,7 +99,6 @@ public class Steering {
 	}
 
 	@Override
-	@SuppressWarnings("PMD")
 	public int hashCode() {
 		int result = deliveryService != null ? deliveryService.hashCode() : 0;
 		result = 31 * result + (targets != null ? targets.hashCode() : 0);
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringFilter.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringFilter.java
index 539d333..dc57b0b 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringFilter.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringFilter.java
@@ -49,12 +49,11 @@ public class SteeringFilter {
 	}
 
 	@Override
-	@SuppressWarnings("PMD")
-	public boolean equals(Object o) {
+	public boolean equals(final Object o) {
 		if (this == o) return true;
 		if (o == null || getClass() != o.getClass()) return false;
 
-		SteeringFilter that = (SteeringFilter) o;
+		final SteeringFilter that = (SteeringFilter) o;
 
 		if (pattern != null ? !pattern.equals(that.pattern) : that.pattern != null) return false;
 		return deliveryService != null ? deliveryService.equals(that.deliveryService) : that.deliveryService == null;
@@ -62,7 +61,6 @@ public class SteeringFilter {
 	}
 
 	@Override
-	@SuppressWarnings("PMD")
 	public int hashCode() {
 		int result = pattern != null ? pattern.hashCode() : 0;
 		result = 31 * result + (deliveryService != null ? deliveryService.hashCode() : 0);
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringTarget.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringTarget.java
index 5c1bb92..532d5cc 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringTarget.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringTarget.java
@@ -15,9 +15,11 @@
 
 package org.apache.traffic_control.traffic_router.core.ds;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
 import org.apache.traffic_control.traffic_router.core.hash.DefaultHashable;
 import org.apache.traffic_control.traffic_router.geolocation.Geolocation;
-import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.Objects;
 
 public class SteeringTarget extends DefaultHashable {
 
@@ -106,19 +108,18 @@ public class SteeringTarget extends DefaultHashable {
 	}
 
 	@Override
-	@SuppressWarnings("PMD")
-	public boolean equals(Object o) {
+	public boolean equals(final Object o) {
 		if (this == o) return true;
 		if (o == null || getClass() != o.getClass()) return false;
 
-		SteeringTarget target = (SteeringTarget) o;
+		final SteeringTarget target = (SteeringTarget) o;
 
-		if (weight != target.weight) return false;
-		if (order != target.order) return false;
-		if (geoOrder != target.geoOrder) return false;
-		if (latitude != target.latitude) return false;
-		if (longitude != target.longitude) return false;
-		return deliveryService != null ? deliveryService.equals(target.deliveryService) : target.deliveryService == null;
+		if (weight != target.weight ||
+				order != target.order ||
+				geoOrder != target.geoOrder ||
+				latitude != target.latitude ||
+				longitude != target.longitude) return false;
+		return Objects.equals(deliveryService, target.deliveryService);
 
 	}
 
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/hash/NumberSearcher.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/hash/NumberSearcher.java
index 198740c..2686799 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/hash/NumberSearcher.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/hash/NumberSearcher.java
@@ -17,6 +17,7 @@ package org.apache.traffic_control.traffic_router.core.hash;
 
 import java.util.Arrays;
 
+@SuppressWarnings("PMD.ClassNamingConventions")
 public class NumberSearcher {
 	public static int findClosest(final Double[] numbers, final double target) {
 		final int index = Arrays.binarySearch(numbers, target);
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/http/HTTPAccessEventBuilder.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/http/HTTPAccessEventBuilder.java
index c831161..cb2f81f 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/http/HTTPAccessEventBuilder.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/http/HTTPAccessEventBuilder.java
@@ -23,6 +23,7 @@ import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.util.Map;
 
+@SuppressWarnings("PMD.ClassNamingConventions")
 public class HTTPAccessEventBuilder {
     private static String formatRequest(final HttpServletRequest request) {
         String url = formatObject(request.getRequestURL());
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AbstractServiceUpdater.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AbstractServiceUpdater.java
index 797774e..639ec52 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AbstractServiceUpdater.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AbstractServiceUpdater.java
@@ -361,24 +361,19 @@ public abstract class AbstractServiceUpdater {
 			}
 		}
 
-		InputStream in = conn.getInputStream();
-		eTag = conn.getHeaderField("ETag");
-
-		if (conn.getResponseCode() == HttpURLConnection.HTTP_NOT_MODIFIED) {
-			LOGGER.info("[" + getClass().getSimpleName() + "] " + url + " not modified since our existing database's last update time of " + new Date(existingDb.lastModified()));
-			return existingDb;
-		}
-
-		if (sourceCompressed) {
-			in = new GZIPInputStream(in);
-		}
-
 		final File outputFile = File.createTempFile(tmpPrefix, tmpSuffix);
-		final OutputStream out = new FileOutputStream(outputFile);
+		try (InputStream in = conn.getInputStream();
+			 OutputStream out = new FileOutputStream(outputFile)
+		) {
+			eTag = conn.getHeaderField("ETag");
+
+			if (conn.getResponseCode() == HttpURLConnection.HTTP_NOT_MODIFIED) {
+				LOGGER.info("[" + getClass().getSimpleName() + "] " + url + " not modified since our existing database's last update time of " + new Date(existingDb.lastModified()));
+				return existingDb;
+			}
 
-		IOUtils.copy(in, out);
-		IOUtils.closeQuietly(in);
-		IOUtils.closeQuietly(out);
+			IOUtils.copy(sourceCompressed ? new GZIPInputStream(in) : in, out);
+		}
 
 		return outputFile;
 	}
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpDatabaseService.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpDatabaseService.java
index 3237b3d..378c295 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpDatabaseService.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpDatabaseService.java
@@ -41,9 +41,8 @@ public class AnonymousIpDatabaseService {
 		}
 
 		if (databaseFile != null) {
-			final DatabaseReader reader = createDatabaseReader(databaseFile);
-			if (reader != null) {
-				databaseReader = reader;
+			databaseReader = createDatabaseReader(databaseFile);
+			if (databaseReader != null) {
 				initialized = true;
 			} else {
 				throw new IOException("Could not create database reader");
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpWhitelist.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpWhitelist.java
index 206469d..ed590f9 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpWhitelist.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpWhitelist.java
@@ -18,6 +18,8 @@ import org.apache.log4j.Logger;
 import org.apache.traffic_control.traffic_router.core.util.JsonUtilsException;
 import com.fasterxml.jackson.databind.JsonNode;
 
+import java.util.Objects;
+
 public class AnonymousIpWhitelist {
 	private static final Logger LOGGER = Logger.getLogger(AnonymousIpWhitelist.class);
 
@@ -52,7 +54,7 @@ public class AnonymousIpWhitelist {
 
 		try {
 			final NetworkNode nn = whitelist.getNetwork(address);
-			if (nn.getLoc() == AnonymousIp.WHITE_LIST_LOC) {
+			if (Objects.equals(nn.getLoc(), AnonymousIp.WHITE_LIST_LOC)) {
 				return true;
 			}
 		} catch (NetworkNodeException e) {
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/MaxmindGeolocationService.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/MaxmindGeolocationService.java
index d17dc01..27c19d2 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/MaxmindGeolocationService.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/MaxmindGeolocationService.java
@@ -68,9 +68,8 @@ public class MaxmindGeolocationService implements GeolocationService {
 		}
 
 		if (databaseFile != null) {
-			final DatabaseReader reader = createDatabaseReader(databaseFile);
-			if (reader != null) {
-				databaseReader = reader;
+			databaseReader = createDatabaseReader(databaseFile);
+			if (databaseReader != null) {
 				initialized = true;
 			}
 		}
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoResult.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoResult.java
index 96d390d..0fe88bb 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoResult.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoResult.java
@@ -17,7 +17,7 @@ package org.apache.traffic_control.traffic_router.core.loc;
 
 
 public class RegionalGeoResult {
-    public static enum RegionalGeoResultType {
+    public enum RegionalGeoResultType {
         ALLOWED, ALTERNATE_WITH_CACHE, ALTERNATE_WITHOUT_CACHE, DENIED
     }
 
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoRule.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoRule.java
index 053a4ea..2d45ad3 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoRule.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoRule.java
@@ -18,6 +18,7 @@ package org.apache.traffic_control.traffic_router.core.loc;
 import org.apache.log4j.Logger;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 import java.util.regex.Pattern;
 
@@ -27,7 +28,7 @@ public class RegionalGeoRule {
 
     public static final String WHITE_LIST_NODE_LOCATION = "w";
 
-    public static enum PostalsType {
+    public enum PostalsType {
         EXCLUDE, INCLUDE, UNDEFINED
     }
 
@@ -98,7 +99,7 @@ public class RegionalGeoRule {
 
         try {
             final NetworkNode nn = whiteListRoot.getNetwork(ip);
-            if (nn.getLoc() == WHITE_LIST_NODE_LOCATION) {
+            if (Objects.equals(nn.getLoc(), WHITE_LIST_NODE_LOCATION)) {
                 return true;
             }
         } catch (NetworkNodeException e) {
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/monitor/TrafficMonitorWatcher.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/monitor/TrafficMonitorWatcher.java
index 42373c0..388f79e 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/monitor/TrafficMonitorWatcher.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/monitor/TrafficMonitorWatcher.java
@@ -317,7 +317,7 @@ public class TrafficMonitorWatcher implements ApplicationListener<ApplicationCon
 			} else if (!isLocalConfig() && isBootstrapped()) {
 				synchronized(monitorSync) {
 					if (!onlineMonitors.isEmpty()) {
-						setHosts(onlineMonitors.toArray(new String[onlineMonitors.size()]));
+						setHosts(onlineMonitors.toArray(new String[0]));
 					}
 				}
 			}
@@ -369,7 +369,7 @@ public class TrafficMonitorWatcher implements ApplicationListener<ApplicationCon
 
 			TrafficMonitorWatcher.onlineMonitors = onlineMonitors;
 			setBootstrapped(true);
-			setHosts(onlineMonitors.toArray(new String[onlineMonitors.size()]));
+			setHosts(onlineMonitors.toArray(new String[0]));
 		}
 	}
 
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/RouteResult.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/RouteResult.java
index 0e25f13..d7e85dc 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/RouteResult.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/RouteResult.java
@@ -16,5 +16,5 @@
 package org.apache.traffic_control.traffic_router.core.router;
 
 public interface RouteResult {
-	public Object getResult();
+	Object getResult();
 }
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/StatTracker.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/StatTracker.java
index d93f62a..610a007 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/StatTracker.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/StatTracker.java
@@ -113,7 +113,7 @@ public class StatTracker {
 		/**
 		 * RouteType represents the type of routing performed/to be performed by Traffic Router.
 		 */
-		public static enum RouteType {
+		public enum RouteType {
 			/**
 			 * This value indicates DNS routing is taking/has taken/will take place.
 			 */
@@ -127,7 +127,7 @@ public class StatTracker {
 		/**
 		 * ResultType represents the final result of attempting to route a request.
 		 */
-		public static enum ResultType {
+		public enum ResultType {
 			/**
 			 * This value indicates that an error occurred and routing could not be successfully completed.
 			 */
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/TrafficRouter.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/TrafficRouter.java
index 79b0a8d..a60b69e 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/TrafficRouter.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/TrafficRouter.java
@@ -86,7 +86,7 @@ import java.util.stream.Collectors;
 /**
  * TrafficRouter is the main router class that handles Traffic Router logic.
  */
-@SuppressWarnings({"PMD.TooManyFields", "PMD.ExcessivePublicCount"})
+@SuppressWarnings({"PMD.TooManyFields", "PMD.ExcessivePublicCount", "PMD.CyclomaticComplexity"})
 public class TrafficRouter {
 	public static final Logger LOGGER = Logger.getLogger(TrafficRouter.class);
 
@@ -351,7 +351,7 @@ public class TrafficRouter {
 			if (deliveryServiceId != null && !deliveryServiceId.isEmpty()) {
 				error = error.append(" for delivery service " + deliveryServiceId);
 			}
-			error = error.append(" falling back to " + MaxmindGeolocationService.class.getSimpleName());
+			error = error.append(" falling back to ").append(MaxmindGeolocationService.class.getSimpleName());
 			LOGGER.error(error);
 		}
 
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesClient.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesClient.java
index f8ae18c..f4c0ec2 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesClient.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesClient.java
@@ -124,7 +124,7 @@ public class CertificatesClient {
 			}
 		}
 
-		return encodedPemItems.toArray(new String[encodedPemItems.size()]);
+		return encodedPemItems.toArray(new String[0]);
 	}
 
 	public void setTrafficOpsUtils(final TrafficOpsUtils trafficOpsUtils) {
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesPoller.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesPoller.java
index 29cb3c2..c6320dd 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesPoller.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesPoller.java
@@ -73,7 +73,7 @@ public class CertificatesPoller implements ConfigurationListener {
 		final Runnable runnable = () -> {
 			try {
 				trafficRouterManager.trackEvent("lastHttpsCertificatesCheck");
-				List<CertificateData> certificateDataList = certificatesClient.refreshData();
+				final List<CertificateData> certificateDataList = certificatesClient.refreshData();
 				if (certificateDataList == null) {
 					return;
 				}
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/AbstractResourceWatcher.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/AbstractResourceWatcher.java
index 07d4190..8608267 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/AbstractResourceWatcher.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/AbstractResourceWatcher.java
@@ -35,7 +35,7 @@ public abstract class AbstractResourceWatcher extends AbstractServiceUpdater {
 	protected TrafficOpsUtils trafficOpsUtils;
 	private int timeout = 15000;
 
-	@SuppressWarnings("PMD")
+	@SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.NPathComplexity"})
 	public void configure(final JsonNode config) {
 		URL authUrl;
 		String credentials;
@@ -151,13 +151,12 @@ public abstract class AbstractResourceWatcher extends AbstractServiceUpdater {
 		}
 
 		File databaseFile = null;
-		FileWriter fw;
 		try {
 			databaseFile = File.createTempFile(tmpPrefix, tmpSuffix);
-			fw = new FileWriter(databaseFile);
-			fw.write(jsonData);
-			fw.flush();
-			fw.close();
+			try (FileWriter fw = new FileWriter(databaseFile)) {
+				fw.write(jsonData);
+				fw.flush();
+			}
 		}
 		catch (IOException e) {
 			LOGGER.warn("Failed to create file from data received from '" + interpolatedUrl + "'");
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/CidrAddress.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/CidrAddress.java
index 91bdc19..fdc43dc 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/CidrAddress.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/CidrAddress.java
@@ -59,6 +59,7 @@ public class CidrAddress implements Comparable<CidrAddress> {
         this(address, address.getAddress().length * 8);
     }
 
+    @SuppressWarnings("PMD.CyclomaticComplexity")
     public CidrAddress(final InetAddress address, final int netmaskLength) throws NetworkNodeException {
         this.netmaskLength = netmaskLength;
         this.address = address;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/ComparableTreeSet.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/ComparableTreeSet.java
index a444b74..6aafe5e 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/ComparableTreeSet.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/ComparableTreeSet.java
@@ -18,6 +18,7 @@ package org.apache.traffic_control.traffic_router.core.util;
 import java.util.TreeSet;
 
 public class ComparableTreeSet<E> extends TreeSet<E> implements Comparable<ComparableTreeSet<E>> {
+    private static final long serialVersionUID = 1L;
 
     @Override
     public int compareTo(final ComparableTreeSet<E> o) {
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/Config.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/Config.java
index b751212..ae2922b 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/Config.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/Config.java
@@ -17,6 +17,7 @@ package org.apache.traffic_control.traffic_router.core.util;
 
 import java.io.File;
 
+@SuppressWarnings("PMD.ClassNamingConventions")
 public class Config {
 
 	private static String confDir = null;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/DataExporter.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/DataExporter.java
index 8016518..fa387c6 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/DataExporter.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/DataExporter.java
@@ -74,7 +74,7 @@ public class DataExporter {
 
 		final Properties props = new Properties();
 
-		try (final InputStream stream = getClass().getResourceAsStream("/version.prop")){
+		try (InputStream stream = getClass().getResourceAsStream("/version.prop")){
 			props.load(stream);
 		} catch (IOException e) {
 			LOGGER.warn(e,e);
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/Fetcher.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/Fetcher.java
index d91b372..2432320 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/Fetcher.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/Fetcher.java
@@ -36,7 +36,6 @@ import javax.net.ssl.SSLSession;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.log4j.Logger;
 
 
@@ -127,7 +126,7 @@ public class Fetcher {
 			if (method.equals(POST_STR) && data != null) {
 				http.setDoOutput(true); // Triggers POST.
 
-				try (final OutputStream output = http.getOutputStream()) {
+				try (OutputStream output = http.getOutputStream()) {
 					output.write(data.getBytes(UTF8_STR));
 				}
 			}
@@ -151,55 +150,44 @@ public class Fetcher {
 	}
 
 	private String fetchIfModifiedSince(final String url, final String data, final String method, final long lastFetchTime) throws IOException {
-		final OutputStream out = null;
 		String ifModifiedSince = null;
-		try {
-			final HttpURLConnection connection = getConnection(url, data, method, lastFetchTime);
-			if (connection != null) {
-				if (connection.getResponseCode() == HttpURLConnection.HTTP_NOT_MODIFIED) {
-					return null;
-				}
-
-				if (connection.getResponseCode() > 399) {
-					LOGGER.warn("Failed Http Request to " + url + " Status " + connection.getResponseCode());
-					return null;
-				}
+		final HttpURLConnection connection = getConnection(url, data, method, lastFetchTime);
+		if (connection != null) {
+			if (connection.getResponseCode() == HttpURLConnection.HTTP_NOT_MODIFIED) {
+				return null;
+			}
 
-				final StringBuilder sb = new StringBuilder();
-				createStringBuilderFromResponse(sb, connection);
-				ifModifiedSince = sb.toString();
+			if (connection.getResponseCode() > 399) {
+				LOGGER.warn("Failed Http Request to " + url + " Status " + connection.getResponseCode());
+				return null;
 			}
 
-		} finally {
-			IOUtils.closeQuietly(out);
+			final StringBuilder sb = new StringBuilder();
+			createStringBuilderFromResponse(sb, connection);
+			ifModifiedSince = sb.toString();
 		}
 		return ifModifiedSince;
 	}
 
 	public int getIfModifiedSince(final String url, final long lastFetchTime, final StringBuilder stringBuilder) throws IOException {
-		final OutputStream out = null;
 		int status = 0;
-		try {
-			final HttpURLConnection connection = getConnection(url, null, "GET", lastFetchTime);
-			if (connection != null) {
-				status = connection.getResponseCode();
+		final HttpURLConnection connection = getConnection(url, null, "GET", lastFetchTime);
+		if (connection != null) {
+			status = connection.getResponseCode();
 
-				if (status == HttpURLConnection.HTTP_NOT_MODIFIED) {
-					return status;
-				}
+			if (status == HttpURLConnection.HTTP_NOT_MODIFIED) {
+				return status;
+			}
 
-				if (connection.getResponseCode() > 399) {
-					LOGGER.warn("Failed Http Request to " + url + " Status " + connection.getResponseCode());
-					return status;
-				}
+			if (connection.getResponseCode() > 399) {
+				LOGGER.warn("Failed Http Request to " + url + " Status " + connection.getResponseCode());
+				return status;
+			}
 
-				createStringBuilderFromResponse(stringBuilder, connection);
+			createStringBuilderFromResponse(stringBuilder, connection);
 
-			}
-			return status;
-		} finally {
-			IOUtils.closeQuietly(out);
 		}
+		return status;
 	}
 
 	public String fetch(final String url, final String data, final String method) throws IOException {
@@ -228,14 +216,15 @@ public class Fetcher {
 
 	public void createStringBuilderFromResponse (final StringBuilder sb, final HttpURLConnection connection) throws IOException {
 		if (GZIP_ENCODING_STRING.equals(connection.getContentEncoding())) {
-			final GZIPInputStream zippedInputStream =  new GZIPInputStream(connection.getInputStream());
-			final BufferedReader r = new BufferedReader(new InputStreamReader(zippedInputStream));
-			String input;
-			while((input = r.readLine()) != null) {
-				sb.append(input);
+			try (GZIPInputStream zippedInputStream =  new GZIPInputStream(connection.getInputStream());
+				 BufferedReader r = new BufferedReader(new InputStreamReader(zippedInputStream))) {
+				String input;
+				while ((input = r.readLine()) != null) {
+					sb.append(input);
+				}
 			}
 		} else {
-			try (final BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
+			try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
 				String input;
 
 				while ((input = in.readLine()) != null) {
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/JsonUtilsException.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/JsonUtilsException.java
index 903ceea..31f56ad 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/JsonUtilsException.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/JsonUtilsException.java
@@ -16,6 +16,7 @@
 package org.apache.traffic_control.traffic_router.core.util;
 
 public class JsonUtilsException extends Exception {
+    private static final long serialVersionUID = 1L;
 
     public JsonUtilsException(final String reason) {
         super(reason);
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/PeriodicResourceUpdater.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/PeriodicResourceUpdater.java
index 0b490c9..db89bf3 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/PeriodicResourceUpdater.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/PeriodicResourceUpdater.java
@@ -237,9 +237,9 @@ public class PeriodicResourceUpdater {
 	}
 
 	protected synchronized void copyDatabase(final File existingDB, final String newDB) throws IOException {
-		try (final StringReader in = new StringReader(newDB);
-			final FileOutputStream out = new FileOutputStream(existingDB);
-			final FileLock lock = out.getChannel().tryLock()) {
+		try (StringReader in = new StringReader(newDB);
+			FileOutputStream out = new FileOutputStream(existingDB);
+			FileLock lock = out.getChannel().tryLock()) {
 
 			if (lock == null) {
 				LOGGER.error("Database " + existingDB.getAbsolutePath() + " locked by another process.");
@@ -281,11 +281,12 @@ public class PeriodicResourceUpdater {
 			final String responseBody;
 			if (GZIP_ENCODING_STRING.equals(response.getHeader("Content-Encoding"))) {
 				final StringBuilder stringBuilder = new StringBuilder();
-				final GZIPInputStream zippedInputStream =  new GZIPInputStream(response.getResponseBodyAsStream());
-				final BufferedReader r = new BufferedReader(new InputStreamReader(zippedInputStream));
-				String line;
-				while((line = r.readLine()) != null) {
-					stringBuilder.append(line);
+				try (GZIPInputStream zippedInputStream =  new GZIPInputStream(response.getResponseBodyAsStream());
+					 BufferedReader r = new BufferedReader(new InputStreamReader(zippedInputStream))) {
+					String line;
+					while ((line = r.readLine()) != null) {
+						stringBuilder.append(line);
+					}
 				}
 				responseBody = stringBuilder.toString();
 			} else {
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/ResourceUrl.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/ResourceUrl.java
index dd88b4d..5315d29 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/ResourceUrl.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/ResourceUrl.java
@@ -16,5 +16,5 @@
 package org.apache.traffic_control.traffic_router.core.util;
 
 public interface ResourceUrl {
-	public String nextUrl();
+	String nextUrl();
 }
diff --git a/traffic_router/core/src/main/lib/systemd/system/traffic_router.service b/traffic_router/core/src/main/lib/systemd/system/traffic_router.service
index 2b26ca4..de5ebf1 100644
--- a/traffic_router/core/src/main/lib/systemd/system/traffic_router.service
+++ b/traffic_router/core/src/main/lib/systemd/system/traffic_router.service
@@ -19,7 +19,7 @@ After=syslog.target network.target
 [Service]
 Type=forking
 
-Environment=JAVA_HOME=/usr/lib/jvm/jre
+Environment=JAVA_HOME=/usr/lib/jvm/jre-11-openjdk
 Environment=CATALINA_PID=/opt/traffic_router/temp/tomcat.pid
 Environment=CATALINA_HOME=/opt/tomcat
 Environment=CATALINA_BASE=/opt/traffic_router
diff --git a/traffic_router/neustar/pom.xml b/traffic_router/neustar/pom.xml
index 9465dd2..52d8a71 100644
--- a/traffic_router/neustar/pom.xml
+++ b/traffic_router/neustar/pom.xml
@@ -90,9 +90,6 @@ under the License.
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-surefire-plugin</artifactId>
 				<version>2.10</version>
-				<configuration>
-					<argLine>-XX:-UseSplitVerifier</argLine>
-				</configuration>
 			</plugin>
 		</plugins>
 	</build>
diff --git a/traffic_router/pom.xml b/traffic_router/pom.xml
index 8c2eb72..476e4c9c 100644
--- a/traffic_router/pom.xml
+++ b/traffic_router/pom.xml
@@ -40,7 +40,7 @@
 		<commons-lang3.version>3.3.2</commons-lang3.version>
 		<commons-compress.version>1.9</commons-compress.version>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<java.version>1.8</java.version>
+		<java.version>11</java.version>
 	</properties>
 
 	<scm>
diff --git a/traffic_router/shared/build/pmd/ruleset.xml b/traffic_router/shared/build/pmd/ruleset.xml
index 807dc0f..48b269f 100644
--- a/traffic_router/shared/build/pmd/ruleset.xml
+++ b/traffic_router/shared/build/pmd/ruleset.xml
@@ -13,195 +13,170 @@
      See the License for the specific language governing permissions and
      limitations under the License.
  -->
-<ruleset name="Overpass PMD Ruleset" xmlns="http://pmd.sf.net/ruleset/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<ruleset name="Overpass PMD Ruleset" xmlns="http://pmd.sf.net/ruleset/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
     xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
     <description>Overpass PMD Ruleset</description>
 
     <exclude-pattern>.*/src/test/.*</exclude-pattern>
 
-	<rule ref="rulesets/java/empty.xml/EmptyCatchBlock" />
-	<rule ref="rulesets/java/empty.xml/EmptyIfStmt" />
-	<rule ref="rulesets/java/empty.xml/EmptyWhileStmt" />
-	<rule ref="rulesets/java/empty.xml/EmptyTryBlock" />
-	<rule ref="rulesets/java/empty.xml/EmptyFinallyBlock" />
-	<rule ref="rulesets/java/empty.xml/EmptySwitchStatements" />
-	<rule ref="rulesets/java/basic.xml/JumbledIncrementer" />
-	<rule ref="rulesets/java/basic.xml/ForLoopShouldBeWhileLoop" />
-	<rule ref="rulesets/java/unnecessary.xml/UnnecessaryConversionTemporary" />
-	<rule ref="rulesets/java/basic.xml/OverrideBothEqualsAndHashcode" />
-	<rule ref="rulesets/java/basic.xml/DoubleCheckedLocking"
+	<rule ref="category/java/errorprone.xml/EmptyCatchBlock" />
+	<rule ref="category/java/errorprone.xml/EmptyIfStmt" />
+	<rule ref="category/java/errorprone.xml/EmptyWhileStmt" />
+	<rule ref="category/java/errorprone.xml/EmptyTryBlock" />
+	<rule ref="category/java/errorprone.xml/EmptyFinallyBlock" />
+	<rule ref="category/java/errorprone.xml/EmptySwitchStatements" />
+	<rule ref="category/java/errorprone.xml/JumbledIncrementer" />
+	<rule ref="category/java/codestyle.xml/ForLoopShouldBeWhileLoop" />
+	<rule ref="category/java/errorprone.xml/UnnecessaryConversionTemporary" />
+	<rule ref="category/java/errorprone.xml/OverrideBothEqualsAndHashcode" />
+	<rule ref="category/java/multithreading.xml/DoubleCheckedLocking"
 		message="Verify that the double-checked variable is declared as volatile.">
 		<priority>3</priority>
 	</rule>
-	<rule ref="rulesets/java/basic.xml/ReturnFromFinallyBlock" />
-	<rule ref="rulesets/java/empty.xml/EmptySynchronizedBlock" />
-	<rule ref="rulesets/java/unnecessary.xml/UnnecessaryReturn" /> 
-	<rule ref="rulesets/java/empty.xml/EmptyStaticInitializer" />
-	<rule ref="rulesets/java/basic.xml/UnconditionalIfStatement" />  
-	<rule ref="rulesets/java/empty.xml/EmptyStatementNotInLoop" />       
-	<rule ref="rulesets/java/basic.xml/BooleanInstantiation" />              
-	<rule ref="rulesets/java/unnecessary.xml/UnnecessaryFinalModifier" />
-	<rule ref="rulesets/java/basic.xml/CollapsibleIfStatements" />
-	<rule ref="rulesets/java/unnecessary.xml/UselessOverridingMethod" />
-	<rule ref="rulesets/java/basic.xml/ClassCastExceptionWithToArray" />
-	<rule ref="rulesets/java/basic.xml/AvoidDecimalLiteralsInBigDecimalConstructor" />
-	<rule ref="rulesets/java/unnecessary.xml/UselessOperationOnImmutable" />
-	<rule ref="rulesets/java/basic.xml/MisplacedNullCheck" />
-	<rule ref="rulesets/java/unnecessary.xml/UnusedNullCheckInEquals" />
-	<rule ref="rulesets/java/basic.xml/AvoidThreadGroup" />
-	<rule ref="rulesets/java/basic.xml/BrokenNullCheck" />
-	<rule ref="rulesets/java/basic.xml/BigIntegerInstantiation" />
-	<rule ref="rulesets/java/basic.xml/AvoidUsingOctalValues" />
-	<rule ref="rulesets/java/basic.xml/AvoidUsingHardCodedIP" />
-	<rule ref="rulesets/java/basic.xml/CheckResultSet" />
-	<rule ref="rulesets/java/basic.xml/AvoidMultipleUnaryOperators" />
-	<rule ref="rulesets/java/empty.xml/EmptyInitializer" />
-
-    <rule ref="rulesets/java/braces.xml/IfStmtsMustUseBraces" />
-    <rule ref="rulesets/java/braces.xml/WhileLoopsMustUseBraces" />
-    <rule ref="rulesets/java/braces.xml/IfElseStmtsMustUseBraces" />
-    <rule ref="rulesets/java/braces.xml/ForLoopsMustUseBraces" />
-
-    <rule ref="rulesets/java/clone.xml/ProperCloneImplementation" />
-    <rule ref="rulesets/java/clone.xml/CloneThrowsCloneNotSupportedException" />
-    <rule ref="rulesets/java/clone.xml/CloneMethodMustImplementCloneable" />
-
-	<rule ref="rulesets/java/codesize.xml/NPathComplexity" />
-	<rule ref="rulesets/java/codesize.xml/ExcessiveParameterList" />
-	<rule ref="rulesets/java/codesize.xml/CyclomaticComplexity" >
-		<properties>
-			<property name="showClassesComplexity" value="false" />
-		</properties>
-	</rule>
-	<rule ref="rulesets/java/codesize.xml/ExcessivePublicCount" />
-	<rule ref="rulesets/java/codesize.xml/TooManyFields" />
-	<rule ref="rulesets/java/codesize.xml/NcssMethodCount" />
-	<rule ref="rulesets/java/codesize.xml/NcssTypeCount" />
-	<rule ref="rulesets/java/codesize.xml/NcssConstructorCount" />
-
-    <rule ref="rulesets/java/controversial.xml/SuspiciousOctalEscape" />
-    <rule ref="rulesets/java/controversial.xml/AvoidUsingNativeCode" />
-    <rule ref="rulesets/java/controversial.xml/AvoidAccessibilityAlteration" />
-    <rule ref="rulesets/java/controversial.xml/DoNotCallGarbageCollectionExplicitly" />
-
-    <rule ref="rulesets/java/coupling.xml/LooseCoupling" />
-
-    <rule ref="rulesets/java/design.xml/AvoidDeeplyNestedIfStmts" />
-		<rule ref="rulesets/java/design.xml/AvoidReassigningParameters" >
+	<rule ref="category/java/errorprone.xml/ReturnFromFinallyBlock" />
+	<rule ref="category/java/errorprone.xml/EmptySynchronizedBlock" />
+	<rule ref="category/java/codestyle.xml/UnnecessaryReturn" />
+	<rule ref="category/java/errorprone.xml/UnconditionalIfStatement" />
+	<rule ref="category/java/errorprone.xml/EmptyStatementNotInLoop" />
+	<rule ref="category/java/codestyle.xml/UnnecessaryModifier" />
+	<rule ref="category/java/design.xml/CollapsibleIfStatements" />
+	<rule ref="category/java/design.xml/UselessOverridingMethod" />
+	<rule ref="category/java/errorprone.xml/ClassCastExceptionWithToArray" />
+	<rule ref="category/java/errorprone.xml/AvoidDecimalLiteralsInBigDecimalConstructor" />
+	<rule ref="category/java/errorprone.xml/UselessOperationOnImmutable" />
+	<rule ref="category/java/errorprone.xml/MisplacedNullCheck" />
+	<rule ref="category/java/errorprone.xml/UnusedNullCheckInEquals" />
+	<rule ref="category/java/multithreading.xml/AvoidThreadGroup" />
+	<rule ref="category/java/errorprone.xml/BrokenNullCheck" />
+	<rule ref="category/java/performance.xml/BigIntegerInstantiation" />
+	<rule ref="category/java/errorprone.xml/AvoidUsingOctalValues" />
+	<rule ref="category/java/bestpractices.xml/AvoidUsingHardCodedIP" />
+	<rule ref="category/java/bestpractices.xml/CheckResultSet" />
+	<rule ref="category/java/errorprone.xml/AvoidMultipleUnaryOperators" />
+	<rule ref="category/java/errorprone.xml/EmptyInitializer" />
+
+
+    <rule ref="category/java/errorprone.xml/ProperCloneImplementation" />
+    <rule ref="category/java/errorprone.xml/CloneMethodMustImplementCloneable" />
+
+	<rule ref="category/java/design.xml/NPathComplexity" />
+	<rule ref="category/java/design.xml/ExcessiveParameterList" />
+	<rule ref="category/java/design.xml/CyclomaticComplexity" />
+	<rule ref="category/java/design.xml/ExcessivePublicCount" />
+	<rule ref="category/java/design.xml/TooManyFields" />
+
+    <rule ref="category/java/errorprone.xml/SuspiciousOctalEscape" />
+    <rule ref="category/java/codestyle.xml/AvoidUsingNativeCode" />
+    <rule ref="category/java/errorprone.xml/AvoidAccessibilityAlteration" />
+    <rule ref="category/java/errorprone.xml/DoNotCallGarbageCollectionExplicitly" />
+
+    <rule ref="category/java/bestpractices.xml/LooseCoupling" />
+
+    <rule ref="category/java/design.xml/AvoidDeeplyNestedIfStmts" />
+		<rule ref="category/java/bestpractices.xml/AvoidReassigningParameters" >
 			<priority>3</priority>
 		</rule>
-    <rule ref="rulesets/java/design.xml/SwitchDensity" />
-    <rule ref="rulesets/java/design.xml/ConstructorCallsOverridableMethod" />
-    <rule ref="rulesets/java/design.xml/AccessorClassGeneration" />
-    <rule ref="rulesets/java/design.xml/FinalFieldCouldBeStatic" />
-    <rule ref="rulesets/java/design.xml/CloseResource" />
-    <rule ref="rulesets/java/design.xml/DefaultLabelNotLastInSwitchStmt" />
-    <rule ref="rulesets/java/design.xml/NonCaseLabelInSwitchStatement" />
-    <rule ref="rulesets/java/design.xml/OptimizableToArrayCall" />
-    <rule ref="rulesets/java/design.xml/BadComparison" />
-    <rule ref="rulesets/java/design.xml/EqualsNull" />
-    <rule ref="rulesets/java/design.xml/InstantiationToGetClass" />
-    <rule ref="rulesets/java/design.xml/IdempotentOperations" />
-    <rule ref="rulesets/java/design.xml/ImmutableField" />
-    <rule ref="rulesets/java/design.xml/AvoidProtectedFieldInFinalClass" />
-    <rule ref="rulesets/java/design.xml/AssignmentToNonFinalStatic" />
-    <rule ref="rulesets/java/design.xml/MissingStaticMethodInNonInstantiatableClass" />
-    <rule ref="rulesets/java/design.xml/MissingBreakInSwitch" />
-    <rule ref="rulesets/java/design.xml/UseNotifyAllInsteadOfNotify" />
-    <rule ref="rulesets/java/design.xml/AvoidInstanceofChecksInCatchClause" />
-    <rule ref="rulesets/java/design.xml/AbstractClassWithoutAbstractMethod" />
-    <rule ref="rulesets/java/design.xml/SimplifyConditional" />
-    <rule ref="rulesets/java/design.xml/PositionLiteralsFirstInComparisons" />
-    <rule ref="rulesets/java/design.xml/NonThreadSafeSingleton" />
-    <rule ref="rulesets/java/design.xml/UnsynchronizedStaticDateFormatter" />
-    <rule ref="rulesets/java/design.xml/PreserveStackTrace" />
-    <rule ref="rulesets/java/design.xml/UseCollectionIsEmpty" />
-    <rule ref="rulesets/java/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal" />
-    <rule ref="rulesets/java/design.xml/SingularField" />
-    <rule ref="rulesets/java/design.xml/AbstractClassWithoutAnyMethod" />
-
-    <rule ref="rulesets/java/finalizers.xml/EmptyFinalizer" />
-    <rule ref="rulesets/java/finalizers.xml/FinalizeOnlyCallsSuperFinalize" />
-    <rule ref="rulesets/java/finalizers.xml/FinalizeOverloaded" />
-    <rule ref="rulesets/java/finalizers.xml/FinalizeDoesNotCallSuperFinalize" />
-    <rule ref="rulesets/java/finalizers.xml/FinalizeShouldBeProtected" />
-    <rule ref="rulesets/java/finalizers.xml/AvoidCallingFinalize" />
-
-    <rule ref="rulesets/java/imports.xml/DuplicateImports" />
-    <rule ref="rulesets/java/imports.xml/DontImportJavaLang" />
-    <rule ref="rulesets/java/imports.xml/UnusedImports" />
-    <rule ref="rulesets/java/imports.xml/ImportFromSamePackage" />
-    <rule ref="rulesets/java/imports.xml/TooManyStaticImports" />
-
-    <rule ref="rulesets/java/javabeans.xml/MissingSerialVersionUID" />
-
-    <rule ref="rulesets/java/logging-java.xml/MoreThanOneLogger" />
-    <rule ref="rulesets/java/logging-java.xml/LoggerIsNotStaticFinal" />
-    <rule ref="rulesets/java/logging-java.xml/SystemPrintln" />
-    <rule ref="rulesets/java/logging-java.xml/AvoidPrintStackTrace" />
-
-    <rule ref="rulesets/java/naming.xml/LongVariable">
+    <rule ref="category/java/design.xml/SwitchDensity" />
+    <rule ref="category/java/errorprone.xml/ConstructorCallsOverridableMethod" />
+    <rule ref="category/java/bestpractices.xml/AccessorClassGeneration" />
+    <rule ref="category/java/design.xml/FinalFieldCouldBeStatic" />
+    <rule ref="category/java/errorprone.xml/CloseResource" />
+    <rule ref="category/java/bestpractices.xml/DefaultLabelNotLastInSwitchStmt" />
+    <rule ref="category/java/errorprone.xml/NonCaseLabelInSwitchStatement" />
+    <rule ref="category/java/performance.xml/OptimizableToArrayCall" />
+    <rule ref="category/java/errorprone.xml/BadComparison" />
+    <rule ref="category/java/errorprone.xml/EqualsNull" />
+    <rule ref="category/java/errorprone.xml/InstantiationToGetClass" />
+    <rule ref="category/java/errorprone.xml/IdempotentOperations" />
+    <rule ref="category/java/design.xml/ImmutableField" />
+    <rule ref="category/java/codestyle.xml/AvoidProtectedFieldInFinalClass" />
+    <rule ref="category/java/errorprone.xml/AssignmentToNonFinalStatic" />
+    <rule ref="category/java/errorprone.xml/MissingStaticMethodInNonInstantiatableClass" />
+    <rule ref="category/java/errorprone.xml/MissingBreakInSwitch" />
+    <rule ref="category/java/multithreading.xml/UseNotifyAllInsteadOfNotify" />
+    <rule ref="category/java/errorprone.xml/AvoidInstanceofChecksInCatchClause" />
+    <rule ref="category/java/bestpractices.xml/AbstractClassWithoutAbstractMethod" />
+    <rule ref="category/java/design.xml/SimplifyConditional" />
+    <rule ref="category/java/multithreading.xml/NonThreadSafeSingleton" />
+    <rule ref="category/java/bestpractices.xml/PreserveStackTrace" />
+    <rule ref="category/java/bestpractices.xml/UseCollectionIsEmpty" />
+    <rule ref="category/java/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal" />
+    <rule ref="category/java/design.xml/SingularField" />
+    <rule ref="category/java/design.xml/AbstractClassWithoutAnyMethod" />
+
+    <rule ref="category/java/errorprone.xml/EmptyFinalizer" />
+    <rule ref="category/java/errorprone.xml/FinalizeOnlyCallsSuperFinalize" />
+    <rule ref="category/java/errorprone.xml/FinalizeOverloaded" />
+    <rule ref="category/java/errorprone.xml/FinalizeDoesNotCallSuperFinalize" />
+    <rule ref="category/java/errorprone.xml/FinalizeShouldBeProtected" />
+    <rule ref="category/java/errorprone.xml/AvoidCallingFinalize" />
+
+    <rule ref="category/java/codestyle.xml/TooManyStaticImports" />
+
+    <rule ref="category/java/errorprone.xml/MissingSerialVersionUID" />
+
+    <rule ref="category/java/errorprone.xml/MoreThanOneLogger" />
+    <rule ref="category/java/bestpractices.xml/SystemPrintln" />
+    <rule ref="category/java/bestpractices.xml/AvoidPrintStackTrace" />
+
+    <rule ref="category/java/codestyle.xml/LongVariable">
         <properties>
             <property name="minimum" value="30" />
         </properties>
     </rule>
-    <rule ref="rulesets/java/naming.xml/ShortMethodName" />
-    <rule ref="rulesets/java/naming.xml/MethodNamingConventions" />
-    <rule ref="rulesets/java/naming.xml/ClassNamingConventions" />
-    <rule ref="rulesets/java/naming.xml/AbstractNaming" />
-    <rule ref="rulesets/java/naming.xml/AvoidDollarSigns" />
-    <rule ref="rulesets/java/naming.xml/MethodWithSameNameAsEnclosingClass" />
-    <rule ref="rulesets/java/naming.xml/SuspiciousHashcodeMethodName" />
-    <rule ref="rulesets/java/naming.xml/SuspiciousConstantFieldName" />
-    <rule ref="rulesets/java/naming.xml/SuspiciousEqualsMethodName" />
-    <rule ref="rulesets/java/naming.xml/AvoidFieldNameMatchingTypeName" />
+    <rule ref="category/java/codestyle.xml/ShortMethodName" />
+    <rule ref="category/java/codestyle.xml/MethodNamingConventions" />
+    <rule ref="category/java/codestyle.xml/ClassNamingConventions" />
+    <rule ref="category/java/codestyle.xml/AvoidDollarSigns" />
+    <rule ref="category/java/errorprone.xml/MethodWithSameNameAsEnclosingClass" />
+    <rule ref="category/java/errorprone.xml/SuspiciousHashcodeMethodName" />
+    <rule ref="category/java/errorprone.xml/SuspiciousEqualsMethodName" />
+    <rule ref="category/java/errorprone.xml/AvoidFieldNameMatchingTypeName" />
     <!--<rule ref="rulesets/java/naming.xml/AvoidFieldNameMatchingMethodName" />-->
-    <rule ref="rulesets/java/naming.xml/NoPackage" />
-    <rule ref="rulesets/java/naming.xml/PackageCase" />
-    <rule ref="rulesets/java/naming.xml/MisleadingVariableName" />
-    <rule ref="rulesets/java/naming.xml/BooleanGetMethodName" />
-
-    <rule ref="rulesets/java/optimizations.xml/LocalVariableCouldBeFinal" />
-    <rule ref="rulesets/java/optimizations.xml/MethodArgumentCouldBeFinal" />
-    <rule ref="rulesets/java/optimizations.xml/UseArrayListInsteadOfVector" />
-    <rule ref="rulesets/java/optimizations.xml/UseStringBufferForStringAppends" />
-    <rule ref="rulesets/java/optimizations.xml/UseArraysAsList" />
-    <rule ref="rulesets/java/optimizations.xml/AvoidArrayLoops" />
-    <rule ref="rulesets/java/optimizations.xml/UnnecessaryWrapperObjectCreation" />
-    <rule ref="rulesets/java/optimizations.xml/AddEmptyString" />
-
-    <rule ref="rulesets/java/strictexception.xml/AvoidCatchingThrowable" />
-    <rule ref="rulesets/java/strictexception.xml/SignatureDeclareThrowsException" />
-    <rule ref="rulesets/java/strictexception.xml/ExceptionAsFlowControl" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidCatchingNPE" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidThrowingRawExceptionTypes" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidThrowingNullPointerException" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidRethrowingException" />
-    <rule ref="rulesets/java/strictexception.xml/DoNotExtendJavaLangError" />
-    <rule ref="rulesets/java/strictexception.xml/DoNotThrowExceptionInFinally" />
-    <rule ref="rulesets/java/strictexception.xml/AvoidThrowingNewInstanceOfSameException" />
-
-    <rule ref="rulesets/java/strings.xml/AvoidDuplicateLiterals" >
+    <rule ref="category/java/codestyle.xml/NoPackage" />
+    <rule ref="category/java/codestyle.xml/PackageCase" />
+    <rule ref="category/java/codestyle.xml/BooleanGetMethodName" />
+
+    <rule ref="category/java/codestyle.xml/LocalVariableCouldBeFinal" />
+    <rule ref="category/java/codestyle.xml/MethodArgumentCouldBeFinal" />
+    <rule ref="category/java/performance.xml/UseArrayListInsteadOfVector" />
+    <rule ref="category/java/performance.xml/UseStringBufferForStringAppends" />
+    <rule ref="category/java/performance.xml/UseArraysAsList" />
+    <rule ref="category/java/performance.xml/AvoidArrayLoops" />
+    <rule ref="category/java/performance.xml/AddEmptyString" />
+
+    <rule ref="category/java/errorprone.xml/AvoidCatchingThrowable" />
+    <rule ref="category/java/design.xml/SignatureDeclareThrowsException" />
+    <rule ref="category/java/design.xml/ExceptionAsFlowControl" />
+    <rule ref="category/java/errorprone.xml/AvoidCatchingNPE" />
+    <rule ref="category/java/design.xml/AvoidThrowingRawExceptionTypes" />
+    <rule ref="category/java/design.xml/AvoidThrowingNullPointerException" />
+    <rule ref="category/java/design.xml/AvoidRethrowingException" />
+    <rule ref="category/java/design.xml/DoNotExtendJavaLangError" />
+    <rule ref="category/java/errorprone.xml/DoNotThrowExceptionInFinally" />
+    <rule ref="category/java/design.xml/AvoidThrowingNewInstanceOfSameException" />
+
+    <rule ref="category/java/errorprone.xml/AvoidDuplicateLiterals" >
 		<properties>
 			<property name="skipAnnotations" value="true" />
 		</properties>
 	</rule>
-    <rule ref="rulesets/java/strings.xml/StringInstantiation" />
-    <rule ref="rulesets/java/strings.xml/StringToString" />
-    <rule ref="rulesets/java/strings.xml/InefficientStringBuffering" />
-    <rule ref="rulesets/java/strings.xml/UnnecessaryCaseChange" />
-    <rule ref="rulesets/java/strings.xml/UseStringBufferLength" />
-    <rule ref="rulesets/java/strings.xml/AppendCharacterWithChar" />
-    <rule ref="rulesets/java/strings.xml/ConsecutiveLiteralAppends" />
-    <rule ref="rulesets/java/strings.xml/UseIndexOfChar" />
-    <rule ref="rulesets/java/strings.xml/UselessStringValueOf" />
-    <rule ref="rulesets/java/strings.xml/StringBufferInstantiationWithChar" />
-    <rule ref="rulesets/java/strings.xml/UseEqualsToCompareStrings" />
-
-    <rule ref="rulesets/java/unusedcode.xml/UnusedPrivateField" />
-    <rule ref="rulesets/java/unusedcode.xml/UnusedLocalVariable" />
-    <rule ref="rulesets/java/unusedcode.xml/UnusedPrivateMethod" />
-    <rule ref="rulesets/java/unusedcode.xml/UnusedFormalParameter" />
+    <rule ref="category/java/performance.xml/StringInstantiation" />
+    <rule ref="category/java/performance.xml/StringToString" />
+    <rule ref="category/java/performance.xml/InefficientStringBuffering" />
+    <rule ref="category/java/errorprone.xml/UnnecessaryCaseChange" />
+    <rule ref="category/java/performance.xml/UseStringBufferLength" />
+    <rule ref="category/java/performance.xml/AppendCharacterWithChar" />
+    <rule ref="category/java/performance.xml/ConsecutiveLiteralAppends" />
+    <rule ref="category/java/performance.xml/UseIndexOfChar" />
+    <rule ref="category/java/performance.xml/UselessStringValueOf" />
+    <rule ref="category/java/errorprone.xml/StringBufferInstantiationWithChar" />
+    <rule ref="category/java/errorprone.xml/UseEqualsToCompareStrings" />
+
+    <rule ref="category/java/bestpractices.xml/UnusedPrivateField" />
+    <rule ref="category/java/bestpractices.xml/UnusedLocalVariable" />
+    <rule ref="category/java/bestpractices.xml/UnusedPrivateMethod" />
+    <rule ref="category/java/bestpractices.xml/UnusedFormalParameter" />
 
 </ruleset>
diff --git a/traffic_router/shared/pom.xml b/traffic_router/shared/pom.xml
index d13bcbe..f2ec586 100644
--- a/traffic_router/shared/pom.xml
+++ b/traffic_router/shared/pom.xml
@@ -35,7 +35,7 @@ under the License.
 		<plugins>
 			<plugin>
 				<artifactId>maven-pmd-plugin</artifactId>
-				<version>3.6</version>
+				<version>3.14.0</version>
 				<executions>
 					<execution>
 						<id>PMD</id>
diff --git a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/Certificate.java b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/Certificate.java
index 96313c9..ed5102a 100644
--- a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/Certificate.java
+++ b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/Certificate.java
@@ -43,7 +43,6 @@ public class Certificate {
 	}
 
 	@Override
-	@SuppressWarnings("PMD")
 	public boolean equals(final Object o) {
 		if (this == o) return true;
 		if (o == null || getClass() != o.getClass()) return false;
diff --git a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/IsEqualCollection.java b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/IsEqualCollection.java
index e9945cc..76c5553 100644
--- a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/IsEqualCollection.java
+++ b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/IsEqualCollection.java
@@ -22,21 +22,20 @@ import org.hamcrest.core.IsEqual;
 
 import java.util.Collection;
 
-@SuppressWarnings("PMD")
-public class IsEqualCollection<T> extends IsEqual<T> {
+final public class IsEqualCollection<T> extends IsEqual<T> {
 	private final Object expectedValue;
 
-	private IsEqualCollection(T equalArg) {
+	private IsEqualCollection(final T equalArg) {
 		super(equalArg);
 		expectedValue = equalArg;
 	}
 
-	private void describeItems(Description description, Object value) {
+	private void describeItems(final Description description, final Object value) {
 		if (value instanceof Collection) {
-			Object[] items = ((Collection) value).toArray();
+			final Object[] items = ((Collection) value).toArray();
 
 			description.appendText("\n{");
-			for (Object item : items) {
+			for (final Object item : items) {
 				description.appendText("\n\t");
 				description.appendText(item.toString());
 			}
@@ -45,7 +44,7 @@ public class IsEqualCollection<T> extends IsEqual<T> {
 	}
 
 	@Override
-	public void describeTo(Description description) {
+	public void describeTo(final Description description) {
 		if (expectedValue instanceof Collection) {
 			description.appendText("all of the following in order\n");
 			describeItems(description,expectedValue);
@@ -56,7 +55,7 @@ public class IsEqualCollection<T> extends IsEqual<T> {
 	}
 
 	@Override
-	public void describeMismatch(Object actualValue, Description mismatchDescription) {
+	public void describeMismatch(final Object actualValue, final Description mismatchDescription) {
 		if (actualValue instanceof Collection) {
 			mismatchDescription.appendText("had the items\n");
 			describeItems(mismatchDescription, actualValue);
@@ -67,7 +66,7 @@ public class IsEqualCollection<T> extends IsEqual<T> {
 	}
 
 	@Factory
-	public static <T> Matcher<T> equalTo(T operand) {
+	public static <T> Matcher<T> equalTo(final T operand) {
 		return new IsEqualCollection<>(operand);
 	}
 }
diff --git a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/SigningData.java b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/SigningData.java
index f02ef0d..949b884 100644
--- a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/SigningData.java
+++ b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/SigningData.java
@@ -15,6 +15,7 @@
 
 package org.apache.traffic_control.traffic_router.shared;
 
+import org.apache.log4j.Logger;
 import org.xbill.DNS.Record;
 import org.xbill.DNS.Section;
 
@@ -25,7 +26,7 @@ import java.util.List;
 
 import static java.util.stream.Collectors.toList;
 
-@SuppressWarnings("PMD")
+@SuppressWarnings("PMD.ClassNamingConventions")
 public class SigningData {
 	// If you want to update this data, change the contents of SigningTestDataGenerator.java,
 	// run its only test and then replace everything between here and the declaration of signedList
@@ -34,9 +35,9 @@ public class SigningData {
 		"MIIBCgKCAQEAly/1SbKJpzYwOJF2Xie7W6eLyQ/W1Ar8hKss7ZbIkcg23bt8QQOFVLPlYG9luYzAULZgTWa4gFlrBkEzO410oy8V" +
 			"FZgB5x11/LioWGJmy9h+H6R1Fy0QFP3eFGKb9tLuAJGMaSRTcbRADJQYiDJ6uuWobTg2fNxlb7B1lz7wOVk/yTV795k+vb+lJx8x" +
 			"Zu9vNyIkUy2/LF4J0oXKCPUEee0hpBglEeFcnMSHjO+LtY5Y6E8+fp3d38+Tikmy/2Xu0R35MmCWXuwqYMO+1p7spNzsuUFkhTWt" +
-			"0yJKc8pC91V6e3gsD6iwMy3Q0EEEQ7q1z+M9vLIYtmC27mHmdDh1DQIDAQAB";
+			"0yJKc8pC91V6e3gsD6iwMy3Q0EEEQ7q1z+M9vLIYtmC27mHmdDh1DQIDAQAB",
 
-	public static String ksk1Private =
+	ksk1Private =
 		"UHJpdmF0ZS1rZXktZm9ybWF0OiB2MS4yCkFsZ29yaXRobTogNSAoUlNBU0hBMSkKTW9kdWx1czog\nQUpjdjlVbXlpYWMyTURpUm" +
 			"RsNG51MXVuaThrUDF0UUsvSVNyTE8yV3lKSElOdDI3ZkVFRGhWU3o1\nV0J2WmJtTXdGQzJZRTFtdUlCWmF3WkJNenVOZEtNdkZS" +
 			"V1lBZWNkZGZ5NHFGaGlac3ZZZmgra2RS\nY3RFQlQ5M2hSaW0vYlM3Z0NSakdra1UzRzBRQXlVR0lneWVycmxxRzA0Tm56Y1pXK3" +
@@ -60,16 +61,16 @@ public class SigningData {
 			"ZidnpWRWtKZUFISjgrd3cyRk9H\nNm91blk2RjZnRUR2WityTFpGVTl0eDh2eDdjWnUvYz0KQ29lZmZpY2llbnQ6IEFMd1hKOGZk" +
 			"QWtY\nLzZMeVFvdENIdHZDVWszbEtWbEdlZXAwQlhsYWZyL3FTU2RrTEt2ZHVRSVJCczY0bDBnZW9ndW1H\nRVd5dFViaG9Vak44" +
 			"NFNwOG5ldktyS3hqaTlxeG9xUytyQjJ2aElvc0pVdnVoSEJENWMyeHZJVG1R\naXYrazUrT1FDaGdqeGFONnJ5b1NoRDhlYnlsUk" +
-			"RzQ1VNL1FFQk82QWZyS0NQZHkK";
+			"RzQ1VNL1FFQk82QWZyS0NQZHkK",
 
 
-	public static String ksk2Public =
+	ksk2Public =
 		"MIIBCgKCAQEAqZz9euL/dovYWIF87eUDWObp9YodiCp88k/PhDCyIbpn7a/QZZYZgYJTjQH0wrMweHj6M74fn8zAFz4fCUq6XSdF" +
 			"UR0X/7MXzBYfuKYdYbYrF68C57ryEl3sW9rSMgxWtajvKFzyB67sYT2GcL3vjZPaYb2ZT2jgjEqeKAk7fzcibfR4UrTj3LI19U8W" +
 			"reZ29JZAmV2sknYA3ImM33CLYseRCw79r0Jws9RLmJixzDeavWYBls1KUqeXYqV++Hb+mQcR/C0/ch63msPWwgcOEfGFmagcYFvC" +
-			"6gOLYXH5WgC2UJlpAMQBZC+3UKwmHaomXeHh92zkQ/nV4bcEOzjZlQIDAQAB";
+			"6gOLYXH5WgC2UJlpAMQBZC+3UKwmHaomXeHh92zkQ/nV4bcEOzjZlQIDAQAB",
 
-	public static String ksk2Private =
+	ksk2Private =
 		"UHJpdmF0ZS1rZXktZm9ybWF0OiB2MS4yCkFsZ29yaXRobTogNSAoUlNBU0hBMSkKTW9kdWx1czog\nQUttYy9YcmkvM2FMMkZpQm" +
 			"ZPM2xBMWptNmZXS0hZZ3FmUEpQejRRd3NpRzZaKzJ2MEdXV0dZR0NV\nNDBCOU1Lek1IaDQrak8rSDUvTXdCYytId2xLdWwwblJW" +
 			"RWRGLyt6Rjh3V0g3aW1IV0cyS3hldkF1\nZTY4aEpkN0Z2YTBqSU1WcldvN3loYzhnZXU3R0U5aG5DOTc0MlQybUc5bVU5bzRJeE" +
@@ -93,16 +94,16 @@ public class SigningData {
 			"haNWZ1VWtlaFVaRHdYUUZxZDNZ\nRzhNL0l1QXVGdjJ3MGdBazhkYVgxSnZNbWFWMXdyaz0KQ29lZmZpY2llbnQ6IEN4TFJPOUgr" +
 			"UUwv\nWHk5cmNYYUZmVnhZUkpsV0RYMW0vdVJ2QWZ0MVZnaFFRTzNFWnZzYnRlS3hrTEFNWXJta2c1ZFJy\nTkJ6T0NhVVM0VjlL" +
 			"NmFxaHczVEZacEhkUDhNUHdLMG5zSTZaQnc4UGFmZ1ZIajk0MzhtRUt0NVBO\nSks1ZUh4dEg1aGtNNkVlbjhuZXpvcVg4WmEveV" +
-			"BSd0J0U1ZvSW9pTXpJbVZIMD0K";
+			"BSd0J0U1ZvSW9pTXpJbVZIMD0K",
 
 
-	public static String zsk1Public =
+	zsk1Public =
 		"MIIBCgKCAQEAymLTAjeDfcIYUKyGqKhUrl/khgBJA9TNqrzZOfMmNFarbONxDnsd6WoHnqi5xGrNBV6ZGIGwc4tebG/XWBOVvI7P" +
 			"b10ZHjm4muKnzA9Qt+TOwpukN/phOzDwFZx+QHHu18jePgmFstoSUJzb4baPSoLorCYbRKdIAHhSEALfL5LE8ByP/MwWCO6jD0wE" +
 			"ZlzGsnow5wxnuVWhBt8FMpRN9FgrJ3YkfTxKz8IZpSx2yjf9IIa/lGvKxcUoAyrdWam14l3fBTI6tfx2nWv56L846wXjqtcZvQeO" +
-			"0ewFdwNw2kWTT01kWeG6lXa1yo6CARkvVaF9zcrVNxWUm7CIvKibwQIDAQAB";
+			"0ewFdwNw2kWTT01kWeG6lXa1yo6CARkvVaF9zcrVNxWUm7CIvKibwQIDAQAB",
 
-	public static String zsk1Private =
+	zsk1Private =
 		"UHJpdmF0ZS1rZXktZm9ybWF0OiB2MS4yCkFsZ29yaXRobTogNSAoUlNBU0hBMSkKTW9kdWx1czog\nQU1waTB3STNnMzNDR0ZDc2" +
 			"hxaW9WSzVmNUlZQVNRUFV6YXE4MlRuekpqUldxMnpqY1E1N0hlbHFC\nNTZvdWNScXpRVmVtUmlCc0hPTFhteHYxMWdUbGJ5T3oy" +
 			"OWRHUjQ1dUpyaXA4d1BVTGZrenNLYnBE\nZjZZVHN3OEJXY2ZrQng3dGZJM2o0SmhiTGFFbENjMitHMmowcUM2S3dtRzBTblNBQj" +
@@ -126,16 +127,16 @@ public class SigningData {
 			"VKeFcrWk9VRUo0VUhFc2l1bVZp\nVVFzK2l4dnpqN1QvTXFOSkpxTmQ1eTNpaVlVZW82OD0KQ29lZmZpY2llbnQ6IGZFVzd1SzlD" +
 			"aUM2\nVHJDUmttS2R0T3d4dnM1SDQ5MWdJRkQ3ckxIQ010T1d5enJxNXhGd0F1cmJFSktVdGlKQVVVNThE\nVUErcWZYTk5lODR4" +
 			"RDZuWHNXRU9zckVENXFPWnBFT1BnczdxcHdaTHJXQ3BBcTRhQ2dtdGVKTk5K\nb0k5Rm41OFV0aCtXSUpBb2dnS0ZPSWd5WmsxUz" +
-			"ZTRzFFZFBwWmd0dTQ5YnVpUT0K";
+			"ZTRzFFZFBwWmd0dTQ5YnVpUT0K",
 
 
-	public static String zsk2Public =
+	zsk2Public =
 		"MIIBCgKCAQEAuCnKCdaJnVwi3Iu0zUYrciw05zZ3jXkZAKE+TOCT5/DlpGRNwzU8x0qc2niyt9Q+awSBpizFWAeAfgpoZXEjbIvw" +
 			"hhDYC/Ze12jvDh/c/xyzaScnt6C6rlM2y1q7j7q9uI/64l7lQITOno4pvPZP3txXqll5VNfUjMbE3HNXL4O+qGLAij1/2clnS8wG" +
 			"vokEITcYwOL6I0vBADqgu4pmu5sstMN+72Tz8FQ+ZAMQ8B7G2IlnPdTBypL0r0LjoFJ2SWZGnj/IRM7Am4iMiwlCSbbDzPibsMwl" +
-			"MAquEBA1UVoN4PC1Ah+Hb6tP2h92Nl1JVSu0478uItF90dGl0gDQuwIDAQAB";
+			"MAquEBA1UVoN4PC1Ah+Hb6tP2h92Nl1JVSu0478uItF90dGl0gDQuwIDAQAB",
 
-	public static String zsk2Private =
+	zsk2Private =
 		"UHJpdmF0ZS1rZXktZm9ybWF0OiB2MS4yCkFsZ29yaXRobTogNSAoUlNBU0hBMSkKTW9kdWx1czog\nQUxncHlnbldpWjFjSXR5TH" +
 			"RNMUdLM0lzTk9jMmQ0MTVHUUNoUGt6Z2srZnc1YVJrVGNNMVBNZEtu\nTnA0c3JmVVBtc0VnYVlzeFZnSGdINEthR1Z4STJ5TDhJ" +
 			"WVEyQXYyWHRkbzd3NGYzUDhjczJrbko3\nZWd1cTVUTnN0YXU0KzZ2YmlQK3VKZTVVQ0V6cDZPS2J6MlQ5N2NWNnBaZVZUWDFJek" +
@@ -159,408 +160,408 @@ public class SigningData {
 			"Y0NVc4M0VUQk9MMzFUSy9Ec0hU\nMjF4KzVXeFJTQ21YNzdraFFLY3M5eGZJNlQyZEM1MD0KQ29lZmZpY2llbnQ6IEFOSm8rWXNX" +
 			"S01E\nM2JJWUI2NnhSUXBrRW90OUJqRmdhS0FuWmhJUVFlV1dSMlZZUFNscU9xbzRHWXArUmRZOFpyVStW\nME8wWE82MjNkWG03" +
 			"Rk0ybllPNUJSUnBJSTNDUHM3bjk4N2czMmJCUTZqdHVRV2xsV0s0L3VQUEtK\nMjFtRVpka2l1RHoxVzFWRkNoVzhsaUNFWDNQZl" +
-			"ZtK01qblJxQk1UMDUreUNUWlkK";
+			"ZtK01qblJxQk1UMDUreUNUWlkK",
 
 
 	// example.com.		315360000	IN	SOA	ns1.example.com. admin.example.com. 2016091400 86400 3600 1814400 259200
-	static String postZoneRecord0 =
+	postZoneRecord0 =
 		"B2V4YW1wbGUDY29tAAAGAAESzAMAADgDbnMxB2V4YW1wbGUDY29tAAVhZG1pbgdleGFtcGxlA2NvbQB4Kx0IAAFRgAAADhAAG6+A" +
-			"AAP0gA==";
+			"AAP0gA==",
 
 	// example.com.		315360000	IN	NS	ns1.example.com.
-	static String postZoneRecord3 =
-		"B2V4YW1wbGUDY29tAAACAAESzAMAABEDbnMxB2V4YW1wbGUDY29tAA==";
+	postZoneRecord3 =
+		"B2V4YW1wbGUDY29tAAACAAESzAMAABEDbnMxB2V4YW1wbGUDY29tAA==",
 
 	// example.com.		315360000	IN	NS	ns2.example.com.
-	static String postZoneRecord4 =
-		"B2V4YW1wbGUDY29tAAACAAESzAMAABEDbnMyB2V4YW1wbGUDY29tAA==";
+	postZoneRecord4 =
+		"B2V4YW1wbGUDY29tAAACAAESzAMAABEDbnMyB2V4YW1wbGUDY29tAA==",
 
 	// example.com.		259200	IN	NSEC	ftp.example.com. NS SOA RRSIG NSEC
-	static String postZoneRecord7 =
-		"B2V4YW1wbGUDY29tAAAvAAEAA/SAABkDZnRwB2V4YW1wbGUDY29tAAAGIgAAAAAD";
+	postZoneRecord7 =
+		"B2V4YW1wbGUDY29tAAAvAAEAA/SAABkDZnRwB2V4YW1wbGUDY29tAAAGIgAAAAAD",
 
 	// ftp.example.com.	1814400	IN	A	12.34.56.78
-	static String postZoneRecord10 =
-		"A2Z0cAdleGFtcGxlA2NvbQAAAQABABuvgAAEDCI4Tg==";
+	postZoneRecord10 =
+		"A2Z0cAdleGFtcGxlA2NvbQAAAQABABuvgAAEDCI4Tg==",
 
 	// ftp.example.com.	1814400	IN	A	21.43.65.87
-	static String postZoneRecord11 =
-		"A2Z0cAdleGFtcGxlA2NvbQAAAQABABuvgAAEFStBVw==";
+	postZoneRecord11 =
+		"A2Z0cAdleGFtcGxlA2NvbQAAAQABABuvgAAEFStBVw==",
 
 	// ftp.example.com.	259200	IN	AAAA	2001:db8:0:0:12:34:56:78
-	static String postZoneRecord14 =
-		"A2Z0cAdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAAEgA0AFYAeA==";
+	postZoneRecord14 =
+		"A2Z0cAdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAAEgA0AFYAeA==",
 
 	// ftp.example.com.	259200	IN	AAAA	2001:db8:0:0:21:43:65:87
-	static String postZoneRecord15 =
-		"A2Z0cAdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAAIQBDAGUAhw==";
+	postZoneRecord15 =
+		"A2Z0cAdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAAIQBDAGUAhw==",
 
 	// ftp.example.com.	259200	IN	NSEC	mirror.ftp.example.com. A AAAA RRSIG NSEC
-	static String postZoneRecord18 =
-		"A2Z0cAdleGFtcGxlA2NvbQAALwABAAP0gAAgBm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAAZAAAAIAAM=";
+	postZoneRecord18 =
+		"A2Z0cAdleGFtcGxlA2NvbQAALwABAAP0gAAgBm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAAZAAAAIAAM=",
 
 	// mirror.ftp.example.com.	315360000	IN	CNAME	ftp.example.com.
-	static String postZoneRecord21 =
-		"Bm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAAUAARLMAwAAEQNmdHAHZXhhbXBsZQNjb20A";
+	postZoneRecord21 =
+		"Bm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAAUAARLMAwAAEQNmdHAHZXhhbXBsZQNjb20A",
 
 	// mirror.ftp.example.com.	259200	IN	NSEC	www.example.com. CNAME RRSIG NSEC
-	static String postZoneRecord24 =
-		"Bm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAC8AAQAD9IAAGQN3d3cHZXhhbXBsZQNjb20AAAYEAAAAAAM=";
+	postZoneRecord24 =
+		"Bm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAC8AAQAD9IAAGQN3d3cHZXhhbXBsZQNjb20AAAYEAAAAAAM=",
 
 	// www.example.com.	1814400	IN	A	11.22.33.44
-	static String postZoneRecord27 =
-		"A3d3dwdleGFtcGxlA2NvbQAAAQABABuvgAAECxYhLA==";
+	postZoneRecord27 =
+		"A3d3dwdleGFtcGxlA2NvbQAAAQABABuvgAAECxYhLA==",
 
 	// www.example.com.	1814400	IN	A	55.66.77.88
-	static String postZoneRecord28 =
-		"A3d3dwdleGFtcGxlA2NvbQAAAQABABuvgAAEN0JNWA==";
+	postZoneRecord28 =
+		"A3d3dwdleGFtcGxlA2NvbQAAAQABABuvgAAEN0JNWA==",
 
 	// www.example.com.	315360000	IN	TXT	"dead0123456789"
-	static String postZoneRecord31 =
-		"A3d3dwdleGFtcGxlA2NvbQAAEAABEswDAAAPDmRlYWQwMTIzNDU2Nzg5";
+	postZoneRecord31 =
+		"A3d3dwdleGFtcGxlA2NvbQAAEAABEswDAAAPDmRlYWQwMTIzNDU2Nzg5",
 
 	// www.example.com.	259200	IN	AAAA	2001:db8:0:0:4:3:2:1
-	static String postZoneRecord34 =
-		"A3d3dwdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAABAADAAIAAQ==";
+	postZoneRecord34 =
+		"A3d3dwdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAABAADAAIAAQ==",
 
 	// www.example.com.	259200	IN	AAAA	2001:db8:0:0:5:6:7:8
-	static String postZoneRecord35 =
-		"A3d3dwdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAABQAGAAcACA==";
+	postZoneRecord35 =
+		"A3d3dwdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAABQAGAAcACA==",
 
 	// www.example.com.	259200	IN	NSEC	mirror.www.example.com. A TXT AAAA RRSIG NSEC
-	static String postZoneRecord38 =
-		"A3d3dwdleGFtcGxlA2NvbQAALwABAAP0gAAgBm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAAZAAIAIAAM=";
+	postZoneRecord38 =
+		"A3d3dwdleGFtcGxlA2NvbQAALwABAAP0gAAgBm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAAZAAIAIAAM=",
 
 	// mirror.www.example.com.	315360000	IN	CNAME	www.example.com.
-	static String postZoneRecord41 =
-		"Bm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAAUAARLMAwAAEQN3d3cHZXhhbXBsZQNjb20A";
+	postZoneRecord41 =
+		"Bm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAAUAARLMAwAAEQN3d3cHZXhhbXBsZQNjb20A",
 
 	// mirror.www.example.com.	259200	IN	NSEC	example.com. CNAME RRSIG NSEC
-	static String postZoneRecord44 =
-		"Bm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAC8AAQAD9IAAFQdleGFtcGxlA2NvbQAABgQAAAAAAw==";
+	postZoneRecord44 =
+		"Bm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAC8AAQAD9IAAFQdleGFtcGxlA2NvbQAABgQAAAAAAw==",
 
 	// example.com.		315360000	IN	SOA	ns1.example.com. admin.example.com. 2016091400 86400 3600 1814400 259200
-	static String signedRecord0 =
+	signedRecord0 =
 		"B2V4YW1wbGUDY29tAAAGAAESzAMAADgDbnMxB2V4YW1wbGUDY29tAAVhZG1pbgdleGFtcGxlA2NvbQB4Kx0IAAFRgAAADhAAG6+A" +
-			"AAP0gA==";
+			"AAP0gA==",
 
 	// example.com.		315360000	IN	RRSIG	SOA 5 2 315360000 20260901000000 20160901000000 62715 example.com. C0hpMqwBTBad15gPKdGAnz1xY/yoKVQMwZJPPZAUUV6finNeX8aS9wtml83eWslfuP+ipw2Xf1/EV2umUEHbtptJR0SReeR6NeUtHM2QAYoUG1+OmqQqebM5cD8pgyry1BAP+9wm9IKmyS3dSKDrj9M3Gd7TlUZrux96N/29KOPrLgb7Chbr0wqrTOJIQgV0DSecYoayM/iuQXO6qDAPc64W3jiBBPkLVub7NK1O9VIHHLPw1ElZVuK/8muxrsxp7eDzsjkNnVrxlat+1QQECk+uvARHxrY7eTGW+srZGyrkwDm2EvBAbmx3U0SaUPQDGzySeOZE9qdu7yYi0PcRsw==
-	static String signedRecord1 =
+	signedRecord1 =
 		"B2V4YW1wbGUDY29tAAAuAAESzAMAAR8ABgUCEswDAGqWFYBXx2+A9PsHZXhhbXBsZQNjb20AC0hpMqwBTBad15gPKdGAnz1xY/yo" +
 			"KVQMwZJPPZAUUV6finNeX8aS9wtml83eWslfuP+ipw2Xf1/EV2umUEHbtptJR0SReeR6NeUtHM2QAYoUG1+OmqQqebM5cD8pgyry" +
 			"1BAP+9wm9IKmyS3dSKDrj9M3Gd7TlUZrux96N/29KOPrLgb7Chbr0wqrTOJIQgV0DSecYoayM/iuQXO6qDAPc64W3jiBBPkLVub7" +
 			"NK1O9VIHHLPw1ElZVuK/8muxrsxp7eDzsjkNnVrxlat+1QQECk+uvARHxrY7eTGW+srZGyrkwDm2EvBAbmx3U0SaUPQDGzySeOZE" +
-			"9qdu7yYi0PcRsw==";
+			"9qdu7yYi0PcRsw==",
 
 	// example.com.		315360000	IN	RRSIG	SOA 5 2 315360000 20260901000000 20160901000000 62715 example.com. oblQvApzPjS/Frig1WwkS8XAVR4s8Yve+/DC8UV6JysMPW0PrwMEDrwjSPoxwGkAySYXuRLSJdW1H6HPXTWjJBontjCnCpiFEu2gnqacZi0HgVPEFGwWEH1lTVdglBrz5Px7CBnqzvVopzn9am72jVzmYh4JKgcEqCQnz4mA8f35DW6gkq52ECB1mR5nyckf6swZ8V63Ypu/aNcFrPnqQWWyfNS3dEormvNiahXtqEv0Keg5GeaYS3e9bu8DQofPojZbyZlk+GsNTfJJGLOkcG7SZliGSfAQRUMUb3D9NIPgfOWCAdAR286TAOm16ZoS/d06VoTNeUg3+n8D/YqzgA==
-	static String signedRecord2 =
+	signedRecord2 =
 		"B2V4YW1wbGUDY29tAAAuAAESzAMAAR8ABgUCEswDAGqWFYBXx2+A9PsHZXhhbXBsZQNjb20AoblQvApzPjS/Frig1WwkS8XAVR4s" +
 			"8Yve+/DC8UV6JysMPW0PrwMEDrwjSPoxwGkAySYXuRLSJdW1H6HPXTWjJBontjCnCpiFEu2gnqacZi0HgVPEFGwWEH1lTVdglBrz" +
 			"5Px7CBnqzvVopzn9am72jVzmYh4JKgcEqCQnz4mA8f35DW6gkq52ECB1mR5nyckf6swZ8V63Ypu/aNcFrPnqQWWyfNS3dEormvNi" +
 			"ahXtqEv0Keg5GeaYS3e9bu8DQofPojZbyZlk+GsNTfJJGLOkcG7SZliGSfAQRUMUb3D9NIPgfOWCAdAR286TAOm16ZoS/d06VoTN" +
-			"eUg3+n8D/YqzgA==";
+			"eUg3+n8D/YqzgA==",
 
 	// example.com.		315360000	IN	NS	ns1.example.com.
-	static String signedRecord3 =
-		"B2V4YW1wbGUDY29tAAACAAESzAMAABEDbnMxB2V4YW1wbGUDY29tAA==";
+	signedRecord3 =
+		"B2V4YW1wbGUDY29tAAACAAESzAMAABEDbnMxB2V4YW1wbGUDY29tAA==",
 
 	// example.com.		315360000	IN	NS	ns2.example.com.
-	static String signedRecord4 =
-		"B2V4YW1wbGUDY29tAAACAAESzAMAABEDbnMyB2V4YW1wbGUDY29tAA==";
+	signedRecord4 =
+		"B2V4YW1wbGUDY29tAAACAAESzAMAABEDbnMyB2V4YW1wbGUDY29tAA==",
 
 	// example.com.		315360000	IN	RRSIG	NS 5 2 315360000 20260901000000 20160901000000 62715 example.com. VXb0w+5JGUpmuLhH9IQwiF/TwlDIrCwovLV4/gIhXd7CmwkbqUkSwjPtuHvs7LmqlzzCfmAvqJxRb4aKgVFaA+ltlmdoQPR3fRTJM5Vt8bfA7o9/e8Epxu7U6q3uulgPY+PfmrgS6zclCTcb4Llxzmmi6COvN8xVBe4z9oe2+vDp+o14VpmvkLQNhlIIrcDUyPwYqBuYTT77lTm/DeXs47Afzp8r9JPgoTfu+NgvkSCK2RXgubIh73kdPaX222Hon7XEutA+nMi//1J3Tq+96dqZ9l4sawd3EzBL7fM+ANPHEZd4ducRRnzAXOCI//2sa4XWKZubVtuZCYZoyj12sw==
-	static String signedRecord5 =
+	signedRecord5 =
 		"B2V4YW1wbGUDY29tAAAuAAESzAMAAR8AAgUCEswDAGqWFYBXx2+A9PsHZXhhbXBsZQNjb20AVXb0w+5JGUpmuLhH9IQwiF/TwlDI" +
 			"rCwovLV4/gIhXd7CmwkbqUkSwjPtuHvs7LmqlzzCfmAvqJxRb4aKgVFaA+ltlmdoQPR3fRTJM5Vt8bfA7o9/e8Epxu7U6q3uulgP" +
 			"Y+PfmrgS6zclCTcb4Llxzmmi6COvN8xVBe4z9oe2+vDp+o14VpmvkLQNhlIIrcDUyPwYqBuYTT77lTm/DeXs47Afzp8r9JPgoTfu" +
 			"+NgvkSCK2RXgubIh73kdPaX222Hon7XEutA+nMi//1J3Tq+96dqZ9l4sawd3EzBL7fM+ANPHEZd4ducRRnzAXOCI//2sa4XWKZub" +
-			"VtuZCYZoyj12sw==";
+			"VtuZCYZoyj12sw==",
 
 	// example.com.		315360000	IN	RRSIG	NS 5 2 315360000 20260901000000 20160901000000 62715 example.com. pHMxn1FV1Vb4/Y0nO4sjBSolQIFBUpgUodq9q2MHlpqA9cY4kQAvF0oDONfvqdT8a7BCwrzDtSbLAi0QJuU0wao6JKM3Kr4CuVWPAaPCX4gdKi5Gye1F2A+O5NKC8aBweYxxEg6AP5ADyjkWYX0k7XW4c4kVkBmToYroO0kgaPQyj7AW4iznmRcXjnM4nufRjSwEfIYzIlQZ2Pf4ftaKH58DoAeouTDr0xYVM9F9q+78E3ZSgBJNprnOi5zo7qQcifIgshuD06cUjQ7e2Sgi1wEBUG3nyTa4qu8D7fK9oRJHIqAGeUKCAsWlC675HTdrGKBwbrjM41WoQkmCcclZNg==
-	static String signedRecord6 =
+	signedRecord6 =
 		"B2V4YW1wbGUDY29tAAAuAAESzAMAAR8AAgUCEswDAGqWFYBXx2+A9PsHZXhhbXBsZQNjb20ApHMxn1FV1Vb4/Y0nO4sjBSolQIFB" +
 			"UpgUodq9q2MHlpqA9cY4kQAvF0oDONfvqdT8a7BCwrzDtSbLAi0QJuU0wao6JKM3Kr4CuVWPAaPCX4gdKi5Gye1F2A+O5NKC8aBw" +
 			"eYxxEg6AP5ADyjkWYX0k7XW4c4kVkBmToYroO0kgaPQyj7AW4iznmRcXjnM4nufRjSwEfIYzIlQZ2Pf4ftaKH58DoAeouTDr0xYV" +
 			"M9F9q+78E3ZSgBJNprnOi5zo7qQcifIgshuD06cUjQ7e2Sgi1wEBUG3nyTa4qu8D7fK9oRJHIqAGeUKCAsWlC675HTdrGKBwbrjM" +
-			"41WoQkmCcclZNg==";
+			"41WoQkmCcclZNg==",
 
 	// example.com.		259200	IN	NSEC	ftp.example.com. NS SOA RRSIG NSEC
-	static String signedRecord7 =
-		"B2V4YW1wbGUDY29tAAAvAAEAA/SAABkDZnRwB2V4YW1wbGUDY29tAAAGIgAAAAAD";
+	signedRecord7 =
+		"B2V4YW1wbGUDY29tAAAvAAEAA/SAABkDZnRwB2V4YW1wbGUDY29tAAAGIgAAAAAD",
 
 	// example.com.		259200	IN	RRSIG	NSEC 5 2 259200 20260901000000 20160901000000 62715 example.com. s7BUvoJ21W5HV9Pqg0kUpMa2FmgZrCgwYBThxIbH1ZtiXRR1Q4BzxMdxypi8WetbDITNL4gnWI4BBnww2WduwO94tsTErNMrMShopZKaPn17LB2sMF4QatkfEO85OUYSUWAhtWFzRnTpdJT0UADlAmS+iE/QVGYCTJtZh15cMhPDQM8vMcXfYWrBWTe7iLHjJYMgqsXUI2RnF0qA6dx7/55rUGqC8sEk9mc8NP8bz0cuDLAplkCbG02slurXya5KnOq9LT4Gmt7ovQ6yCDs/h6S3Hbuo5mbDhK6vUPY7Ef2BSRylJlUOJZmr+p7zK9pPn2/0GBVu8rryyM7pWlheGw==
-	static String signedRecord8 =
+	signedRecord8 =
 		"B2V4YW1wbGUDY29tAAAuAAEAA/SAAR8ALwUCAAP0gGqWFYBXx2+A9PsHZXhhbXBsZQNjb20As7BUvoJ21W5HV9Pqg0kUpMa2FmgZ" +
 			"rCgwYBThxIbH1ZtiXRR1Q4BzxMdxypi8WetbDITNL4gnWI4BBnww2WduwO94tsTErNMrMShopZKaPn17LB2sMF4QatkfEO85OUYS" +
 			"UWAhtWFzRnTpdJT0UADlAmS+iE/QVGYCTJtZh15cMhPDQM8vMcXfYWrBWTe7iLHjJYMgqsXUI2RnF0qA6dx7/55rUGqC8sEk9mc8" +
 			"NP8bz0cuDLAplkCbG02slurXya5KnOq9LT4Gmt7ovQ6yCDs/h6S3Hbuo5mbDhK6vUPY7Ef2BSRylJlUOJZmr+p7zK9pPn2/0GBVu" +
-			"8rryyM7pWlheGw==";
+			"8rryyM7pWlheGw==",
 
 	// example.com.		259200	IN	RRSIG	NSEC 5 2 259200 20260901000000 20160901000000 62715 example.com. o7X99MS6Px64FfsDU+r/oC2dyq2g78RBVQA+xbbXk4NFwdoch4/eyTur3VqCGn8umriHTPIN0URY5U0nzod0SAQyT7daRlC7qnwJPpmBP5MYuOI19DoFJuqJ6Wvwu1r4xcv886tEYh68H4YRmNB2Pso34pC8An9WmUW/sKiQwb0tC4Xmcj9AMfKDgLeiWBTJEBHWqrtagywS1gvvq5VRQaz5k0K9Vb0aIimPOce/twVNpbrysNsZoR1a243msF9bUUtg5It9ZDYeCleQgtzJyBpxWcEfhWd28PSDu280ymGmyeICznrJuwg8KNB2Byh9pxNGsaw1gBxu/2hj88OT+g==
-	static String signedRecord9 =
+	signedRecord9 =
 		"B2V4YW1wbGUDY29tAAAuAAEAA/SAAR8ALwUCAAP0gGqWFYBXx2+A9PsHZXhhbXBsZQNjb20Ao7X99MS6Px64FfsDU+r/oC2dyq2g" +
 			"78RBVQA+xbbXk4NFwdoch4/eyTur3VqCGn8umriHTPIN0URY5U0nzod0SAQyT7daRlC7qnwJPpmBP5MYuOI19DoFJuqJ6Wvwu1r4" +
 			"xcv886tEYh68H4YRmNB2Pso34pC8An9WmUW/sKiQwb0tC4Xmcj9AMfKDgLeiWBTJEBHWqrtagywS1gvvq5VRQaz5k0K9Vb0aIimP" +
 			"Oce/twVNpbrysNsZoR1a243msF9bUUtg5It9ZDYeCleQgtzJyBpxWcEfhWd28PSDu280ymGmyeICznrJuwg8KNB2Byh9pxNGsaw1" +
-			"gBxu/2hj88OT+g==";
+			"gBxu/2hj88OT+g==",
 
 	// ftp.example.com.	1814400	IN	A	12.34.56.78
-	static String signedRecord10 =
-		"A2Z0cAdleGFtcGxlA2NvbQAAAQABABuvgAAEDCI4Tg==";
+	signedRecord10 =
+		"A2Z0cAdleGFtcGxlA2NvbQAAAQABABuvgAAEDCI4Tg==",
 
 	// ftp.example.com.	1814400	IN	A	21.43.65.87
-	static String signedRecord11 =
-		"A2Z0cAdleGFtcGxlA2NvbQAAAQABABuvgAAEFStBVw==";
+	signedRecord11 =
+		"A2Z0cAdleGFtcGxlA2NvbQAAAQABABuvgAAEFStBVw==",
 
 	// ftp.example.com.	1814400	IN	RRSIG	A 5 3 1814400 20260901000000 20160901000000 62715 example.com. E4nQ6QA1Q0knYeCevRX3nxWWOUkfZ2ZiVzxkFBplIZpegVqLBNsIbeh/2kjuFHm7TX9fENiTC/uRfcVOq9sEb3gaBaD88gqqzKZ4qhWOPU0gnIQARa45K0GatP3WPgL8eeHhnZF9diIdK5M/sX6XxRte0bJry5hi4HFkDbXmlsWjvNMyrlrCmw/AWYYGI4kqR8jUKf4BJIdT7DQ+3Ch4MDcEU2PfO1R6iHwfWUVeGRRg+aw8Uqht1S/Cx+fo44kowicV4o3+RwTWRW6UbWvF5b5vjLjByIzg8MvzCcGPnUdwKKfZBLT1WC02LXVRa/19C3RKgHzK5AGFeRWiKs9PNA==
-	static String signedRecord12 =
+	signedRecord12 =
 		"A2Z0cAdleGFtcGxlA2NvbQAALgABABuvgAEfAAEFAwAbr4BqlhWAV8dvgPT7B2V4YW1wbGUDY29tABOJ0OkANUNJJ2Hgnr0V958V" +
 			"ljlJH2dmYlc8ZBQaZSGaXoFaiwTbCG3of9pI7hR5u01/XxDYkwv7kX3FTqvbBG94GgWg/PIKqsymeKoVjj1NIJyEAEWuOStBmrT9" +
 			"1j4C/Hnh4Z2RfXYiHSuTP7F+l8UbXtGya8uYYuBxZA215pbFo7zTMq5awpsPwFmGBiOJKkfI1Cn+ASSHU+w0PtwoeDA3BFNj3ztU" +
 			"eoh8H1lFXhkUYPmsPFKobdUvwsfn6OOJKMInFeKN/kcE1kVulG1rxeW+b4y4wciM4PDL8wnBj51HcCin2QS09VgtNi11UWv9fQt0" +
-			"SoB8yuQBhXkVoirPTzQ=";
+			"SoB8yuQBhXkVoirPTzQ=",
 
 	// ftp.example.com.	1814400	IN	RRSIG	A 5 3 1814400 20260901000000 20160901000000 62715 example.com. nZusmWoKUBqvWAbKIqU6rvZgWQt3Sdzy7Xi9NMpJKfhfZdyE87cfsxPDf6/PHOy2+bPxHri2dE5OsPkWsdLbtRNvpne+Gh8L4cO8VdgbfhnAlI/9VGn3r8cwNHyuiYjH02Rqpm2HZHCi7rnUHJmwxvQNfUyIXETOpyR4lDLGEG6FeDuojNm9fw68cosROASn0Zlzk0991MbqMhi7TUsIfgJAWZQc9Ttzr5CORtSyA19gZMCJMiEJuU5jJXJpizC13DiUEKpWDTfYB8PnDd+lh0oTKAWc1dmFl3pNRuU9CUIABQRHidoDVCjr+6N5j4BkPWQnG/CrVhKerRbUtU3uWQ==
-	static String signedRecord13 =
+	signedRecord13 =
 		"A2Z0cAdleGFtcGxlA2NvbQAALgABABuvgAEfAAEFAwAbr4BqlhWAV8dvgPT7B2V4YW1wbGUDY29tAJ2brJlqClAar1gGyiKlOq72" +
 			"YFkLd0nc8u14vTTKSSn4X2XchPO3H7MTw3+vzxzstvmz8R64tnROTrD5FrHS27UTb6Z3vhofC+HDvFXYG34ZwJSP/VRp96/HMDR8" +
 			"romIx9NkaqZth2Rwou651ByZsMb0DX1MiFxEzqckeJQyxhBuhXg7qIzZvX8OvHKLETgEp9GZc5NPfdTG6jIYu01LCH4CQFmUHPU7" +
 			"c6+QjkbUsgNfYGTAiTIhCblOYyVyaYswtdw4lBCqVg032AfD5w3fpYdKEygFnNXZhZd6TUblPQlCAAUER4naA1Qo6/ujeY+AZD1k" +
-			"Jxvwq1YSnq0W1LVN7lk=";
+			"Jxvwq1YSnq0W1LVN7lk=",
 
 	// ftp.example.com.	259200	IN	AAAA	2001:db8:0:0:12:34:56:78
-	static String signedRecord14 =
-		"A2Z0cAdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAAEgA0AFYAeA==";
+	signedRecord14 =
+		"A2Z0cAdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAAEgA0AFYAeA==",
 
 	// ftp.example.com.	259200	IN	AAAA	2001:db8:0:0:21:43:65:87
-	static String signedRecord15 =
-		"A2Z0cAdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAAIQBDAGUAhw==";
+	signedRecord15 =
+		"A2Z0cAdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAAIQBDAGUAhw==",
 
 	// ftp.example.com.	259200	IN	RRSIG	AAAA 5 3 259200 20260901000000 20160901000000 62715 example.com. dZlga09LK/1VFHmE1RSU6JgOk5z6Aa8lrT9gT7/1srtXFauFvhe2dEtaIC8wWuv05ee1Hv+f5xd4YrQyXSUj3Fb+sGRWG6Uo9qAH8BJ4J8ckxWztL61pxlQGDKEblA8nq8/mRKXLmgpkcag8SIFr1BlgPaEP0eRjxdyBlBHb5R9KCEkw9ypzaF8AKrLWmbJFNIAqCryiihFNg0hdft/dGKwr6rKj5T2p1Cs8k5eLT2AtW2w2BsoTGr4ndYdZv7Qok94MQZ21GnOhSrLxf8mwz0uWhUEZPvR1Ef4WOeAsF+NrEuMhkAxIEv/tze4YKbnigCeolMB9oryO11aFu4UJKA==
-	static String signedRecord16 =
+	signedRecord16 =
 		"A2Z0cAdleGFtcGxlA2NvbQAALgABAAP0gAEfABwFAwAD9IBqlhWAV8dvgPT7B2V4YW1wbGUDY29tAHWZYGtPSyv9VRR5hNUUlOiY" +
 			"DpOc+gGvJa0/YE+/9bK7VxWrhb4XtnRLWiAvMFrr9OXntR7/n+cXeGK0Ml0lI9xW/rBkVhulKPagB/ASeCfHJMVs7S+tacZUBgyh" +
 			"G5QPJ6vP5kSly5oKZHGoPEiBa9QZYD2hD9HkY8XcgZQR2+UfSghJMPcqc2hfACqy1pmyRTSAKgq8oooRTYNIXX7f3RisK+qyo+U9" +
 			"qdQrPJOXi09gLVtsNgbKExq+J3WHWb+0KJPeDEGdtRpzoUqy8X/JsM9LloVBGT70dRH+FjngLBfjaxLjIZAMSBL/7c3uGCm54oAn" +
-			"qJTAfaK8jtdWhbuFCSg=";
+			"qJTAfaK8jtdWhbuFCSg=",
 
 	// ftp.example.com.	259200	IN	RRSIG	AAAA 5 3 259200 20260901000000 20160901000000 62715 example.com. tLOODQVeROFNZQeaptvs+i+8lRyx2GCx4aAXIHf5LfeIwubuJxe+nwbSjYWmO5vDLmt1Eyl4ovcnTTyQig5ZUlFjaCiS/LxhGAHAQ0azBPaBCtOJi8i6ptTq0yz/9Bksq23UxWvM7VmAsj/1rTWy+ohUcqHEzDdc4HDeaChGRAOuw9OqeUNpS6uLLtfBVWe3XdoHPPVQz6y4AFHpyzfTts3cHl+97BLDAzDsVdiQiJwMVzh/3xinGqeu/Z2NRkqarRb0vqPB+nPgRAGBXPVT3nzAjaQ8Tuo4VWCqXTwtncoveXAZ4ejmMG9yubWeKy4LCDQ/Drd/TppBYYo/BcbvMg==
-	static String signedRecord17 =
+	signedRecord17 =
 		"A2Z0cAdleGFtcGxlA2NvbQAALgABAAP0gAEfABwFAwAD9IBqlhWAV8dvgPT7B2V4YW1wbGUDY29tALSzjg0FXkThTWUHmqbb7Pov" +
 			"vJUcsdhgseGgFyB3+S33iMLm7icXvp8G0o2Fpjubwy5rdRMpeKL3J008kIoOWVJRY2gokvy8YRgBwENGswT2gQrTiYvIuqbU6tMs" +
 			"//QZLKtt1MVrzO1ZgLI/9a01svqIVHKhxMw3XOBw3mgoRkQDrsPTqnlDaUuriy7XwVVnt13aBzz1UM+suABR6cs307bN3B5fvewS" +
 			"wwMw7FXYkIicDFc4f98Ypxqnrv2djUZKmq0W9L6jwfpz4EQBgVz1U958wI2kPE7qOFVgql08LZ3KL3lwGeHo5jBvcrm1nisuCwg0" +
-			"Pw63f06aQWGKPwXG7zI=";
+			"Pw63f06aQWGKPwXG7zI=",
 
 	// ftp.example.com.	259200	IN	NSEC	mirror.ftp.example.com. A AAAA RRSIG NSEC
-	static String signedRecord18 =
-		"A2Z0cAdleGFtcGxlA2NvbQAALwABAAP0gAAgBm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAAZAAAAIAAM=";
+	signedRecord18 =
+		"A2Z0cAdleGFtcGxlA2NvbQAALwABAAP0gAAgBm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAAZAAAAIAAM=",
 
 	// ftp.example.com.	259200	IN	RRSIG	NSEC 5 3 259200 20260901000000 20160901000000 62715 example.com. JAqwuvRx7rYuMiAJZ7IeOiFi3wg5QxSY0/CV4J3dR8TiTkeSNvbSs6iHV3ysyIXIHlAn9elUyfpree6wCrNTgCFCpuZ4XX9nJaBf9Y5mTo0rOStOWB+/xuQfdt71LN4Z1OpTwjptjDlU3+k/h4aQUPJGpfUf6qtvuvDuF+a6/0P0dY03XCWrc2oGme8uHHKXp5M5c3UzMCD4FEx3E5aBk9ZHYx4lSY/TAUeTGfCMCPMUjfDxZbXfKL6NX7RZDZomFXHTFsEL37lAgDIL834MKPhkhGbJcefL8kuT4gAhXhQsZSQy/VL61arYWFQ55i7a8hz97opFyHjNKaezN0C/7A==
-	static String signedRecord19 =
+	signedRecord19 =
 		"A2Z0cAdleGFtcGxlA2NvbQAALgABAAP0gAEfAC8FAwAD9IBqlhWAV8dvgPT7B2V4YW1wbGUDY29tACQKsLr0ce62LjIgCWeyHjoh" +
 			"Yt8IOUMUmNPwleCd3UfE4k5Hkjb20rOoh1d8rMiFyB5QJ/XpVMn6a3nusAqzU4AhQqbmeF1/ZyWgX/WOZk6NKzkrTlgfv8bkH3be" +
 			"9SzeGdTqU8I6bYw5VN/pP4eGkFDyRqX1H+qrb7rw7hfmuv9D9HWNN1wlq3NqBpnvLhxyl6eTOXN1MzAg+BRMdxOWgZPWR2MeJUmP" +
 			"0wFHkxnwjAjzFI3w8WW13yi+jV+0WQ2aJhVx0xbBC9+5QIAyC/N+DCj4ZIRmyXHny/JLk+IAIV4ULGUkMv1S+tWq2FhUOeYu2vIc" +
-			"/e6KRch4zSmnszdAv+w=";
+			"/e6KRch4zSmnszdAv+w=",
 
 	// ftp.example.com.	259200	IN	RRSIG	NSEC 5 3 259200 20260901000000 20160901000000 62715 example.com. kyMPSnQ/SpCrep6Vm3/CODGqQs2LCHEMu+He3pXxn5HnNriI8U8S4va77epIozhZN016EIkXxe1XTJLezzxQy2G9RPP5rf2I3/nPdFV0GiV/e/ah00xuWw57ZQb1Qf9MO5+Qbe09J4P39Afxx8jbRaLQ/QJmcJOxr0CF3zJyBoHYco62bro9kKSOxECuQ92J9rI6EVGlAVPF5prOVhXcWPP78p6Xk80qN6gFNnaIkLs9KvLQ+arF5G3N5I5LNRHnck22fR14gJGf127bmjAp5m3oFLET1FH0Gl5m+r+zp49UUZGPfLXkhPvkMjBbraFGTUGujryroCrKw2OYlNMY8A==
-	static String signedRecord20 =
+	signedRecord20 =
 		"A2Z0cAdleGFtcGxlA2NvbQAALgABAAP0gAEfAC8FAwAD9IBqlhWAV8dvgPT7B2V4YW1wbGUDY29tAJMjD0p0P0qQq3qelZt/wjgx" +
 			"qkLNiwhxDLvh3t6V8Z+R5za4iPFPEuL2u+3qSKM4WTdNehCJF8XtV0yS3s88UMthvUTz+a39iN/5z3RVdBolf3v2odNMblsOe2UG" +
 			"9UH/TDufkG3tPSeD9/QH8cfI20Wi0P0CZnCTsa9Ahd8ycgaB2HKOtm66PZCkjsRArkPdifayOhFRpQFTxeaazlYV3Fjz+/Kel5PN" +
 			"KjeoBTZ2iJC7PSry0PmqxeRtzeSOSzUR53JNtn0deICRn9du25owKeZt6BSxE9RR9BpeZvq/s6ePVFGRj3y15IT75DIwW62hRk1B" +
-			"ro68q6AqysNjmJTTGPA=";
+			"ro68q6AqysNjmJTTGPA=",
 
 	// mirror.ftp.example.com.	315360000	IN	CNAME	ftp.example.com.
-	static String signedRecord21 =
-		"Bm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAAUAARLMAwAAEQNmdHAHZXhhbXBsZQNjb20A";
+	signedRecord21 =
+		"Bm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAAUAARLMAwAAEQNmdHAHZXhhbXBsZQNjb20A",
 
 	// mirror.ftp.example.com.	315360000	IN	RRSIG	CNAME 5 4 315360000 20260901000000 20160901000000 62715 example.com. l4MKlMYFR997yhH5ltWPzTUjxjZbQnCE1/cH7pBBi0Ha4zuvfbHiDXc4b1KwgYUXfn7ONUvF9OJtAC6f45jHUVeN+GxdoDs0JOKkXpE8g8z41HcXCDvThhLg2omtWS9QJRUs23B2NnfYRCGzpwCmeWQX1jcOfUncOLDTqlfuKf6b6KQUiHQA/2bff4iwuN+UXlKqGi2kVRTEd94K/AoM1C7z13KzPuFMO8HUhjUjVZu+cJ8o8sqe3LgBCmxWdzh7BB/rZNC9wMi3ZsLfoStWjHFWrrJdQntB1dEX9fLoegVFbljNAR639dkSONA4AeKoS5LdqDQwANb1TbHueUYLDQ==
-	static String signedRecord22 =
+	signedRecord22 =
 		"Bm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAC4AARLMAwABHwAFBQQSzAMAapYVgFfHb4D0+wdleGFtcGxlA2NvbQCXgwqUxgVH33vK" +
 			"EfmW1Y/NNSPGNltCcITX9wfukEGLQdrjO699seINdzhvUrCBhRd+fs41S8X04m0ALp/jmMdRV434bF2gOzQk4qRekTyDzPjUdxcI" +
 			"O9OGEuDaia1ZL1AlFSzbcHY2d9hEIbOnAKZ5ZBfWNw59Sdw4sNOqV+4p/pvopBSIdAD/Zt9/iLC435ReUqoaLaRVFMR33gr8CgzU" +
 			"LvPXcrM+4Uw7wdSGNSNVm75wnyjyyp7cuAEKbFZ3OHsEH+tk0L3AyLdmwt+hK1aMcVausl1Ce0HV0Rf18uh6BUVuWM0BHrf12RI4" +
-			"0DgB4qhLkt2oNDAA1vVNse55RgsN";
+			"0DgB4qhLkt2oNDAA1vVNse55RgsN",
 
 	// mirror.ftp.example.com.	315360000	IN	RRSIG	CNAME 5 4 315360000 20260901000000 20160901000000 62715 example.com. EjC9SWMbebxzWw67O/dcXuzz8xnDe6JWwH0mthKAG6y4ZIkj877AYqDs8sSFFLrhJRz1TVabn7dm+tESfCqcRoeqiAPGBfMyQIqZjwqzxnIISgBRNP3xcKjCPoEYiDX9bbAiIvzBYDW4qTdpR1HzYFkmNPYJUzW09g86y8q377GvoTXOGuTgr7Rda8e/ol4dxAh609rmq7XESVeatuhoTPt+MoKjmNKfky2W/eqabdHj18AF/aUzD15b+2ZVdrxsCi+WE7O14oHJDsVES1fIgxLZmP+P217P5WHAMWyLmHprCcm6evWZ5hPrLf12YYSQZioYRbN0idePORF7/DkrGg==
-	static String signedRecord23 =
+	signedRecord23 =
 		"Bm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAC4AARLMAwABHwAFBQQSzAMAapYVgFfHb4D0+wdleGFtcGxlA2NvbQASML1JYxt5vHNb" +
 			"Drs791xe7PPzGcN7olbAfSa2EoAbrLhkiSPzvsBioOzyxIUUuuElHPVNVpuft2b60RJ8KpxGh6qIA8YF8zJAipmPCrPGcghKAFE0" +
 			"/fFwqMI+gRiINf1tsCIi/MFgNbipN2lHUfNgWSY09glTNbT2DzrLyrfvsa+hNc4a5OCvtF1rx7+iXh3ECHrT2uartcRJV5q26GhM" +
 			"+34ygqOY0p+TLZb96ppt0ePXwAX9pTMPXlv7ZlV2vGwKL5YTs7XigckOxURLV8iDEtmY/4/bXs/lYcAxbIuYemsJybp69ZnmE+st" +
-			"/XZhhJBmKhhFs3SJ1485EXv8OSsa";
+			"/XZhhJBmKhhFs3SJ1485EXv8OSsa",
 
 	// mirror.ftp.example.com.	259200	IN	NSEC	www.example.com. CNAME RRSIG NSEC
-	static String signedRecord24 =
-		"Bm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAC8AAQAD9IAAGQN3d3cHZXhhbXBsZQNjb20AAAYEAAAAAAM=";
+	signedRecord24 =
+		"Bm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAC8AAQAD9IAAGQN3d3cHZXhhbXBsZQNjb20AAAYEAAAAAAM=",
 
 	// mirror.ftp.example.com.	259200	IN	RRSIG	NSEC 5 4 259200 20260901000000 20160901000000 62715 example.com. p1/1knEZm6vWTIxb4IwZO77r2UXXTuyWWnRxECWCqsVxscBmIa24SwB0wsA6+VWdmjqahNdfATrQ5a22i6Bwv5O17x10dLEIFbSjCFIn91OlfYrys4xoqGW/yYsPWr1WIcq7A5HprxU9Wy5yiztNg2DPz7v8boN6hHUop3td8kj/6Myh4I5KBAwPCRNaJ02bX+Dm/SsexmWg3bPb7PUEPiXBCrqnVv4NXuzuu++7j9TV8nJ9LDjuVqTKxR5G5isXS/4od+G8QXkmWM3HaDO4zYLnMm2I47V6gGS/EUoPim/2y1e5aBKF0f3JVL7xMQgBQkLZBo5OjH8GFAgSlSP9kg==
-	static String signedRecord25 =
+	signedRecord25 =
 		"Bm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAC4AAQAD9IABHwAvBQQAA/SAapYVgFfHb4D0+wdleGFtcGxlA2NvbQCnX/WScRmbq9ZM" +
 			"jFvgjBk7vuvZRddO7JZadHEQJYKqxXGxwGYhrbhLAHTCwDr5VZ2aOpqE118BOtDlrbaLoHC/k7XvHXR0sQgVtKMIUif3U6V9ivKz" +
 			"jGioZb/Jiw9avVYhyrsDkemvFT1bLnKLO02DYM/Pu/xug3qEdSine13ySP/ozKHgjkoEDA8JE1onTZtf4Ob9Kx7GZaDds9vs9QQ+" +
 			"JcEKuqdW/g1e7O6777uP1NXycn0sOO5WpMrFHkbmKxdL/ih34bxBeSZYzcdoM7jNgucybYjjtXqAZL8RSg+Kb/bLV7loEoXR/clU" +
-			"vvExCAFCQtkGjk6MfwYUCBKVI/2S";
+			"vvExCAFCQtkGjk6MfwYUCBKVI/2S",
 
 	// mirror.ftp.example.com.	259200	IN	RRSIG	NSEC 5 4 259200 20260901000000 20160901000000 62715 example.com. bVTQLgj1q1iKDHYO5XJt3IsyDhWefFv5qyX9d11DUPk4m81KAf7ObF2auo+QKKbjHs6PV0Yj9i1djqSpfh2FrYoCPdLH3jKHMJsjKihKwBGpWv5otm1nb/r1jFTYgfDKu4Ru0JRykhNiKWcMaVo3QM14NdOI1l/96zp4KTO/b5qjePoj8KKYceYPXHV2oaqXIZrjptPcjyR1RPg2ahZ1MihG7kXC4k4L+BKuj+7V2EKoLf9eOyE3JqP29FxKNbQC+FDNkd5mZT4lAiGYwz08DGXNSo65G0/FrXr6EQQx0yghnWJRw+UeCu3sAbhq9ErjhvhbFsf5q0+Jm+KTioE/0w==
-	static String signedRecord26 =
+	signedRecord26 =
 		"Bm1pcnJvcgNmdHAHZXhhbXBsZQNjb20AAC4AAQAD9IABHwAvBQQAA/SAapYVgFfHb4D0+wdleGFtcGxlA2NvbQBtVNAuCPWrWIoM" +
 			"dg7lcm3cizIOFZ58W/mrJf13XUNQ+TibzUoB/s5sXZq6j5AopuMezo9XRiP2LV2OpKl+HYWtigI90sfeMocwmyMqKErAEala/mi2" +
 			"bWdv+vWMVNiB8Mq7hG7QlHKSE2IpZwxpWjdAzXg104jWX/3rOngpM79vmqN4+iPwophx5g9cdXahqpchmuOm09yPJHVE+DZqFnUy" +
 			"KEbuRcLiTgv4Eq6P7tXYQqgt/147ITcmo/b0XEo1tAL4UM2R3mZlPiUCIZjDPTwMZc1KjrkbT8WtevoRBDHTKCGdYlHD5R4K7ewB" +
-			"uGr0SuOG+FsWx/mrT4mb4pOKgT/T";
+			"uGr0SuOG+FsWx/mrT4mb4pOKgT/T",
 
 	// www.example.com.	1814400	IN	A	11.22.33.44
-	static String signedRecord27 =
-		"A3d3dwdleGFtcGxlA2NvbQAAAQABABuvgAAECxYhLA==";
+	signedRecord27 =
+		"A3d3dwdleGFtcGxlA2NvbQAAAQABABuvgAAECxYhLA==",
 
 	// www.example.com.	1814400	IN	A	55.66.77.88
-	static String signedRecord28 =
-		"A3d3dwdleGFtcGxlA2NvbQAAAQABABuvgAAEN0JNWA==";
+	signedRecord28 =
+		"A3d3dwdleGFtcGxlA2NvbQAAAQABABuvgAAEN0JNWA==",
 
 	// www.example.com.	1814400	IN	RRSIG	A 5 3 1814400 20260901000000 20160901000000 62715 example.com. re97TYjxeOeiamfnIbIbws6X5sTwCFgmoCP7H7Hs09fRMYzh7seW/yzYvgdFVKLFBNRT3edKS01bJrAc5qSqM74BNPhY9ieQOIAd9kv+zCLv4tI+w9ax0AZ9ThJ841ldzhjLwtsH1J8MDkFBRxwkrnQ0T7VlnJ+dSNrv/0G1ju6i8PV3JtTm293XTgS3Ys9pPd8ntbC4YdbeZuqFgVTmnZudFzM/aNCgnSbXEEC48s2Ad8t5kM30q5NNOi901byhv3PVq8YvumJtxui9PamxjLJ4oc/YSBAnd/6rzWSXs6wtG9A6IAWAFGiLPUxl1r7mgzslFkpq/Ve+Ranaht1agA==
-	static String signedRecord29 =
+	signedRecord29 =
 		"A3d3dwdleGFtcGxlA2NvbQAALgABABuvgAEfAAEFAwAbr4BqlhWAV8dvgPT7B2V4YW1wbGUDY29tAK3ve02I8Xjnompn5yGyG8LO" +
 			"l+bE8AhYJqAj+x+x7NPX0TGM4e7Hlv8s2L4HRVSixQTUU93nSktNWyawHOakqjO+ATT4WPYnkDiAHfZL/swi7+LSPsPWsdAGfU4S" +
 			"fONZXc4Yy8LbB9SfDA5BQUccJK50NE+1ZZyfnUja7/9BtY7uovD1dybU5tvd104Et2LPaT3fJ7WwuGHW3mbqhYFU5p2bnRczP2jQ" +
 			"oJ0m1xBAuPLNgHfLeZDN9KuTTTovdNW8ob9z1avGL7pibcbovT2psYyyeKHP2EgQJ3f+q81kl7OsLRvQOiAFgBRoiz1MZda+5oM7" +
-			"JRZKav1XvkWp2obdWoA=";
+			"JRZKav1XvkWp2obdWoA=",
 
 	// www.example.com.	1814400	IN	RRSIG	A 5 3 1814400 20260901000000 20160901000000 62715 example.com. sCA0eCHilmA+T1myVClApGUI3j6tOJ5LfL6jOHGJC2QDwAs1WZ6NH+Rnxah9am1REqs2R0wkzcogTwpB8jTEPgud3k6r/UxqrjqVkO3Bn2OzkxOj5O+8n6IKP+Ihb2d3TgGoI/XJyp0hDCDwn4tOmEMm8vJJkRvqRVpIhep3K93mLGrUUTeqLn1zrihE6FJW8F8cK0XhXSgsHtpaP6Z0Di4M9pvSzf7C8dficMR9j2cB0eOofR5dh1ZNO+QLRMcjZzCBFpjd8WdTKPeMwMqyS0JsFb4a2pDuMdwB6gKntpZag28i9+IpIpfxd38nwg3j0DmqiSz1Ae4o65Cn27K5qA==
-	static String signedRecord30 =
+	signedRecord30 =
 		"A3d3dwdleGFtcGxlA2NvbQAALgABABuvgAEfAAEFAwAbr4BqlhWAV8dvgPT7B2V4YW1wbGUDY29tALAgNHgh4pZgPk9ZslQpQKRl" +
 			"CN4+rTieS3y+ozhxiQtkA8ALNVmejR/kZ8WofWptURKrNkdMJM3KIE8KQfI0xD4Lnd5Oq/1Maq46lZDtwZ9js5MTo+TvvJ+iCj/i" +
 			"IW9nd04BqCP1ycqdIQwg8J+LTphDJvLySZEb6kVaSIXqdyvd5ixq1FE3qi59c64oROhSVvBfHCtF4V0oLB7aWj+mdA4uDPab0s3+" +
 			"wvHX4nDEfY9nAdHjqH0eXYdWTTvkC0THI2cwgRaY3fFnUyj3jMDKsktCbBW+GtqQ7jHcAeoCp7aWWoNvIvfiKSKX8Xd/J8IN49A5" +
-			"qoks9QHuKOuQp9uyuag=";
+			"qoks9QHuKOuQp9uyuag=",
 
 	// www.example.com.	315360000	IN	TXT	"dead0123456789"
-	static String signedRecord31 =
-		"A3d3dwdleGFtcGxlA2NvbQAAEAABEswDAAAPDmRlYWQwMTIzNDU2Nzg5";
+	signedRecord31 =
+		"A3d3dwdleGFtcGxlA2NvbQAAEAABEswDAAAPDmRlYWQwMTIzNDU2Nzg5",
 
 	// www.example.com.	315360000	IN	RRSIG	TXT 5 3 315360000 20260901000000 20160901000000 62715 example.com. jRqGBr6fQ91Z5ND1IbWRthEmQ9uxOMkjqpketlUjU6Nztu+Xi3Nz7OYCqAqAyuDXFLiGu9DffDa9kEh3lI9VPvWvNpaOv7mQ/hiHUzdJtBJJw4uXeC9lnKgpaWDghZQN4QyVD4nj7Vtq2AUF9WD7Pi7dVBLBNhzps9/VL8rAkNP2b57U3nFT1kwHmmtKXlKeurOvJNR9Qr1pGoIkrVj6qvUrEhS3iIXrU4e+WkeJ43spdeYMA/Gn/+zsvX68BCytjnwIPlUubgY8ew06eidd99OFqg8oLSSqzmuNB8M5Augkow0ZRCMDrGWeugvcRQqI6dtBeR5vG4lYAROfaprd/w==
-	static String signedRecord32 =
+	signedRecord32 =
 		"A3d3dwdleGFtcGxlA2NvbQAALgABEswDAAEfABAFAxLMAwBqlhWAV8dvgPT7B2V4YW1wbGUDY29tAI0ahga+n0PdWeTQ9SG1kbYR" +
 			"JkPbsTjJI6qZHrZVI1Ojc7bvl4tzc+zmAqgKgMrg1xS4hrvQ33w2vZBId5SPVT71rzaWjr+5kP4Yh1M3SbQSScOLl3gvZZyoKWlg" +
 			"4IWUDeEMlQ+J4+1batgFBfVg+z4u3VQSwTYc6bPf1S/KwJDT9m+e1N5xU9ZMB5prSl5SnrqzryTUfUK9aRqCJK1Y+qr1KxIUt4iF" +
 			"61OHvlpHieN7KXXmDAPxp//s7L1+vAQsrY58CD5VLm4GPHsNOnonXffThaoPKC0kqs5rjQfDOQLoJKMNGUQjA6xlnroL3EUKiOnb" +
-			"QXkebxuJWAETn2qa3f8=";
+			"QXkebxuJWAETn2qa3f8=",
 
 	// www.example.com.	315360000	IN	RRSIG	TXT 5 3 315360000 20260901000000 20160901000000 62715 example.com. D1bnE1hTUSfI5jJyqiDWanvrqGzKiGF5QSXXIhu1dorNuZmy3Q2wO3SQWO20jYpsfOx08Nw159VsEofLgXUGKtAnfoEMBhCnQ+RHnDhqnFkPz+8k4pIRVq4hCiyN5pTiJQVu25ou3YnHsK3e3aWkpuOiByRChp6ix6VFMoYWe7I4wvzi+XMWbfPHpgKLdBgE7DkpM7l+oIRKX/K0tbKZcdY2yUit1hil38JSftAqZRibLuu3EBl3Aw5ChTPc2czVmZiRyI1pCQMOgw0dDK+jgBCfRTaZeaZTJRq0F8Ja14LKLAletdHMVFMcdNGWp2QdACGp/stHnhX2qKOb/Lwq9A==
-	static String signedRecord33 =
+	signedRecord33 =
 		"A3d3dwdleGFtcGxlA2NvbQAALgABEswDAAEfABAFAxLMAwBqlhWAV8dvgPT7B2V4YW1wbGUDY29tAA9W5xNYU1EnyOYycqog1mp7" +
 			"66hsyohheUEl1yIbtXaKzbmZst0NsDt0kFjttI2KbHzsdPDcNefVbBKHy4F1BirQJ36BDAYQp0PkR5w4apxZD8/vJOKSEVauIQos" +
 			"jeaU4iUFbtuaLt2Jx7Ct3t2lpKbjogckQoaeoselRTKGFnuyOML84vlzFm3zx6YCi3QYBOw5KTO5fqCESl/ytLWymXHWNslIrdYY" +
 			"pd/CUn7QKmUYmy7rtxAZdwMOQoUz3NnM1ZmYkciNaQkDDoMNHQyvo4AQn0U2mXmmUyUatBfCWteCyiwJXrXRzFRTHHTRlqdkHQAh" +
-			"qf7LR54V9qijm/y8KvQ=";
+			"qf7LR54V9qijm/y8KvQ=",
 
 	// www.example.com.	259200	IN	AAAA	2001:db8:0:0:4:3:2:1
-	static String signedRecord34 =
-		"A3d3dwdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAABAADAAIAAQ==";
+	signedRecord34 =
+		"A3d3dwdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAABAADAAIAAQ==",
 
 	// www.example.com.	259200	IN	AAAA	2001:db8:0:0:5:6:7:8
-	static String signedRecord35 =
-		"A3d3dwdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAABQAGAAcACA==";
+	signedRecord35 =
+		"A3d3dwdleGFtcGxlA2NvbQAAHAABAAP0gAAQIAENuAAAAAAABQAGAAcACA==",
 
 	// www.example.com.	259200	IN	RRSIG	AAAA 5 3 259200 20260901000000 20160901000000 62715 example.com. EprMPo8kME1AluL5zllJ4i42wsDOtqM3JzN9HfHlOgFNaFyIoAVQGc/GK2mtm/Zsh1+zPYHHp1rG7roy4+OWFeWZ6ygX7TclxcA9r9TZc4XztDvyGkTC9vzLFjDEnZbe9HQM2y3NCkGWupT57Eqmj5HlNKAtt6cpUgwTR4S7/8rRO6SfTO2xQEIMqElOzFWKqcIA2WN0qGrKA2uOoQJqh1XwKHNcBM3N0ZlvIE8xPZWG16RoqApqeIG4rjJV7hyYgPkB2HTSxInoMIQoVQjFt3JNj0GM2q0BswL6UB3NKw5lwMhMiIib3rbOycL1KxA6uXzL38RvkPo1u6hJUzf+eQ==
-	static String signedRecord36 =
+	signedRecord36 =
 		"A3d3dwdleGFtcGxlA2NvbQAALgABAAP0gAEfABwFAwAD9IBqlhWAV8dvgPT7B2V4YW1wbGUDY29tABKazD6PJDBNQJbi+c5ZSeIu" +
 			"NsLAzrajNyczfR3x5ToBTWhciKAFUBnPxitprZv2bIdfsz2Bx6daxu66MuPjlhXlmesoF+03JcXAPa/U2XOF87Q78hpEwvb8yxYw" +
 			"xJ2W3vR0DNstzQpBlrqU+exKpo+R5TSgLbenKVIME0eEu//K0Tukn0ztsUBCDKhJTsxViqnCANljdKhqygNrjqECaodV8ChzXATN" +
 			"zdGZbyBPMT2VhtekaKgKaniBuK4yVe4cmID5Adh00sSJ6DCEKFUIxbdyTY9BjNqtAbMC+lAdzSsOZcDITIiIm962zsnC9SsQOrl8" +
-			"y9/Eb5D6NbuoSVM3/nk=";
+			"y9/Eb5D6NbuoSVM3/nk=",
 
 	// www.example.com.	259200	IN	RRSIG	AAAA 5 3 259200 20260901000000 20160901000000 62715 example.com. TkofVFFmlNkSNDrKqZCRcBoSKNVb+CwOzPjR+i+OU+aEgTd9cddTOezzG5knGlfT9kwv2C2T10QYnsMfLsqRuZCEpT9FMA0PF80RTiTMDHxiccufIjgThF02Hn6s6/YllwGoY3Zf5XEYu8JmlZ2IEd3eUh6beZTLpVbjnvYZHkg5/x/sf6BJ2Llpfp8KMct+2K21ct7H+IEBXa13PHVUeW6xS2bT+SbFv4OH9xdLh2P1hpQ8xNRWo4mejQ8BO5DVt2BBcr1Arw2hOIK9bA87Tb+16xfpcjEidu3Ugbcn6t4vId6oSwTXfnI42rUwzbtLskvwmdzXc+sAFK//EB9EgA==
-	static String signedRecord37 =
+	signedRecord37 =
 		"A3d3dwdleGFtcGxlA2NvbQAALgABAAP0gAEfABwFAwAD9IBqlhWAV8dvgPT7B2V4YW1wbGUDY29tAE5KH1RRZpTZEjQ6yqmQkXAa" +
 			"EijVW/gsDsz40fovjlPmhIE3fXHXUzns8xuZJxpX0/ZML9gtk9dEGJ7DHy7KkbmQhKU/RTANDxfNEU4kzAx8YnHLnyI4E4RdNh5+" +
 			"rOv2JZcBqGN2X+VxGLvCZpWdiBHd3lIem3mUy6VW4572GR5IOf8f7H+gSdi5aX6fCjHLftittXLex/iBAV2tdzx1VHlusUtm0/km" +
 			"xb+Dh/cXS4dj9YaUPMTUVqOJno0PATuQ1bdgQXK9QK8NoTiCvWwPO02/tesX6XIxInbt1IG3J+reLyHeqEsE135yONq1MM27S7JL" +
-			"8Jnc13PrABSv/xAfRIA=";
+			"8Jnc13PrABSv/xAfRIA=",
 
 	// www.example.com.	259200	IN	NSEC	mirror.www.example.com. A TXT AAAA RRSIG NSEC
-	static String signedRecord38 =
-		"A3d3dwdleGFtcGxlA2NvbQAALwABAAP0gAAgBm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAAZAAIAIAAM=";
+	signedRecord38 =
+		"A3d3dwdleGFtcGxlA2NvbQAALwABAAP0gAAgBm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAAZAAIAIAAM=",
 
 	// www.example.com.	259200	IN	RRSIG	NSEC 5 3 259200 20260901000000 20160901000000 62715 example.com. C2DCU+CiEGatnEM2dsHF0FJdr3aoHnWP1VsfEnqaNDAynnFWRS9b5rRna8qFwMxh7qDvMy+mbNBI4QgCTlPwisExvb2G1Pbz/zKbw62VaxYs6qhwzCQRsUsWiRxXMj6WeX8UozQ93opfGUpiPExZpHFJ7afQqF5E4CUeLPxxAG/HMW3ngm9QjABobTbAq5RAYtZ6mMT28jQl/PgcMuM6fpfQBxi4xpCQPucJGk9rdedTmMe3UyeMxXjoEn3dJadSszvDgillzsm3r92MdpvbCygjbrp4ki3AEGfg14dPQy7xLUV1HmN3/WMppr7YxCubOqe4PEum3z/au53k4XWJHg==
-	static String signedRecord39 =
+	signedRecord39 =
 		"A3d3dwdleGFtcGxlA2NvbQAALgABAAP0gAEfAC8FAwAD9IBqlhWAV8dvgPT7B2V4YW1wbGUDY29tAAtgwlPgohBmrZxDNnbBxdBS" +
 			"Xa92qB51j9VbHxJ6mjQwMp5xVkUvW+a0Z2vKhcDMYe6g7zMvpmzQSOEIAk5T8IrBMb29htT28/8ym8OtlWsWLOqocMwkEbFLFokc" +
 			"VzI+lnl/FKM0Pd6KXxlKYjxMWaRxSe2n0KheROAlHiz8cQBvxzFt54JvUIwAaG02wKuUQGLWepjE9vI0Jfz4HDLjOn6X0AcYuMaQ" +
 			"kD7nCRpPa3XnU5jHt1MnjMV46BJ93SWnUrM7w4IpZc7Jt6/djHab2wsoI266eJItwBBn4NeHT0Mu8S1FdR5jd/1jKaa+2MQrmzqn" +
-			"uDxLpt8/2rud5OF1iR4=";
+			"uDxLpt8/2rud5OF1iR4=",
 
 	// www.example.com.	259200	IN	RRSIG	NSEC 5 3 259200 20260901000000 20160901000000 62715 example.com. mZA6rFOmeT+kIG9QFV5uxFItow488us72IJKEPAvdAfkP55Aa6AsM3VuHJuz+PAEnXHGa8BapLcmp6DVy/CT2F/Cse7TecdPDYBFN/JJptF0iY5awvIidOMcU+K81jcrNJ8ODZIXpCnnG2b1VYnF5BjitCbGLIddhpjI3htMRQDNARRiKEyi83kBR5Z41fjh4/rmXllxj1xhm76g38KFdnEFpTaGCXX8ygjGtNcZGm1GbHVm7t6mNgqztR+JBy+KqrtxPw2GakrTEpiohb+QtDHcv0WsfhFeWA0mqvQXZ+fmsPBezRmd+SLE7CpMb3/l3L/dIOzftCmLFANgqwmcZQ==
-	static String signedRecord40 =
+	signedRecord40 =
 		"A3d3dwdleGFtcGxlA2NvbQAALgABAAP0gAEfAC8FAwAD9IBqlhWAV8dvgPT7B2V4YW1wbGUDY29tAJmQOqxTpnk/pCBvUBVebsRS" +
 			"LaMOPPLrO9iCShDwL3QH5D+eQGugLDN1bhybs/jwBJ1xxmvAWqS3Jqeg1cvwk9hfwrHu03nHTw2ARTfySabRdImOWsLyInTjHFPi" +
 			"vNY3KzSfDg2SF6Qp5xtm9VWJxeQY4rQmxiyHXYaYyN4bTEUAzQEUYihMovN5AUeWeNX44eP65l5ZcY9cYZu+oN/ChXZxBaU2hgl1" +
 			"/MoIxrTXGRptRmx1Zu7epjYKs7UfiQcviqq7cT8NhmpK0xKYqIW/kLQx3L9FrH4RXlgNJqr0F2fn5rDwXs0ZnfkixOwqTG9/5dy/" +
-			"3SDs37QpixQDYKsJnGU=";
+			"3SDs37QpixQDYKsJnGU=",
 
 	// mirror.www.example.com.	315360000	IN	CNAME	www.example.com.
-	static String signedRecord41 =
-		"Bm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAAUAARLMAwAAEQN3d3cHZXhhbXBsZQNjb20A";
+	signedRecord41 =
+		"Bm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAAUAARLMAwAAEQN3d3cHZXhhbXBsZQNjb20A",
 
 	// mirror.www.example.com.	315360000	IN	RRSIG	CNAME 5 4 315360000 20260901000000 20160901000000 62715 example.com. DwcFq7JYXV4MMD4Uz+r88qQ30BrsAhR4iOGIGEOi9KjxU3X387u+SEdb8o4bHL9iRQCTuD+Fv5UoB89yksfWbLL9Q+c9ykoL982uDfsf976I9w7oX+GBd/ow4G4oyBWBmoSrIFe/Q1o4+3Ah07qkFbxuE1r26dwt+85vAQaTnOr95nSNVTiUAtfL4gOmFr+A4qf2RU24yE7xdRrByMlW5jcyf34n7qg/yQpt6fvL4Azn+fLTj1lJVwu1FRutcut54aKrLnehhpw+2HsaguRrxig6FhjnHPEgznDgsnjPFdAatLr77sIOnobCJU1agfDzs9qPD0tFA4XxYDTP9qm7vw==
-	static String signedRecord42 =
+	signedRecord42 =
 		"Bm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAC4AARLMAwABHwAFBQQSzAMAapYVgFfHb4D0+wdleGFtcGxlA2NvbQAPBwWrslhdXgww" +
 			"PhTP6vzypDfQGuwCFHiI4YgYQ6L0qPFTdffzu75IR1vyjhscv2JFAJO4P4W/lSgHz3KSx9Zssv1D5z3KSgv3za4N+x/3voj3Duhf" +
 			"4YF3+jDgbijIFYGahKsgV79DWjj7cCHTuqQVvG4TWvbp3C37zm8BBpOc6v3mdI1VOJQC18viA6YWv4Dip/ZFTbjITvF1GsHIyVbm" +
 			"NzJ/fifuqD/JCm3p+8vgDOf58tOPWUlXC7UVG61y63nhoqsud6GGnD7YexqC5GvGKDoWGOcc8SDOcOCyeM8V0Bq0uvvuwg6ehsIl" +
-			"TVqB8POz2o8PS0UDhfFgNM/2qbu/";
+			"TVqB8POz2o8PS0UDhfFgNM/2qbu/",
 
 	// mirror.www.example.com.	315360000	IN	RRSIG	CNAME 5 4 315360000 20260901000000 20160901000000 62715 example.com. ScGf3cmXQ/rR8MG1UHuB66bi+IOxvMbRo5f9Q9J9pqtALqnomqj8LyfH6C99QqN+59paJ56yDGA0cd/JQVnRiwHgZawqZMwXXYuOPZY71TqiR4pIWGF3+u5t9wPtfNLw4uv4lOixC0tSBgze1yuFABX+s9o4IKsZvW4HXOUz6e9cLmcTaeqKiA39/SCBqPjyMLqrnxsPiCLOHK3PoryPS48aPE22K8KkAUluZ2pHOp0dnJGJlNXfQF4M4/ogjoW3c6gYpGaNeH0H/dZepXFTkgCyuKH/WB/Ql342jH6iWZRB9w2b+oSuU/ELuhLZa0Um3n4IEqaLO8ooD9X71m4kSg==
-	static String signedRecord43 =
+	signedRecord43 =
 		"Bm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAC4AARLMAwABHwAFBQQSzAMAapYVgFfHb4D0+wdleGFtcGxlA2NvbQBJwZ/dyZdD+tHw" +
 			"wbVQe4HrpuL4g7G8xtGjl/1D0n2mq0AuqeiaqPwvJ8foL31Co37n2lonnrIMYDRx38lBWdGLAeBlrCpkzBddi449ljvVOqJHikhY" +
 			"YXf67m33A+180vDi6/iU6LELS1IGDN7XK4UAFf6z2jggqxm9bgdc5TPp71wuZxNp6oqIDf39IIGo+PIwuqufGw+IIs4crc+ivI9L" +
 			"jxo8TbYrwqQBSW5nakc6nR2ckYmU1d9AXgzj+iCOhbdzqBikZo14fQf91l6lcVOSALK4of9YH9CXfjaMfqJZlEH3DZv6hK5T8Qu6" +
-			"EtlrRSbefggSpos7yigP1fvWbiRK";
+			"EtlrRSbefggSpos7yigP1fvWbiRK",
 
 	// mirror.www.example.com.	259200	IN	NSEC	example.com. CNAME RRSIG NSEC
-	static String signedRecord44 =
-		"Bm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAC8AAQAD9IAAFQdleGFtcGxlA2NvbQAABgQAAAAAAw==";
+	signedRecord44 =
+		"Bm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAC8AAQAD9IAAFQdleGFtcGxlA2NvbQAABgQAAAAAAw==",
 
 	// mirror.www.example.com.	259200	IN	RRSIG	NSEC 5 4 259200 20260901000000 20160901000000 62715 example.com. laV5u8JvO3Q8TXq3lUm+Knr4Kzk4Jj9/+BOL8vuUZhoj8WIvtFRhB7kp+uFfITxBg2lgQFQk31D3GbsNkuVMqC5v91CRMWdS26/+DIIY14yzGurmUoGRTtwcifz9hQPqUArCKt3D4KN+47PLBarMxphIBB/AgDL2d8Ut25zpVX544GINCbZf1aWulNzL0P1J1tO78IDKCYzifKUn79CwlinCPW7vLnbDglc5flUeeTW6JDF9tZwE4CeBj9UFFt9O7LzsQRTB0YNHBDJFmd9gF7fpzKU+Kk3iiOh4q5SBKkOIUXbkjDGy25pn1JGA2SpcUNjwDltpMeg/hPg6W6h7qg==
-	static String signedRecord45 =
+	signedRecord45 =
 		"Bm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAC4AAQAD9IABHwAvBQQAA/SAapYVgFfHb4D0+wdleGFtcGxlA2NvbQCVpXm7wm87dDxN" +
 			"ereVSb4qevgrOTgmP3/4E4vy+5RmGiPxYi+0VGEHuSn64V8hPEGDaWBAVCTfUPcZuw2S5UyoLm/3UJExZ1Lbr/4MghjXjLMa6uZS" +
 			"gZFO3ByJ/P2FA+pQCsIq3cPgo37js8sFqszGmEgEH8CAMvZ3xS3bnOlVfnjgYg0Jtl/Vpa6U3MvQ/UnW07vwgMoJjOJ8pSfv0LCW" +
 			"KcI9bu8udsOCVzl+VR55NbokMX21nATgJ4GP1QUW307svOxBFMHRg0cEMkWZ32AXt+nMpT4qTeKI6HirlIEqQ4hRduSMMbLbmmfU" +
-			"kYDZKlxQ2PAOW2kx6D+E+DpbqHuq";
+			"kYDZKlxQ2PAOW2kx6D+E+DpbqHuq",
 
 	// mirror.www.example.com.	259200	IN	RRSIG	NSEC 5 4 259200 20260901000000 20160901000000 62715 example.com. mx4aBYNkoizyDXpkAZ9QsOmKkAz0VDgXXP8MHosC3JeMENZrcE9CuEC1CxT7EOnkZTwxTQgBw1rmNzNZSKj8SqlaFUThyVyM8c0H43X3Yi+EuOwFGYMD8RDy9okA/WFmf+9sNfY1XeEHlJZVQ7irBV1zr3Cl3Hc7WzLmPCFgkAR5D147Z+77B0dnBT+HK39sWAifEYILYM5zsoNMZojjHCfwR4/IFxlZQEGw+e8XuxDT+ugVln40prwMNiQl4ivNT5MlR8vXBCU7frEqDN6+EfbuZlM84aFrRF3hrixUUtLM52Q6kg2oPybNYSLmdFZpv39XEQcnZmRZfXrMNSmh9Q==
-	static String signedRecord46 =
+	signedRecord46 =
 		"Bm1pcnJvcgN3d3cHZXhhbXBsZQNjb20AAC4AAQAD9IABHwAvBQQAA/SAapYVgFfHb4D0+wdleGFtcGxlA2NvbQCbHhoFg2SiLPIN" +
 			"emQBn1Cw6YqQDPRUOBdc/wweiwLcl4wQ1mtwT0K4QLULFPsQ6eRlPDFNCAHDWuY3M1lIqPxKqVoVROHJXIzxzQfjdfdiL4S47AUZ" +
 			"gwPxEPL2iQD9YWZ/72w19jVd4QeUllVDuKsFXXOvcKXcdztbMuY8IWCQBHkPXjtn7vsHR2cFP4crf2xYCJ8RggtgznOyg0xmiOMc" +
 			"J/BHj8gXGVlAQbD57xe7ENP66BWWfjSmvAw2JCXiK81PkyVHy9cEJTt+sSoM3r4R9u5mUzzhoWtEXeGuLFRS0sznZDqSDag/Js1h" +
-			"IuZ0Vmm/f1cRBydmZFl9esw1KaH1";
+			"IuZ0Vmm/f1cRBydmZFl9esw1KaH1",
 
 	// example.com.		1234000	IN	DS	17515 5 2 26EA264309D0568C5E7EC7DF412A5CB03CE2EACAAEE366B2F66D23611C0D7BF5
-	static String dsRecord0 =
-		"B2V4YW1wbGUDY29tAAArAAEAEtRQACREawUCJuomQwnQVoxefsffQSpcsDzi6squ42ay9m0jYRwNe/U=";
+	dsRecord0 =
+		"B2V4YW1wbGUDY29tAAArAAEAEtRQACREawUCJuomQwnQVoxefsffQSpcsDzi6squ42ay9m0jYRwNe/U=",
 
 	// example.com.		1234000	IN	DS	17515 5 2 26EA264309D0568C5E7EC7DF412A5CB03CE2EACAAEE366B2F66D23611C0D7BF5
-	static String dsRecord1 =
-		"B2V4YW1wbGUDY29tAAArAAEAEtRQACREawUCJuomQwnQVoxefsffQSpcsDzi6squ42ay9m0jYRwNe/U=";
+	dsRecord1 =
+		"B2V4YW1wbGUDY29tAAArAAEAEtRQACREawUCJuomQwnQVoxefsffQSpcsDzi6squ42ay9m0jYRwNe/U=",
 
 	// example.com.		31556952	IN	DNSKEY	256 3 5 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAymLTAjeDfcIYUKyGqKhUrl/khgBJA9TNqrzZOfMmNFarbONxDnsd6WoHnqi5xGrNBV6ZGIGwc4tebG/XWBOVvI7Pb10ZHjm4muKnzA9Qt+TOwpukN/phOzDwFZx+QHHu18jePgmFstoSUJzb4baPSoLorCYbRKdIAHhSEALfL5LE8ByP/MwWCO6jD0wEZlzGsnow5wxnuVWhBt8FMpRN9FgrJ3YkfTxKz8IZpSx2yjf9IIa/lGvKxcUoAyrdWam14l3fBTI6tfx2nWv56L846wXjqtcZvQeO0ewFdwNw2kWTT01kWeG6lXa1yo6CARkvVaF9zcrVNxWUm7CIvKibwQIDAQAB
 	// keytag 62715
-	public static String zoneDnsKeyRecord =
+	zoneDnsKeyRecord =
 		"ZXhhbXBsZS5jb20uCQkzMTU1Njk1MglJTglETlNLRVkJMjU2IDMgNSBNSUlCSWpBTkJna3Foa2lH\nOXcwQkFRRUZBQU9DQVE4QU" +
 			"1JSUJDZ0tDQVFFQXltTFRBamVEZmNJWVVLeUdxS2hVcmwva2hnQkpB\nOVROcXJ6Wk9mTW1ORmFyYk9OeERuc2Q2V29IbnFpNXhH" +
 			"ck5CVjZaR0lHd2M0dGViRy9YV0JPVnZJ\nN1BiMTBaSGptNG11S256QTlRdCtUT3dwdWtOL3BoT3pEd0ZaeCtRSEh1MThqZVBnbU" +
 			"ZzdG9TVUp6\nYjRiYVBTb0xvckNZYlJLZElBSGhTRUFMZkw1TEU4QnlQL013V0NPNmpEMHdFWmx6R3Nub3c1d3hu\ndVZXaEJ0OE" +
 			"ZNcFJOOUZnckozWWtmVHhLejhJWnBTeDJ5amY5SUlhL2xHdkt4Y1VvQXlyZFdhbTE0\nbDNmQlRJNnRmeDJuV3Y1Nkw4NDZ3WGpx" +
-			"dGNadlFlTzBld0Zkd053MmtXVFQwMWtXZUc2bFhhMXlv\nNkNBUmt2VmFGOXpjclZOeFdVbTdDSXZLaWJ3UUlEQVFBQg==";
+			"dGNadlFlTzBld0Zkd053MmtXVFQwMWtXZUc2bFhhMXlv\nNkNBUmt2VmFGOXpjclZOeFdVbTdDSXZLaWJ3UUlEQVFBQg==",
 
 	// example.com.		315569520	IN	DNSKEY	257 3 5 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAly/1SbKJpzYwOJF2Xie7W6eLyQ/W1Ar8hKss7ZbIkcg23bt8QQOFVLPlYG9luYzAULZgTWa4gFlrBkEzO410oy8VFZgB5x11/LioWGJmy9h+H6R1Fy0QFP3eFGKb9tLuAJGMaSRTcbRADJQYiDJ6uuWobTg2fNxlb7B1lz7wOVk/yTV795k+vb+lJx8xZu9vNyIkUy2/LF4J0oXKCPUEee0hpBglEeFcnMSHjO+LtY5Y6E8+fp3d38+Tikmy/2Xu0R35MmCWXuwqYMO+1p7spNzsuUFkhTWt0yJKc8pC91V6e3gsD6iwMy3Q0EEEQ7q1z+M9vLIYtmC27mHmdDh1DQIDAQAB
 	// keytag 62715
-	public static String keyDnsKeyRecord =
+	keyDnsKeyRecord =
 		"ZXhhbXBsZS5jb20uCQkzMTU1Njk1MjAJSU4JRE5TS0VZCTI1NyAzIDUgTUlJQklqQU5CZ2txaGtp\nRzl3MEJBUUVGQUFPQ0FROE" +
 			"FNSUlCQ2dLQ0FRRUFseS8xU2JLSnB6WXdPSkYyWGllN1c2ZUx5US9X\nMUFyOGhLc3M3WmJJa2NnMjNidDhRUU9GVkxQbFlHOWx1" +
 			"WXpBVUxaZ1RXYTRnRmxyQmtFek80MTBv\neThWRlpnQjV4MTEvTGlvV0dKbXk5aCtINlIxRnkwUUZQM2VGR0tiOXRMdUFKR01hU1" +
@@ -568,35 +569,34 @@ public class SigningData {
 			"hLQ1BVRWVlMGhwQmdsRWVGY25NU0hqTytMdFk1WTZFOCtmcDNkMzgrVGlrbXkvMlh1\nMFIzNU1tQ1dYdXdxWU1PKzFwN3NwTnpz" +
 			"dVVGa2hUV3QweUpLYzhwQzkxVjZlM2dzRDZpd015M1Ew\nRUVFUTdxMXorTTl2TElZdG1DMjdtSG1kRGgxRFFJREFRQUI=";
 
-	public static List<Record> signedList;
-	public static List<Record> postZoneList;
-	public static List<Record> dsRecordList = new ArrayList<>();
+	public static List<Record> signedList, postZoneList, dsRecordList = new ArrayList<>();
 
-	public static List<String> getStringsNamedLike(String name, Class clazz) {
+	private static final Logger LOGGER = Logger.getLogger(SigningData.class);
+
+	public static List<String> getStringsNamedLike(final String name, final Class clazz) {
 		return Arrays.asList(clazz.getDeclaredFields()).stream()
 				.filter(field -> field.getName().contains(name))
 				.map(field -> {
 					try {
 						return field.get(null).toString();
 					} catch (Exception e) {
-						System.out.println("Failed getting static field " + name + " for class " + clazz);
-						e.printStackTrace();
+						LOGGER.error("Failed getting static field " + name + " for class " + clazz + ": " + e.getMessage(), e);
 					}
 					return null;
 				})
 				.collect(toList());
 	}
 
-	static Record toRecord(String record) {
+	static Record toRecord(final String record) {
 		try {
 			return Record.fromWire(Base64.getDecoder().decode(record.getBytes()), Section.ANSWER);
 		} catch (Exception e) {
-			e.printStackTrace();
+			LOGGER.error(e.getMessage(), e);
 		}
 		return null;
 	}
 
-	public static void recreateData() throws Exception {
+	public static void recreateData() {
 		List<String> encodedRecords = getStringsNamedLike("signedRecord", SigningData.class);
 
 		signedList = encodedRecords.stream().map(SigningData::toRecord).collect(toList());
diff --git a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/ZoneTestRecords.java b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/ZoneTestRecords.java
index e9563cf..211aa8d 100644
--- a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/ZoneTestRecords.java
+++ b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/ZoneTestRecords.java
@@ -19,11 +19,16 @@ import org.apache.traffic_control.traffic_router.secure.BindPrivateKey;
 import org.apache.traffic_control.traffic_router.secure.Pkcs1KeySpecDecoder;
 import org.xbill.DNS.*;
 
+import java.io.IOException;
 import java.net.Inet6Address;
 import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.security.GeneralSecurityException;
 import java.security.KeyFactory;
 import java.security.KeyPair;
 import java.security.KeyPairGenerator;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
 import java.security.PrivateKey;
 import java.security.PublicKey;
 import java.security.SecureRandom;
@@ -35,7 +40,7 @@ import java.util.List;
 
 import static java.util.Base64.getMimeDecoder;
 
-@SuppressWarnings("PMD")
+@SuppressWarnings("PMD.ClassNamingConventions")
 public class ZoneTestRecords {
 	public static List<Record> records;
 
@@ -52,10 +57,10 @@ public class ZoneTestRecords {
 	public static KeyPair ksk2;
 	public static KeyPair zsk2;
 
-	static List<KeyPair> generateKeyPairs() throws Exception {
-		KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
+	static List<KeyPair> generateKeyPairs() throws NoSuchAlgorithmException, NoSuchProviderException {
+		final KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
 		keyPairGenerator.initialize(2048, SecureRandom.getInstance("SHA1PRNG","SUN"));
-		List<KeyPair> keyPairs = new ArrayList<>();
+		final List<KeyPair> keyPairs = new ArrayList<>();
 		keyPairs.add(keyPairGenerator.generateKeyPair());
 		keyPairs.add(keyPairGenerator.generateKeyPair());
 		keyPairs.add(keyPairGenerator.generateKeyPair());
@@ -63,57 +68,57 @@ public class ZoneTestRecords {
 		return keyPairs;
 	}
 
-	private static KeyPair recreateKeyPair(String publicKey, String privateKey) throws Exception {
-		PrivateKey privateKeyCopy = new BindPrivateKey().decode(new String(getMimeDecoder().decode(privateKey)));
-		PublicKey publicKeyCopy = KeyFactory.getInstance("RSA").generatePublic(new Pkcs1KeySpecDecoder().decode(publicKey));
+	private static KeyPair recreateKeyPair(final String publicKey, final String privateKey) throws GeneralSecurityException, IOException {
+		final PrivateKey privateKeyCopy = new BindPrivateKey().decode(new String(getMimeDecoder().decode(privateKey)));
+		final PublicKey publicKeyCopy = KeyFactory.getInstance("RSA").generatePublic(new Pkcs1KeySpecDecoder().decode(publicKey));
 		return new KeyPair(publicKeyCopy, privateKeyCopy);
 	}
 
-	public static List<Record> generateZoneRecords(boolean makeNewKeyPairs) throws Exception {
+	public static List<Record> generateZoneRecords(final boolean makeNewKeyPairs) throws IOException, GeneralSecurityException {
 		start = new Date(System.currentTimeMillis() - (24 * 3600 * 1000));
 		expiration = new Date(System.currentTimeMillis() + (7 * 24 * 3600 * 1000));
 
 		origin = new Name("example.com.");
 
-		Duration tenYears = Duration.ofDays(3650);
-		Duration oneDay = Duration.ofDays(1);
-		Duration threeDays = Duration.ofDays(3);
-		Duration threeWeeks = Duration.ofDays(21);
+		final Duration tenYears = Duration.ofDays(3650);
+		final Duration oneDay = Duration.ofDays(1);
+		final Duration threeDays = Duration.ofDays(3);
+		final Duration threeWeeks = Duration.ofDays(21);
 
-		long oneHour = 3600;
-		Name nameServer1 = new Name("ns1.example.com.");
-		Name nameServer2 = new Name("ns2.example.com.");
+		final long oneHour = 3600;
+		final Name nameServer1 = new Name("ns1.example.com.");
+		final Name nameServer2 = new Name("ns2.example.com.");
 
-		Name adminEmail = new Name("admin.example.com.");
+		final Name adminEmail = new Name("admin.example.com.");
 
-		Name webServer = new Name("www.example.com.");
-		Name ftpServer = new Name("ftp.example.com.");
+		final Name webServer = new Name("www.example.com.");
+		final Name ftpServer = new Name("ftp.example.com.");
 
-		Name webMirror = new Name("mirror.www.example.com.");
-		Name ftpMirror = new Name("mirror.ftp.example.com.");
+		final Name webMirror = new Name("mirror.www.example.com.");
+		final Name ftpMirror = new Name("mirror.ftp.example.com.");
 
-		String txtRecord = new String("dead0123456789");
+		final String txtRecord = "dead0123456789";
 
 		records = new ArrayList<>(Arrays.asList(
-			new AAAARecord(webServer, DClass.IN, threeDays.getSeconds(), Inet6Address.getByName("2001:db8::5:6:7:8")),
-			new AAAARecord(ftpServer, DClass.IN, threeDays.getSeconds(), Inet6Address.getByName("2001:db8::12:34:56:78")),
+			new AAAARecord(webServer, DClass.IN, threeDays.getSeconds(), Inet6Address.getByAddress(new byte[]{32, 1, 13, -72, 0, 0, 0, 0, 0, 5, 0, 6, 0, 7, 0, 8})), // 2001:db8::5:6:7:8
+			new AAAARecord(ftpServer, DClass.IN, threeDays.getSeconds(), Inet6Address.getByAddress(new byte[]{32, 1, 13, -72, 0, 0, 0, 0, 0, 18, 0, 52, 0, 86, 0, 120})), // 2001:db8::12:34:56:78
 			new NSRecord(origin, DClass.IN, tenYears.getSeconds(), nameServer1),
 			new NSRecord(origin, DClass.IN, tenYears.getSeconds(), nameServer2),
 			new ARecord(webServer, DClass.IN, threeWeeks.getSeconds(), InetAddress.getByAddress(new byte[] {11, 22, 33, 44})),
 			new ARecord(webServer, DClass.IN, threeWeeks.getSeconds(), InetAddress.getByAddress(new byte[] {55, 66, 77, 88})),
 			new ARecord(ftpServer, DClass.IN, threeWeeks.getSeconds(), InetAddress.getByAddress(new byte[] {12, 34, 56, 78})),
 			new ARecord(ftpServer, DClass.IN, threeWeeks.getSeconds(), InetAddress.getByAddress(new byte[] {21, 43, 65, 87})),
-			new AAAARecord(webServer, DClass.IN, threeDays.getSeconds(), Inet6Address.getByName("2001:db8::4:3:2:1")),
+			new AAAARecord(webServer, DClass.IN, threeDays.getSeconds(), Inet6Address.getByAddress(new byte[]{32, 1, 13, -72, 0, 0, 0, 0, 0, 4, 0, 3, 0, 2, 0, 1})), // 2001:db8::4:3:2:1
 			new SOARecord(origin, DClass.IN, tenYears.getSeconds(), nameServer1,
 				adminEmail, 2016091400L, oneDay.getSeconds(), oneHour, threeWeeks.getSeconds(), threeDays.getSeconds()),
-			new AAAARecord(ftpServer, DClass.IN, threeDays.getSeconds(), Inet6Address.getByName("2001:db8::21:43:65:87")),
+			new AAAARecord(ftpServer, DClass.IN, threeDays.getSeconds(), Inet6Address.getByAddress(new byte[]{32, 1, 13, -72, 0, 0, 0, 0, 0, 33, 0, 67, 0, 101, 0, -121})), // 2001:db8::21:43:65:87
 			new CNAMERecord(webMirror, DClass.IN, tenYears.getSeconds(), webServer),
 			new CNAMERecord(ftpMirror, DClass.IN, tenYears.getSeconds(), ftpServer),
 			new TXTRecord(webServer, DClass.IN, tenYears.getSeconds(), txtRecord)
 		));
 
 		if (makeNewKeyPairs) {
-			List<KeyPair> keyPairs = generateKeyPairs();
+			final List<KeyPair> keyPairs = generateKeyPairs();
 			ksk1 = keyPairs.get(0);
 			zsk1 = keyPairs.get(1);
 			ksk2 = keyPairs.get(2);
diff --git a/traffic_router/shared/src/test/java/secure/BindPrivateKeyTest.java b/traffic_router/shared/src/test/java/secure/BindPrivateKeyTest.java
index 83b93d5..c7ea572 100644
--- a/traffic_router/shared/src/test/java/secure/BindPrivateKeyTest.java
+++ b/traffic_router/shared/src/test/java/secure/BindPrivateKeyTest.java
@@ -23,7 +23,6 @@ import org.mockito.Mockito;
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
-import sun.security.rsa.RSAPrivateCrtKeyImpl;
 
 import java.math.BigInteger;
 import java.security.KeyFactory;
@@ -31,6 +30,7 @@ import java.security.KeyPair;
 import java.security.KeyPairGenerator;
 import java.security.PrivateKey;
 import java.security.SecureRandom;
+import java.security.interfaces.RSAPrivateCrtKey;
 import java.security.spec.RSAPrivateCrtKeySpec;
 
 import static java.util.Base64.getEncoder;
@@ -57,7 +57,7 @@ public class BindPrivateKeyTest {
 		keyPairGenerator.initialize(2048, SecureRandom.getInstance("SHA1PRNG","SUN"));
 		KeyPair keyPair = keyPairGenerator.generateKeyPair();
 
-		RSAPrivateCrtKeyImpl privateCrtKey = (RSAPrivateCrtKeyImpl) keyPair.getPrivate();
+		RSAPrivateCrtKey privateCrtKey = (RSAPrivateCrtKey) keyPair.getPrivate();
 
 		privateKeyString = "Private-key-format: v1.2\n" +
 			"Algorithm: 5 (RSASHA1)\n" +
diff --git a/traffic_router/tests/Dockerfile-test-alpine b/traffic_router/tests/Dockerfile-test-alpine
index 445121f..50dcaeb 100644
--- a/traffic_router/tests/Dockerfile-test-alpine
+++ b/traffic_router/tests/Dockerfile-test-alpine
@@ -19,7 +19,7 @@ VOLUME ["/junit"]
 WORKDIR /go/src/$DIR/traffic_router
 
 RUN apk add --no-cache \
-		openjdk8 \
+		openjdk11 \
 		maven \
 		tomcat-native \
 		bash
@@ -27,7 +27,8 @@ RUN apk add --no-cache \
 ADD traffic_router /go/src/$DIR/traffic_router
 
 ENTRYPOINT /bin/bash "$@"
-CMD set -o xtrace && \
+CMD set -o xtrace -o nounset && \
+	export JAVA_HOME="$(command -v java | xargs realpath | xargs dirname)/.." && \
 	mvn_command=(mvn) && \
 	if [[ "$DEBUG_ENABLE" == true ]]; then\
 		set -o nounset && \
diff --git a/traffic_router/tests/Dockerfile-test-centos b/traffic_router/tests/Dockerfile-test-centos
index 82dbcc4..384352c 100644
--- a/traffic_router/tests/Dockerfile-test-centos
+++ b/traffic_router/tests/Dockerfile-test-centos
@@ -22,7 +22,7 @@ RUN set -o errexit; \
 	yum -y update; \
 	yum -y install \
 		maven \
-		java-1.8.0-openjdk \
+		java-11-openjdk \
 		epel-release; \
 	yum -y install tomcat-native; \
 	yum -y clean all
@@ -30,6 +30,7 @@ RUN set -o errexit; \
 ADD traffic_router /go/src/$DIR/traffic_router
 
 CMD set -o xtrace && \
+	export JAVA_HOME="$(command -v java | xargs realpath | xargs dirname)/.." && \
 	mvn_command=(mvn) && \
 	if [[ "$DEBUG_ENABLE" == true ]]; then\
 		set -o nounset && \
diff --git a/traffic_router/tomcat-rpm/tomcat.service b/traffic_router/tomcat-rpm/tomcat.service
index 1487fc5..f72af4a 100644
--- a/traffic_router/tomcat-rpm/tomcat.service
+++ b/traffic_router/tomcat-rpm/tomcat.service
@@ -22,7 +22,7 @@ After=syslog.target network.target
 [Service]
 Type=forking
 
-Environment=JAVA_HOME=/usr/lib/jvm/jre
+Environment=JAVA_HOME=/usr/lib/jvm/jre-11-openjdk
 Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
 Environment=CATALINA_HOME=/opt/tomcat
 Environment=CATALINA_BASE=/opt/tomcat
diff --git a/traffic_router/tomcat-rpm/tomcat.spec b/traffic_router/tomcat-rpm/tomcat.spec
index 7ab0911..35eaf5d 100644
--- a/traffic_router/tomcat-rpm/tomcat.spec
+++ b/traffic_router/tomcat-rpm/tomcat.spec
@@ -20,7 +20,7 @@ Summary:    Apache Tomcat Servlet/JSP Engine 9.0+, RI for Servlet 3.1/JSP 2.3 AP
 License:    Apache Software License
 URL:        https://github.com/apache/trafficcontrol/
 Source:     %{_sourcedir}/apache-tomcat-%{version}.tar.gz
-Requires:   java >= 1.8
+Requires:   java-11
 
 %define tomcat_home /opt/tomcat