diff --git a/.travis.yml b/.travis.yml
index 8b08449..a0aa371 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -17,7 +17,7 @@
 # under the License.
 #
 
-# build Apache Thrift on Travis CI - https://travis-ci.org/
+# build Apache Thrift on Travis CI - https://travis-ci.com/
 
 #
 # Docker Integration
diff --git a/README.md b/README.md
index 66f60d2..c8db1b5 100644
--- a/README.md
+++ b/README.md
@@ -15,8 +15,8 @@
 ![Apache Thrift Layered Architecture](doc/images/thrift-layers.png)
 
 Thrift makes it easy for programs written in different programming
-languages to share data and call remote procedures.  With support 
-for [28 programming languages](LANGUAGES.md), chances are Thrift 
+languages to share data and call remote procedures.  With support
+for [28 programming languages](LANGUAGES.md), chances are Thrift
 supports the languages that you currently use.
 
 Thrift is specifically designed to support non-atomic version changes
@@ -35,13 +35,13 @@
 
 | Branch | Travis | Appveyor | Coverity Scan | codecov.io | Website |
 | :----- | :----- | :------- | :------------ | :--------- | :------ |
-| [`master`](https://github.com/apache/thrift/tree/master) | [![Build Status](https://travis-ci.org/apache/thrift.svg?branch=master)](https://travis-ci.org/apache/thrift/branches) | [![Build status](https://ci.appveyor.com/api/projects/status/github/apache/thrift?branch=master&svg=true)](https://ci.appveyor.com/project/ApacheSoftwareFoundation/thrift/history) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/1345/badge.svg)](https://scan.coverity.com/projects/thrift) | | [![Website](https://img.shields.io/badge/official-website-brightgreen.svg)](https://thrift.apache.org/) |
-| [`0.14.0`](https://github.com/apache/thrift/tree/0.14.0) | [![Build Status](https://travis-ci.org/apache/thrift.svg?branch=0.14.0)](https://travis-ci.org/apache/thrift/branches) | | | | |
+| [`master`](https://github.com/apache/thrift/tree/master) | [![Build Status](https://api.travis-ci.com/apache/thrift.svg?branch=master)](https://app.travis-ci.com/apache/thrift/branches) | [![Build status](https://ci.appveyor.com/api/projects/status/github/apache/thrift?branch=master&svg=true)](https://ci.appveyor.com/project/ApacheSoftwareFoundation/thrift/history) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/1345/badge.svg)](https://scan.coverity.com/projects/thrift) | | [![Website](https://img.shields.io/badge/official-website-brightgreen.svg)](https://thrift.apache.org/) |
+| [`0.17.0`](https://github.com/apache/thrift/tree/0.17.0) | [![Build Status](https://api.travis-ci.com/apache/thrift.svg?branch=0.17.0)](https://app.travis-ci.com/apache/thrift/branches) | | | | |
 
 Releases
 ========
 
-Thrift does not maintain a specific release calendar at this time.  
+Thrift does not maintain a specific release calendar at this time.
 
 We strive to release twice yearly.  Download the [current release](http://thrift.apache.org/download).
 
@@ -182,9 +182,9 @@
 Package Managers
 ================
 
-Apache Thrift is available via a number of package managers, a list which is 
-is steadily growing. A more detailed overview can be found 
-[at the Apache Thrift web site under "Libraries"](http://thrift.apache.org/lib/) 
+Apache Thrift is available via a number of package managers, a list which is
+is steadily growing. A more detailed overview can be found
+[at the Apache Thrift web site under "Libraries"](http://thrift.apache.org/lib/)
 and/or in the respective READMEs for each language under /lib
 
 Testing
diff --git a/lib/java/src/test/java/org/apache/thrift/partial/ThriftSerDe.java b/lib/java/src/test/java/org/apache/thrift/partial/ThriftSerDe.java
index 361c32c..e8165d8 100644
--- a/lib/java/src/test/java/org/apache/thrift/partial/ThriftSerDe.java
+++ b/lib/java/src/test/java/org/apache/thrift/partial/ThriftSerDe.java
@@ -62,9 +62,9 @@
   private <T extends TBase> T newInstance(Class<T> clazz) {
     T instance = null;
     try {
-      instance = clazz.newInstance();
-    } catch (InstantiationException e) {
-    } catch (IllegalAccessException e) {
+      instance = clazz.getDeclaredConstructor().newInstance();
+    } catch (ReflectiveOperationException e) {
+      throw new RuntimeException(e);
     }
     return clazz.cast(instance);
   }
diff --git a/lib/java/src/test/java/org/apache/thrift/protocol/ProtocolTestBase.java b/lib/java/src/test/java/org/apache/thrift/protocol/ProtocolTestBase.java
index 0dd48a4..455f9e8 100644
--- a/lib/java/src/test/java/org/apache/thrift/protocol/ProtocolTestBase.java
+++ b/lib/java/src/test/java/org/apache/thrift/protocol/ProtocolTestBase.java
@@ -340,7 +340,7 @@
     expected.write(proto);
     System.out.println("Size in " + proto.getClass().getSimpleName() + ": " + buf.length());
 
-    T actual = klass.newInstance();
+    T actual = klass.getDeclaredConstructor().newInstance();
     actual.read(proto);
     assertEquals(expected, actual);
   }
diff --git a/lib/java/src/test/java/org/apache/thrift/test/ReadStruct.java b/lib/java/src/test/java/org/apache/thrift/test/ReadStruct.java
index f1e14e2..932216b 100644
--- a/lib/java/src/test/java/org/apache/thrift/test/ReadStruct.java
+++ b/lib/java/src/test/java/org/apache/thrift/test/ReadStruct.java
@@ -40,7 +40,8 @@
     TTransport trans =
         new TIOStreamTransport(new BufferedInputStream(new FileInputStream(args[0])));
 
-    TProtocolFactory factory = (TProtocolFactory) Class.forName(args[1]).newInstance();
+    TProtocolFactory factory =
+        (TProtocolFactory) Class.forName(args[1]).getDeclaredConstructor().newInstance();
 
     TProtocol proto = factory.getProtocol(trans);
 
diff --git a/lib/java/src/test/java/org/apache/thrift/test/WriteStruct.java b/lib/java/src/test/java/org/apache/thrift/test/WriteStruct.java
index c17cdaa..e5f4128 100644
--- a/lib/java/src/test/java/org/apache/thrift/test/WriteStruct.java
+++ b/lib/java/src/test/java/org/apache/thrift/test/WriteStruct.java
@@ -39,7 +39,8 @@
     TTransport trans =
         new TIOStreamTransport(new BufferedOutputStream(new FileOutputStream(args[0])));
 
-    TProtocolFactory factory = (TProtocolFactory) Class.forName(args[1]).newInstance();
+    TProtocolFactory factory =
+        (TProtocolFactory) Class.forName(args[1]).getDeclaredConstructor().newInstance();
 
     TProtocol proto = factory.getProtocol(trans);
 
