You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by kr...@apache.org on 2019/03/20 23:50:49 UTC

[lucene-solr] branch master updated: SOLR-9079: Remove commons-lang as a dependency

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

krisden pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/master by this push:
     new 6222abf  SOLR-9079: Remove commons-lang as a dependency
6222abf is described below

commit 6222abf4480ee15bad2e67942263f563ce5ee434
Author: Kevin Risden <kr...@apache.org>
AuthorDate: Tue Mar 19 15:04:00 2019 -0400

    SOLR-9079: Remove commons-lang as a dependency
    
    Signed-off-by: Kevin Risden <kr...@apache.org>
---
 lucene/ivy-versions.properties                                 |  2 +-
 solr/CHANGES.txt                                               |  2 ++
 .../solr/analytics/legacy/LegacyAbstractAnalyticsTest.java     |  2 +-
 .../apache/solr/handler/clustering/ClusteringComponent.java    |  2 +-
 .../handler/clustering/carrot2/CarrotClusteringEngine.java     | 10 +++++-----
 .../ltr/src/test/org/apache/solr/ltr/TestRerankBase.java       |  3 +--
 solr/contrib/velocity/ivy.xml                                  |  1 +
 .../java/org/apache/solr/response/VelocityResponseWriter.java  |  3 +--
 solr/core/ivy.xml                                              |  2 +-
 .../src/java/org/apache/solr/cloud/ExclusiveSliceProperty.java |  2 +-
 solr/core/src/java/org/apache/solr/cloud/ZkController.java     |  2 +-
 .../org/apache/solr/cloud/api/collections/AddReplicaCmd.java   |  2 +-
 .../api/collections/OverseerCollectionMessageHandler.java      |  2 +-
 .../java/org/apache/solr/cloud/overseer/ReplicaMutator.java    |  2 +-
 solr/core/src/java/org/apache/solr/core/CoreDescriptor.java    |  2 +-
 .../org/apache/solr/handler/AnalysisRequestHandlerBase.java    |  2 +-
 .../java/org/apache/solr/handler/admin/CollectionsHandler.java |  2 +-
 .../java/org/apache/solr/handler/admin/ConfigSetsHandler.java  |  2 +-
 .../java/org/apache/solr/handler/admin/CoreAdminHandler.java   |  2 +-
 .../java/org/apache/solr/handler/admin/CoreAdminOperation.java |  2 +-
 .../java/org/apache/solr/handler/admin/RebalanceLeaders.java   |  2 +-
 .../java/org/apache/solr/handler/component/FacetComponent.java |  4 ++--
 .../apache/solr/handler/component/HttpShardHandlerFactory.java |  2 +-
 .../src/java/org/apache/solr/handler/component/StatsField.java |  2 +-
 .../java/org/apache/solr/request/SubstringBytesRefFilter.java  |  2 +-
 .../java/org/apache/solr/search/CollapsingQParserPlugin.java   |  2 +-
 solr/core/src/java/org/apache/solr/search/Grouping.java        |  2 +-
 .../src/java/org/apache/solr/search/SwitchQParserPlugin.java   |  2 +-
 solr/core/src/java/org/apache/solr/security/JWTAuthPlugin.java |  2 +-
 .../src/java/org/apache/solr/security/PrintWriterWrapper.java  | 10 ++++------
 solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java   |  2 +-
 .../src/java/org/apache/solr/servlet/LoadAdminUiServlet.java   | 10 +++++-----
 .../src/java/org/apache/solr/servlet/SolrDispatchFilter.java   |  2 +-
 .../update/processor/ConcatFieldUpdateProcessorFactory.java    |  2 +-
 .../update/processor/ParseDateFieldUpdateProcessorFactory.java |  4 ++--
 .../processor/ParseNumericFieldUpdateProcessorFactory.java     |  2 +-
 .../processor/StatelessScriptUpdateProcessorFactory.java       |  3 +--
 .../solr/update/processor/UUIDUpdateProcessorFactory.java      |  2 +-
 solr/core/src/java/org/apache/solr/util/SolrCLI.java           |  6 ++----
 solr/core/src/test/org/apache/solr/TestDistributedSearch.java  |  2 +-
 .../src/test/org/apache/solr/cloud/BasicDistributedZkTest.java |  7 +++----
 .../org/apache/solr/cloud/DistribJoinFromCollectionTest.java   |  3 +--
 .../apache/solr/cloud/LeaderFailureAfterFreshStartTest.java    |  2 +-
 .../test/org/apache/solr/cloud/PeerSyncReplicationTest.java    |  2 +-
 solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java |  2 +-
 .../src/test/org/apache/solr/cloud/TestCloudPivotFacet.java    |  3 +--
 .../org/apache/solr/cloud/TestCloudPseudoReturnFields.java     |  5 ++---
 .../cloud/api/collections/CollectionTooManyReplicasTest.java   |  3 +--
 .../solr/cloud/api/collections/ReplicaPropertiesBase.java      |  2 +-
 solr/core/src/test/org/apache/solr/core/TestLazyCores.java     |  3 +--
 .../apache/solr/handler/AnalysisRequestHandlerTestBase.java    |  2 +-
 .../org/apache/solr/handler/XmlUpdateRequestHandlerTest.java   |  8 ++++----
 .../solr/handler/component/DistributedDebugComponentTest.java  |  3 +--
 .../test/org/apache/solr/handler/tagger/TaggerTestCase.java    |  4 ++--
 .../src/test/org/apache/solr/schema/TestSortableTextField.java |  2 +-
 .../test/org/apache/solr/search/TestPseudoReturnFields.java    |  6 ++----
 .../apache/solr/search/facet/TestCloudJSONFacetJoinDomain.java |  3 +--
 .../org/apache/solr/search/facet/TestCloudJSONFacetSKG.java    |  4 +---
 solr/licenses/commons-text-1.4.jar.sha1                        |  1 -
 solr/licenses/commons-text-1.6.jar.sha1                        |  1 +
 .../org/apache/solr/client/solrj/impl/HttpClientUtilTest.java  |  2 +-
 .../test/org/apache/solr/common/util/TestJsonRecordReader.java |  2 +-
 62 files changed, 84 insertions(+), 100 deletions(-)

diff --git a/lucene/ivy-versions.properties b/lucene/ivy-versions.properties
index 51f05c4..eb0e82b 100644
--- a/lucene/ivy-versions.properties
+++ b/lucene/ivy-versions.properties
@@ -115,7 +115,7 @@ org.apache.calcite.version = 1.18.0
 /org.apache.commons/commons-exec = 1.3
 /org.apache.commons/commons-lang3 = 3.8.1
 /org.apache.commons/commons-math3 = 3.6.1
-/org.apache.commons/commons-text = 1.4
+/org.apache.commons/commons-text = 1.6
 
 org.apache.curator.version = 2.13.0
 /org.apache.curator/curator-client = ${org.apache.curator.version}
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 531ba9b..73e707a 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -137,6 +137,8 @@ Improvements
 
 * SOLR-13227: Optimizing facet.range.other by avoiding expensive exceptions (Nikolay Khitrin via Mikhail Khludnev)
 
+* SOLR-9079: Remove commons-lang as a dependency (Kevin Risden)
+
 Other Changes
 ----------------------
 
diff --git a/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/LegacyAbstractAnalyticsTest.java b/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/LegacyAbstractAnalyticsTest.java
index 3488f63..4a7b857 100644
--- a/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/LegacyAbstractAnalyticsTest.java
+++ b/solr/contrib/analytics/src/test/org/apache/solr/analytics/legacy/LegacyAbstractAnalyticsTest.java
@@ -34,7 +34,7 @@ import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.lucene.util.IOUtils;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.analytics.util.AnalyticsResponseHeadings;
diff --git a/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/ClusteringComponent.java b/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/ClusteringComponent.java
index b88130a..5ff6a6d 100644
--- a/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/ClusteringComponent.java
+++ b/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/ClusteringComponent.java
@@ -25,7 +25,7 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.index.IndexableField;
 import org.apache.solr.common.SolrDocument;
diff --git a/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/CarrotClusteringEngine.java b/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/CarrotClusteringEngine.java
index 4c28916..b75b8c6 100644
--- a/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/CarrotClusteringEngine.java
+++ b/solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/CarrotClusteringEngine.java
@@ -27,11 +27,11 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
 import java.util.Set;
 import java.util.function.Supplier;
 
-import org.apache.commons.lang.ObjectUtils;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.lucene.search.Query;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.SolrDocumentList;
@@ -388,7 +388,7 @@ public class CarrotClusteringEngine extends SearchClusteringEngine {
       
       // Create a Carrot2 document
       Document carrotDocument = new Document(getConcatenated(sdoc, titleFieldSpec),
-              snippet, ObjectUtils.toString(sdoc.getFieldValue(urlField), ""));
+              snippet, Objects.toString(sdoc.getFieldValue(urlField), ""));
       
       // Store Solr id of the document, we need it to map document instances 
       // found in clusters back to identifiers.
@@ -401,7 +401,7 @@ public class CarrotClusteringEngine extends SearchClusteringEngine {
           
           // Use the first Carrot2-supported language
           for (Object l : languages) {
-            String lang = ObjectUtils.toString(l, "");
+            String lang = Objects.toString(l, "");
             
             if (languageCodeMap.containsKey(lang)) {
               lang = languageCodeMap.get(lang);
@@ -475,7 +475,7 @@ public class CarrotClusteringEngine extends SearchClusteringEngine {
         // Join multiple values with a period so that Carrot2 does not pick up
         // phrases that cross field value boundaries (in most cases it would
         // create useless phrases).
-        result.append(ObjectUtils.toString(ite.next())).append(" . ");
+        result.append(Objects.toString(ite.next(), "")).append(" . ");
       }
     }
     return result.toString().trim();
diff --git a/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestRerankBase.java b/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestRerankBase.java
index 796fe39..20a276e 100644
--- a/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestRerankBase.java
+++ b/solr/contrib/ltr/src/test/org/apache/solr/ltr/TestRerankBase.java
@@ -32,7 +32,6 @@ import java.util.SortedMap;
 import java.util.TreeMap;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang.StringUtils;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.util.ContentStream;
 import org.apache.solr.common.util.ContentStreamBase;
@@ -411,7 +410,7 @@ public class TestRerankBase extends RestTestBase {
     }
 
     loadModel(name, LinearModel.class.getCanonicalName(), features,
-        "{\"weights\":{" + StringUtils.join(weights, ",") + "}}");
+        "{\"weights\":{" + String.join(",", weights) + "}}");
   }
 
   protected static void bulkIndex() throws Exception {
diff --git a/solr/contrib/velocity/ivy.xml b/solr/contrib/velocity/ivy.xml
index 561492d..b7d046f 100644
--- a/solr/contrib/velocity/ivy.xml
+++ b/solr/contrib/velocity/ivy.xml
@@ -24,6 +24,7 @@
   </configurations>
   <dependencies>
     <dependency org="commons-collections" name="commons-collections" rev="${/commons-collections/commons-collections}" conf="compile"/>
+    <dependency org="commons-lang" name="commons-lang" rev="${/commons-lang/commons-lang}" conf="compile"/>
     <dependency org="org.apache.velocity" name="velocity" rev="${/org.apache.velocity/velocity}" conf="compile"/>
     <dependency org="org.apache.velocity" name="velocity-tools" rev="${/org.apache.velocity/velocity-tools}" conf="compile"/>
 
diff --git a/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java b/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java
index ad1ee39..3d4abb2 100644
--- a/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java
+++ b/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java
@@ -31,7 +31,6 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.ResourceBundle;
 
-import org.apache.commons.lang.StringUtils;
 import org.apache.solr.client.solrj.SolrResponse;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.client.solrj.response.SolrResponseBase;
@@ -338,7 +337,7 @@ public class VelocityResponseWriter implements QueryResponseWriter, SolrCoreAwar
     loaders.add("builtin");
     engine.setProperty("builtin.resource.loader.instance", new ClasspathResourceLoader());
 
-    engine.setProperty(RuntimeConstants.RESOURCE_LOADER, StringUtils.join(loaders,','));
+    engine.setProperty(RuntimeConstants.RESOURCE_LOADER, String.join(",", loaders));
 
     engine.setProperty(RuntimeConstants.INPUT_ENCODING, "UTF-8");
 
diff --git a/solr/core/ivy.xml b/solr/core/ivy.xml
index 8f5f73b..eaeb7e8 100644
--- a/solr/core/ivy.xml
+++ b/solr/core/ivy.xml
@@ -35,7 +35,7 @@
     <dependency org="org.apache.commons" name="commons-exec" rev="${/org.apache.commons/commons-exec}" conf="compile"/>
     <dependency org="commons-fileupload" name="commons-fileupload" rev="${/commons-fileupload/commons-fileupload}" conf="compile"/>
     <dependency org="commons-cli" name="commons-cli" rev="${/commons-cli/commons-cli}" conf="compile"/>
-    <dependency org="commons-lang" name="commons-lang" rev="${/commons-lang/commons-lang}" conf="compile"/>
+    <dependency org="org.apache.commons" name="commons-text" rev="${/org.apache.commons/commons-text}" conf="compile"/>
     <dependency org="com.google.guava" name="guava" rev="${/com.google.guava/guava}" conf="compile"/>
     <dependency org="org.locationtech.spatial4j" name="spatial4j" rev="${/org.locationtech.spatial4j/spatial4j}" conf="compile"/>
     <dependency org="org.antlr" name="antlr4-runtime" rev="${/org.antlr/antlr4-runtime}"/>
diff --git a/solr/core/src/java/org/apache/solr/cloud/ExclusiveSliceProperty.java b/solr/core/src/java/org/apache/solr/cloud/ExclusiveSliceProperty.java
index f5672ba..4690c11 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ExclusiveSliceProperty.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ExclusiveSliceProperty.java
@@ -28,7 +28,7 @@ import java.util.Map;
 import java.util.Random;
 import java.util.Set;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.cloud.api.collections.OverseerCollectionMessageHandler;
 import org.apache.solr.cloud.overseer.ClusterStateMutator;
 import org.apache.solr.cloud.overseer.CollectionMutator;
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index fda5542..7f28643 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -53,7 +53,7 @@ import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicReference;
 
 import com.google.common.base.Strings;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.client.solrj.cloud.SolrCloudManager;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/AddReplicaCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/AddReplicaCmd.java
index a0abaf0..e532107 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/AddReplicaCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/AddReplicaCmd.java
@@ -32,7 +32,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.client.solrj.cloud.SolrCloudManager;
 import org.apache.solr.client.solrj.cloud.autoscaling.PolicyHelper;
 import org.apache.solr.cloud.ActiveReplicaWatcher;
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
index a1bd826..8f5dbd6 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
@@ -33,7 +33,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
 import com.google.common.collect.ImmutableMap;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.client.solrj.SolrResponse;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.cloud.DistribStateManager;
diff --git a/solr/core/src/java/org/apache/solr/cloud/overseer/ReplicaMutator.java b/solr/core/src/java/org/apache/solr/cloud/overseer/ReplicaMutator.java
index 82a0610..36caac5 100644
--- a/solr/core/src/java/org/apache/solr/cloud/overseer/ReplicaMutator.java
+++ b/solr/core/src/java/org/apache/solr/cloud/overseer/ReplicaMutator.java
@@ -27,7 +27,7 @@ import java.util.NoSuchElementException;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.client.solrj.cloud.DistribStateManager;
 import org.apache.solr.client.solrj.cloud.SolrCloudManager;
 import org.apache.solr.client.solrj.cloud.autoscaling.VersionedData;
diff --git a/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java b/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java
index 1747fa2..8b2ba5d 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java
@@ -32,7 +32,7 @@ import java.util.Properties;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.cloud.CloudDescriptor;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.util.PropertiesUtil;
diff --git a/solr/core/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java b/solr/core/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java
index 814249b..b7c5994 100644
--- a/solr/core/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java
+++ b/solr/core/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java
@@ -29,7 +29,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.Tokenizer;
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
index e933ac3..921e7c8 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
@@ -38,7 +38,7 @@ import java.util.stream.Collectors;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.api.Api;
 import org.apache.solr.client.solrj.SolrResponse;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandler.java
index fbd0fb6..706b82d 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandler.java
@@ -28,7 +28,7 @@ import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.fs.Path;
 import org.apache.solr.api.Api;
 import org.apache.solr.client.solrj.SolrResponse;
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
index 6478731..45cb063 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
@@ -28,7 +28,7 @@ import java.util.Map;
 import java.util.concurrent.ExecutorService;
 
 import com.google.common.collect.ImmutableMap;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.api.Api;
 import org.apache.solr.cloud.CloudDescriptor;
 import org.apache.solr.cloud.ZkController;
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminOperation.java b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminOperation.java
index 1ccc7d4..81e6c92 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminOperation.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminOperation.java
@@ -23,7 +23,7 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Optional;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.cloud.CloudDescriptor;
 import org.apache.solr.cloud.ZkController;
 import org.apache.solr.common.SolrException;
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/RebalanceLeaders.java b/solr/core/src/java/org/apache/solr/handler/admin/RebalanceLeaders.java
index 12f8f3b..0fa43a8 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/RebalanceLeaders.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/RebalanceLeaders.java
@@ -26,7 +26,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.cloud.LeaderElector;
 import org.apache.solr.cloud.OverseerTaskProcessor;
 import org.apache.solr.cloud.overseer.SliceMutator;
diff --git a/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java b/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
index e339a75..745dac0 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
@@ -30,8 +30,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.apache.commons.lang.ArrayUtils;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.FixedBitSet;
 import org.apache.solr.client.solrj.util.ClientUtils;
diff --git a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
index 3009a5b..4f0db88 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
@@ -38,7 +38,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.SynchronousQueue;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.http.client.HttpClient;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrRequest;
diff --git a/solr/core/src/java/org/apache/solr/handler/component/StatsField.java b/solr/core/src/java/org/apache/solr/handler/component/StatsField.java
index aa9dd35..3ca35f3 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/StatsField.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/StatsField.java
@@ -28,7 +28,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.queries.function.FunctionQuery;
 import org.apache.lucene.queries.function.ValueSource;
diff --git a/solr/core/src/java/org/apache/solr/request/SubstringBytesRefFilter.java b/solr/core/src/java/org/apache/solr/request/SubstringBytesRefFilter.java
index 623cb55..3c4767d 100644
--- a/solr/core/src/java/org/apache/solr/request/SubstringBytesRefFilter.java
+++ b/solr/core/src/java/org/apache/solr/request/SubstringBytesRefFilter.java
@@ -19,7 +19,7 @@ package org.apache.solr.request;
 import java.util.function.Predicate;
 
 import org.apache.lucene.util.BytesRef;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 
 /**
  * An implementation of {@link Predicate} which returns true if the BytesRef contains a given substring.
diff --git a/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
index 44787ec..ccbb71f 100644
--- a/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
@@ -32,7 +32,7 @@ import com.carrotsearch.hppc.IntIntHashMap;
 import com.carrotsearch.hppc.IntLongHashMap;
 import com.carrotsearch.hppc.cursors.IntIntCursor;
 import com.carrotsearch.hppc.cursors.IntLongCursor;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.lucene.codecs.DocValuesProducer;
 import org.apache.lucene.index.DocValues;
 import org.apache.lucene.index.DocValuesType;
diff --git a/solr/core/src/java/org/apache/solr/search/Grouping.java b/solr/core/src/java/org/apache/solr/search/Grouping.java
index 938562d..4869386 100644
--- a/solr/core/src/java/org/apache/solr/search/Grouping.java
+++ b/solr/core/src/java/org/apache/solr/search/Grouping.java
@@ -26,7 +26,7 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.lucene.index.ExitableDirectoryReader;
 import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.queries.function.FunctionQuery;
diff --git a/solr/core/src/java/org/apache/solr/search/SwitchQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/SwitchQParserPlugin.java
index d3947a9..d3ecddd 100644
--- a/solr/core/src/java/org/apache/solr/search/SwitchQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/SwitchQParserPlugin.java
@@ -22,7 +22,7 @@ import org.apache.solr.common.util.NamedList;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.handler.component.SearchHandler; // jdoc
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 
 /**
  * <p>A QParserPlugin that acts like a "switch/case" statement.</p>
diff --git a/solr/core/src/java/org/apache/solr/security/JWTAuthPlugin.java b/solr/core/src/java/org/apache/solr/security/JWTAuthPlugin.java
index 1808631..baf32f4 100644
--- a/solr/core/src/java/org/apache/solr/security/JWTAuthPlugin.java
+++ b/solr/core/src/java/org/apache/solr/security/JWTAuthPlugin.java
@@ -525,7 +525,7 @@ public class JWTAuthPlugin extends AuthenticationPlugin implements SpecProvider,
       wwwAuthParams.add("error=\"" + responseError + "\"");
       wwwAuthParams.add("error_description=\"" + message + "\"");
     }
-    response.addHeader(HttpHeaders.WWW_AUTHENTICATE, org.apache.commons.lang.StringUtils.join(wwwAuthParams, ", "));
+    response.addHeader(HttpHeaders.WWW_AUTHENTICATE, String.join(", ", wwwAuthParams));
     response.addHeader(AuthenticationPlugin.HTTP_HEADER_X_SOLR_AUTHDATA, generateAuthDataHeader());
     response.sendError(httpCode, message);
     log.info("JWT Authentication attempt failed: {}", message);
diff --git a/solr/core/src/java/org/apache/solr/security/PrintWriterWrapper.java b/solr/core/src/java/org/apache/solr/security/PrintWriterWrapper.java
index a4e47b5..b4e6dc1 100644
--- a/solr/core/src/java/org/apache/solr/security/PrintWriterWrapper.java
+++ b/solr/core/src/java/org/apache/solr/security/PrintWriterWrapper.java
@@ -20,8 +20,6 @@ import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.util.Locale;
 
-import org.apache.commons.lang.NotImplementedException;
-
 /**
  * Wrapper for PrintWriter that delegates to constructor arg
  */
@@ -55,7 +53,7 @@ public class PrintWriterWrapper extends PrintWriter {
 
   @Override
   protected void clearError() {
-    throw new NotImplementedException();
+    throw new UnsupportedOperationException();
   }
 
   @Override
@@ -75,7 +73,7 @@ public class PrintWriterWrapper extends PrintWriter {
 
   @Override
   public PrintWriter format(String format, Object... args) {
-    throw new NotImplementedException("Forbidden API");
+    throw new UnsupportedOperationException("Forbidden API");
   }
 
   @Override
@@ -130,7 +128,7 @@ public class PrintWriterWrapper extends PrintWriter {
 
   @Override
   public PrintWriter printf(String format, Object... args) {
-    throw new NotImplementedException("Forbidden API");
+    throw new UnsupportedOperationException("Forbidden API");
   }
 
   @Override
@@ -185,7 +183,7 @@ public class PrintWriterWrapper extends PrintWriter {
 
   @Override
   protected void setError() {
-    throw new NotImplementedException();
+    throw new UnsupportedOperationException();
   }
 
   @Override
diff --git a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
index e40d06d..38145f3 100644
--- a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
+++ b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
@@ -39,7 +39,7 @@ import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.http.Header;
 import org.apache.http.HeaderIterator;
 import org.apache.http.HttpEntity;
diff --git a/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java b/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java
index f5c301e..4476351 100644
--- a/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java
+++ b/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java
@@ -18,8 +18,8 @@ package org.apache.solr.servlet;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.output.CloseShieldOutputStream;
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.text.StringEscapeUtils;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.core.CoreContainer;
 import org.apache.solr.core.SolrCore;
@@ -71,9 +71,9 @@ public final class LoadAdminUiServlet extends BaseSolrServlet {
             "${version}" 
         };
         String[] replace = new String[] {
-            StringEscapeUtils.escapeJavaScript(request.getContextPath()),
-            StringEscapeUtils.escapeJavaScript(CommonParams.CORES_HANDLER_PATH),
-            StringEscapeUtils.escapeJavaScript(pack.getSpecificationVersion())
+            StringEscapeUtils.escapeEcmaScript(request.getContextPath()),
+            StringEscapeUtils.escapeEcmaScript(CommonParams.CORES_HANDLER_PATH),
+            StringEscapeUtils.escapeEcmaScript(pack.getSpecificationVersion())
         };
         
         out.write( StringUtils.replaceEach(html, search, replace) );
diff --git a/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java b/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
index caa78c2..d36849a 100644
--- a/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
+++ b/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
@@ -54,7 +54,7 @@ import com.codahale.metrics.jvm.GarbageCollectorMetricSet;
 import com.codahale.metrics.jvm.MemoryUsageGaugeSet;
 import com.codahale.metrics.jvm.ThreadStatesGaugeSet;
 import org.apache.commons.io.FileCleaningTracker;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.http.client.HttpClient;
 import org.apache.lucene.util.Version;
 import org.apache.solr.api.V2HttpCall;
diff --git a/solr/core/src/java/org/apache/solr/update/processor/ConcatFieldUpdateProcessorFactory.java b/solr/core/src/java/org/apache/solr/update/processor/ConcatFieldUpdateProcessorFactory.java
index 73299c8..bcddd1e 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/ConcatFieldUpdateProcessorFactory.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/ConcatFieldUpdateProcessorFactory.java
@@ -16,7 +16,7 @@
  */
 package org.apache.solr.update.processor;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.common.SolrInputField;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.SolrCore;
diff --git a/solr/core/src/java/org/apache/solr/update/processor/ParseDateFieldUpdateProcessorFactory.java b/solr/core/src/java/org/apache/solr/update/processor/ParseDateFieldUpdateProcessorFactory.java
index 08aa973..9d53c63 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/ParseDateFieldUpdateProcessorFactory.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/ParseDateFieldUpdateProcessorFactory.java
@@ -36,7 +36,7 @@ import java.util.LinkedHashMap;
 import java.util.Locale;
 import java.util.Map;
 
-import org.apache.commons.lang.LocaleUtils;
+import org.apache.commons.lang3.LocaleUtils;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.SolrCore;
@@ -171,7 +171,7 @@ public class ParseDateFieldUpdateProcessorFactory extends FieldMutatingUpdatePro
     if (null != localeParam) {
       locale = LocaleUtils.toLocale(localeParam);
     } else {
-      locale = LocaleUtils.toLocale("en_US"); // because well-known patterns assume this
+      locale = Locale.US; // because well-known patterns assume this
     }
 
     Object defaultTimeZoneParam = args.remove(DEFAULT_TIME_ZONE_PARAM);
diff --git a/solr/core/src/java/org/apache/solr/update/processor/ParseNumericFieldUpdateProcessorFactory.java b/solr/core/src/java/org/apache/solr/update/processor/ParseNumericFieldUpdateProcessorFactory.java
index 65058a6..e00fd08 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/ParseNumericFieldUpdateProcessorFactory.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/ParseNumericFieldUpdateProcessorFactory.java
@@ -16,7 +16,7 @@
  */
 package org.apache.solr.update.processor;
 
-import org.apache.commons.lang.LocaleUtils;
+import org.apache.commons.lang3.LocaleUtils;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.schema.FieldType;
diff --git a/solr/core/src/java/org/apache/solr/update/processor/StatelessScriptUpdateProcessorFactory.java b/solr/core/src/java/org/apache/solr/update/processor/StatelessScriptUpdateProcessorFactory.java
index 37c8ed8..c66f183 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/StatelessScriptUpdateProcessorFactory.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/StatelessScriptUpdateProcessorFactory.java
@@ -27,7 +27,6 @@ import org.apache.solr.request.LocalSolrQueryRequest;
 import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.update.*;
 import org.apache.solr.util.plugin.SolrCoreAware;
-import org.apache.commons.lang.StringUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.FilenameUtils;
 
@@ -352,7 +351,7 @@ public class StatelessScriptUpdateProcessorFactory extends UpdateRequestProcesso
           engines.addAll(f.getNames());
         }
       }
-      result = StringUtils.join(engines, ", ");
+      result = String.join(", ", engines);
     } catch (RuntimeException e) {
       /* :NOOP: */
     }
diff --git a/solr/core/src/java/org/apache/solr/update/processor/UUIDUpdateProcessorFactory.java b/solr/core/src/java/org/apache/solr/update/processor/UUIDUpdateProcessorFactory.java
index a36e940..96d7263 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/UUIDUpdateProcessorFactory.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/UUIDUpdateProcessorFactory.java
@@ -19,7 +19,7 @@ package org.apache.solr.update.processor;
 import java.util.UUID;
 import java.util.Locale;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.response.SolrQueryResponse;
diff --git a/solr/core/src/java/org/apache/solr/util/SolrCLI.java b/solr/core/src/java/org/apache/solr/util/SolrCLI.java
index 58e24d1..e25af14 100755
--- a/solr/core/src/java/org/apache/solr/util/SolrCLI.java
+++ b/solr/core/src/java/org/apache/solr/util/SolrCLI.java
@@ -78,8 +78,7 @@ import org.apache.commons.exec.OS;
 import org.apache.commons.exec.environment.EnvironmentUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.BooleanUtils;
-import org.apache.commons.lang.SystemUtils;
+import org.apache.commons.lang3.SystemUtils;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.NoHttpResponseException;
@@ -4093,8 +4092,7 @@ public class SolrCLI {
     private void ensureArgumentIsValidBooleanIfPresent(CommandLine cli, String argName) {
       if (cli.hasOption(argName)) {
         final String value = cli.getOptionValue(argName);
-        final Boolean parsedBoolean = BooleanUtils.toBooleanObject(value);
-        if (parsedBoolean == null) {
+        if (Boolean.parseBoolean(value)) {
           echo("Argument [" + argName + "] must be either true or false, but was [" + value + "]");
           exit(1);
         }
diff --git a/solr/core/src/test/org/apache/solr/TestDistributedSearch.java b/solr/core/src/test/org/apache/solr/TestDistributedSearch.java
index 5c29e8b..aba056c 100644
--- a/solr/core/src/test/org/apache/solr/TestDistributedSearch.java
+++ b/solr/core/src/test/org/apache/solr/TestDistributedSearch.java
@@ -31,7 +31,7 @@ import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorCompletionService;
 import java.util.concurrent.Future;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
 import org.apache.solr.client.solrj.SolrClient;
diff --git a/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java b/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java
index 0d689bd..510c099 100644
--- a/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java
@@ -39,7 +39,6 @@ import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.apache.commons.lang.StringUtils;
 import org.apache.lucene.util.IOUtils;
 import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.solr.JSONTestUtil;
@@ -540,7 +539,7 @@ public class BasicDistributedZkTest extends AbstractFullDistribZkTestBase {
         }
 
         // any combination of replica alternatives should give same numDocs
-        String replicas = StringUtils.join(replicaAlts.toArray(), "|");
+        String replicas = String.join("|", replicaAlts);
         query.set("shards", replicas);
         numDocs = client.query(query).getResults().getNumFound();
         assertTrue("numDocs < 0 for replicas "+replicas+" via "+client,
@@ -571,11 +570,11 @@ public class BasicDistributedZkTest extends AbstractFullDistribZkTestBase {
             }
           }
           Collections.shuffle(replicas, random());
-          randomShards.add(StringUtils.join(replicas, "|"));
+          randomShards.add(String.join("|", replicas));
         }
       }
     }
-    String randShards = StringUtils.join(randomShards, ",");
+    String randShards = String.join(",", randomShards);
     query.set("shards", randShards);
     for (SolrClient client : this.clients) {
       assertEquals("numDocs for "+randShards+" via "+client,
diff --git a/solr/core/src/test/org/apache/solr/cloud/DistribJoinFromCollectionTest.java b/solr/core/src/test/org/apache/solr/cloud/DistribJoinFromCollectionTest.java
index 35ce209..bc7de29 100644
--- a/solr/core/src/test/org/apache/solr/cloud/DistribJoinFromCollectionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/DistribJoinFromCollectionTest.java
@@ -25,7 +25,6 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.lang.StringUtils;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
@@ -98,7 +97,7 @@ public class DistribJoinFromCollectionTest extends SolrCloudTestCase{
 
     // deploy the "from" collection to all nodes where the "to" collection exists
     CollectionAdminRequest.createCollection(fromColl, configName, 1, 4)
-        .setCreateNodeSet(StringUtils.join(nodeSet, ","))
+        .setCreateNodeSet(String.join(",", nodeSet))
         .setProperties(collectionProperties)
         .process(cluster.getSolrClient());
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/LeaderFailureAfterFreshStartTest.java b/solr/core/src/test/org/apache/solr/cloud/LeaderFailureAfterFreshStartTest.java
index 6b445ac..353c0c9 100644
--- a/solr/core/src/test/org/apache/solr/cloud/LeaderFailureAfterFreshStartTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/LeaderFailureAfterFreshStartTest.java
@@ -29,7 +29,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.lang.RandomStringUtils;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.request.UpdateRequest;
diff --git a/solr/core/src/test/org/apache/solr/cloud/PeerSyncReplicationTest.java b/solr/core/src/test/org/apache/solr/cloud/PeerSyncReplicationTest.java
index da76022..5169d22 100644
--- a/solr/core/src/test/org/apache/solr/cloud/PeerSyncReplicationTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/PeerSyncReplicationTest.java
@@ -34,7 +34,7 @@ import java.util.stream.Collectors;
 import com.codahale.metrics.Counter;
 import com.codahale.metrics.Metric;
 import com.codahale.metrics.MetricRegistry;
-import org.apache.commons.lang.RandomStringUtils;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.SolrServerException;
diff --git a/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java b/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java
index 6fe7078..fc8ec9f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java
@@ -17,7 +17,7 @@
 package org.apache.solr.cloud;
 
   
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.lucene.util.LuceneTestCase.AwaitsFix;
 import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestCloudPivotFacet.java b/solr/core/src/test/org/apache/solr/cloud/TestCloudPivotFacet.java
index 97ae487..ec304c2 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestCloudPivotFacet.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestCloudPivotFacet.java
@@ -26,7 +26,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.lang.StringUtils;
 import org.apache.lucene.util.TestUtil;
 import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
 import org.apache.solr.client.solrj.SolrServerException;
@@ -496,7 +495,7 @@ public class TestCloudPivotFacet extends AbstractFullDistribZkTestBase {
       // makes it a robust test (especially for multi-valued fields)
       fields[i] = fieldNames[TestUtil.nextInt(random(),0,fieldNames.length-1)];
     }
-    return StringUtils.join(fields, ",");
+    return String.join(",", fields);
   }
 
   /**
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestCloudPseudoReturnFields.java b/solr/core/src/test/org/apache/solr/cloud/TestCloudPseudoReturnFields.java
index 31d69cf..d4aeae6 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestCloudPseudoReturnFields.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestCloudPseudoReturnFields.java
@@ -27,7 +27,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Random;
 
-import org.apache.commons.lang.StringUtils;
 import org.apache.lucene.util.TestUtil;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrServerException;
@@ -732,7 +731,7 @@ public class TestCloudPseudoReturnFields extends SolrCloudTestCase {
       
       Collections.shuffle(fl, random);
 
-      final SolrParams singleFl = params("q","*:*", "rows", "1","fl",StringUtils.join(fl.toArray(),','));
+      final SolrParams singleFl = params("q","*:*", "rows", "1","fl",String.join(",", fl));
       final ModifiableSolrParams multiFl = params("q","*:*", "rows", "1");
       for (String item : fl) {
         multiFl.add("fl",item);
@@ -767,7 +766,7 @@ public class TestCloudPseudoReturnFields extends SolrCloudTestCase {
       
       Collections.shuffle(fl, random);
 
-      final SolrParams singleFl = params("fl",StringUtils.join(fl.toArray(),','));
+      final SolrParams singleFl = params("fl",String.join(",", fl));
       final ModifiableSolrParams multiFl = params();
       for (String item : fl) {
         multiFl.add("fl",item);
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionTooManyReplicasTest.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionTooManyReplicasTest.java
index 1ac0cae..25aaf4e 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionTooManyReplicasTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionTooManyReplicasTest.java
@@ -20,7 +20,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
-import org.apache.commons.lang.StringUtils;
 import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
@@ -147,7 +146,7 @@ public class CollectionTooManyReplicasTest extends SolrCloudTestCase {
     List<String> nodes = getAllNodeNames(collectionName);
 
     CollectionAdminRequest.createShard(collectionName, "shard4")
-        .setNodeSet(StringUtils.join(nodes, ","))
+        .setNodeSet(String.join(",", nodes))
         .process(cluster.getSolrClient());
 
     // And just for yucks, insure we fail the "regular" one again.
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/ReplicaPropertiesBase.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/ReplicaPropertiesBase.java
index 6f7e717..fd4a409 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/ReplicaPropertiesBase.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/ReplicaPropertiesBase.java
@@ -16,7 +16,7 @@
  */
 package org.apache.solr.cloud.api.collections;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.request.QueryRequest;
diff --git a/solr/core/src/test/org/apache/solr/core/TestLazyCores.java b/solr/core/src/test/org/apache/solr/core/TestLazyCores.java
index 0831da2..f9d2dad 100644
--- a/solr/core/src/test/org/apache/solr/core/TestLazyCores.java
+++ b/solr/core/src/test/org/apache/solr/core/TestLazyCores.java
@@ -30,7 +30,6 @@ import java.util.regex.Pattern;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang.StringUtils;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.CommonParams;
@@ -736,7 +735,7 @@ public class TestLazyCores extends SolrTestCaseJ4 {
   }
 
   private static final String makePath(String... args) {
-    return StringUtils.join(args, File.separator);
+    return String.join(File.separator, args);
   }
 
   @Test
diff --git a/solr/core/src/test/org/apache/solr/handler/AnalysisRequestHandlerTestBase.java b/solr/core/src/test/org/apache/solr/handler/AnalysisRequestHandlerTestBase.java
index b87c94c..14036ed 100644
--- a/solr/core/src/test/org/apache/solr/handler/AnalysisRequestHandlerTestBase.java
+++ b/solr/core/src/test/org/apache/solr/handler/AnalysisRequestHandlerTestBase.java
@@ -18,7 +18,7 @@ package org.apache.solr.handler;
 
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.util.NamedList;
-import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang3.ArrayUtils;
 
 /**
  * A base class for all analysis request handler tests.
diff --git a/solr/core/src/test/org/apache/solr/handler/XmlUpdateRequestHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/XmlUpdateRequestHandlerTest.java
index 961bb25..c675868 100644
--- a/solr/core/src/test/org/apache/solr/handler/XmlUpdateRequestHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/XmlUpdateRequestHandlerTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.solr.handler;
 
-import org.apache.commons.lang.ObjectUtils;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.util.ContentStreamBase;
@@ -37,6 +36,7 @@ import java.io.IOException;
 import java.io.StringReader;
 import java.util.Collection;
 import java.util.LinkedList;
+import java.util.Objects;
 import java.util.Queue;
 
 public class XmlUpdateRequestHandlerTest extends SolrTestCaseJ4 {
@@ -223,10 +223,10 @@ public class XmlUpdateRequestHandlerTest extends SolrTestCaseJ4 {
         DeleteUpdateCommand expected = deleteCommands.poll();
         assertNotNull("Unexpected delete command: [" + cmd + "]", expected);
         assertTrue("Expected [" + expected + "] but found [" + cmd + "]",
-            ObjectUtils.equals(expected.id, cmd.id) &&
-            ObjectUtils.equals(expected.query, cmd.query) &&
+            Objects.equals(expected.id, cmd.id) &&
+            Objects.equals(expected.query, cmd.query) &&
             expected.commitWithin==cmd.commitWithin && 
-            ObjectUtils.equals(expected.getRoute(), cmd.getRoute()));
+            Objects.equals(expected.getRoute(), cmd.getRoute()));
       }
     }
 
diff --git a/solr/core/src/test/org/apache/solr/handler/component/DistributedDebugComponentTest.java b/solr/core/src/test/org/apache/solr/handler/component/DistributedDebugComponentTest.java
index 5d3c7f4..52c05dd 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/DistributedDebugComponentTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/DistributedDebugComponentTest.java
@@ -17,7 +17,6 @@
 package org.apache.solr.handler.component;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang.StringUtils;
 import org.apache.solr.SolrJettyTestBase;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrQuery;
@@ -187,7 +186,7 @@ public class DistributedDebugComponentTest extends SolrJettyTestBase {
       } else if (random().nextBoolean()) {
         shards.remove(shard2);
       }
-      q.set("shards", StringUtils.join(shards, ","));
+      q.set("shards", String.join(",", shards));
 
 
       List<String> debug = new ArrayList<String>(10);
diff --git a/solr/core/src/test/org/apache/solr/handler/tagger/TaggerTestCase.java b/solr/core/src/test/org/apache/solr/handler/tagger/TaggerTestCase.java
index e525ce9..a1d3f673 100644
--- a/solr/core/src/test/org/apache/solr/handler/tagger/TaggerTestCase.java
+++ b/solr/core/src/test/org/apache/solr/handler/tagger/TaggerTestCase.java
@@ -32,8 +32,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.TreeSet;
 
-import org.apache.commons.lang.builder.CompareToBuilder;
-import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.CompareToBuilder;
+import org.apache.commons.lang3.builder.EqualsBuilder;
 import org.apache.lucene.document.Document;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.params.CommonParams;
diff --git a/solr/core/src/test/org/apache/solr/schema/TestSortableTextField.java b/solr/core/src/test/org/apache/solr/schema/TestSortableTextField.java
index 7128129..068273d 100644
--- a/solr/core/src/test/org/apache/solr/schema/TestSortableTextField.java
+++ b/solr/core/src/test/org/apache/solr/schema/TestSortableTextField.java
@@ -21,7 +21,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.SortedDocValuesField;
diff --git a/solr/core/src/test/org/apache/solr/search/TestPseudoReturnFields.java b/solr/core/src/test/org/apache/solr/search/TestPseudoReturnFields.java
index 1080354..e56f265 100644
--- a/solr/core/src/test/org/apache/solr/search/TestPseudoReturnFields.java
+++ b/solr/core/src/test/org/apache/solr/search/TestPseudoReturnFields.java
@@ -28,8 +28,6 @@ import org.apache.solr.schema.SchemaField;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
 
-import org.apache.commons.lang.StringUtils;
-
 import org.junit.Before;
 import org.junit.BeforeClass;
 
@@ -691,7 +689,7 @@ public class TestPseudoReturnFields extends SolrTestCaseJ4 {
       
       Collections.shuffle(fl, random);
 
-      final SolrParams singleFl = params("q","*:*", "rows", "1","fl",StringUtils.join(fl.toArray(),','));
+      final SolrParams singleFl = params("q","*:*", "rows", "1","fl",String.join(",", fl));
       final ModifiableSolrParams multiFl = params("q","*:*", "rows", "1");
       for (String item : fl) {
         multiFl.add("fl",item);
@@ -725,7 +723,7 @@ public class TestPseudoReturnFields extends SolrTestCaseJ4 {
       
       Collections.shuffle(fl, random);
 
-      final SolrParams singleFl = params("fl",StringUtils.join(fl.toArray(),','));
+      final SolrParams singleFl = params("fl",String.join(",", fl));
       final ModifiableSolrParams multiFl = params();
       for (String item : fl) {
         multiFl.add("fl",item);
diff --git a/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetJoinDomain.java b/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetJoinDomain.java
index 91b912f..d2ba787 100644
--- a/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetJoinDomain.java
+++ b/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetJoinDomain.java
@@ -29,7 +29,6 @@ import java.util.Map;
 import java.util.Random;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.apache.commons.lang.StringUtils;
 import org.apache.lucene.util.TestUtil;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrServerException;
@@ -418,7 +417,7 @@ public class TestCloudJSONFacetJoinDomain extends SolrCloudTestCase {
       // keep queries simple, just use str fields - not point of test
       clauses.add(strfield(fieldNum) + ":" + randFieldValue(fieldNum));
     }
-    return "(" + StringUtils.join(clauses, " OR ") + ")";
+    return "(" + String.join(" OR ", clauses) + ")";
   }
   
   /**
diff --git a/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetSKG.java b/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetSKG.java
index e212993..3ce0660 100644
--- a/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetSKG.java
+++ b/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetSKG.java
@@ -28,8 +28,6 @@ import java.util.Map;
 import java.util.Random;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.apache.commons.lang.StringUtils;
-
 import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.lucene.util.TestUtil;
 import org.apache.solr.client.solrj.SolrClient;
@@ -300,7 +298,7 @@ public class TestCloudJSONFacetSKG extends SolrCloudTestCase {
 
   private static String buildORQuery(String... clauses) {
     assert 0 < clauses.length;
-    return "(" + StringUtils.join(clauses, " OR ") + ")";
+    return "(" + String.join(" OR ", clauses) + ")";
   }
   
   /**
diff --git a/solr/licenses/commons-text-1.4.jar.sha1 b/solr/licenses/commons-text-1.4.jar.sha1
deleted file mode 100644
index ebda486..0000000
--- a/solr/licenses/commons-text-1.4.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-680b74de9c393bbf8d9e951af301659b16845907
diff --git a/solr/licenses/commons-text-1.6.jar.sha1 b/solr/licenses/commons-text-1.6.jar.sha1
new file mode 100644
index 0000000..84b2ef1f
--- /dev/null
+++ b/solr/licenses/commons-text-1.6.jar.sha1
@@ -0,0 +1 @@
+ba72cf0c40cf701e972fe7720ae844629f4ecca2
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpClientUtilTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpClientUtilTest.java
index b6dcf57..381e202 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpClientUtilTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpClientUtilTest.java
@@ -22,7 +22,7 @@ import java.io.IOException;
 import org.apache.solr.SolrTestCase;
 import org.apache.solr.client.solrj.impl.HttpClientUtil.SchemaRegistryProvider;
 
-import org.apache.commons.lang.reflect.FieldUtils;
+import org.apache.commons.lang3.reflect.FieldUtils;
 import org.apache.http.conn.socket.ConnectionSocketFactory;
 import org.apache.http.conn.ssl.DefaultHostnameVerifier;
 import org.apache.http.conn.ssl.NoopHostnameVerifier;
diff --git a/solr/solrj/src/test/org/apache/solr/common/util/TestJsonRecordReader.java b/solr/solrj/src/test/org/apache/solr/common/util/TestJsonRecordReader.java
index 9b10970..58ddb53 100644
--- a/solr/solrj/src/test/org/apache/solr/common/util/TestJsonRecordReader.java
+++ b/solr/solrj/src/test/org/apache/solr/common/util/TestJsonRecordReader.java
@@ -25,7 +25,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.util.RecordingJSONParser;