diff --git a/pom.xml b/pom.xml
index f7ba0dfeb..c1f5cd510 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,6 +46,7 @@
2.3.12
2.0.6.1
5.3.7
+ 4.5.13
@@ -120,6 +121,11 @@
${dependency.jdom2.version}
+
+ org.apache.httpcomponents
+ httpclient
+ ${dependency.httpclient.version}
+
diff --git a/search-services/alfresco-search/pom.xml b/search-services/alfresco-search/pom.xml
index d37e1d41c..bc80122af 100644
--- a/search-services/alfresco-search/pom.xml
+++ b/search-services/alfresco-search/pom.xml
@@ -207,6 +207,10 @@
avatica-core
1.13.0
+
+ org.apache.httpcomponents
+ httpclient
+
diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/AlfrescoCoreAdminHandler.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/AlfrescoCoreAdminHandler.java
index 57c46ba39..83eeeeeaa 100644
--- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/AlfrescoCoreAdminHandler.java
+++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/AlfrescoCoreAdminHandler.java
@@ -45,7 +45,6 @@ import org.alfresco.solr.tracker.TrackerRegistry;
import org.alfresco.solr.utils.Utils;
import org.alfresco.util.Pair;
import org.alfresco.util.shard.ExplicitShardingPolicy;
-import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.io.FileUtils;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CoreAdminParams;
@@ -314,7 +313,6 @@ public class AlfrescoCoreAdminHandler extends CoreAdminHandler
AlfrescoSolrDataModel.getInstance().close();
SOLRAPIClientFactory.close();
- MultiThreadedHttpConnectionManager.shutdownAll();
coreNames().forEach(trackerRegistry::removeTrackersForCore);
informationServers.clear();
diff --git a/search-services/alfresco-solrclient-lib/pom.xml b/search-services/alfresco-solrclient-lib/pom.xml
index 620e05a0d..26c11918d 100644
--- a/search-services/alfresco-solrclient-lib/pom.xml
+++ b/search-services/alfresco-solrclient-lib/pom.xml
@@ -46,6 +46,11 @@
3.1.0
+
+ org.apache.httpcomponents
+ httpclient
+
+
junit
diff --git a/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIClient.java b/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIClient.java
index b83aca2bc..4a8786f7e 100644
--- a/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIClient.java
+++ b/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIClient.java
@@ -60,8 +60,7 @@ import org.alfresco.util.ISO8601DateFormat;
import org.alfresco.util.Pair;
import org.apache.commons.codec.EncoderException;
import org.apache.commons.codec.net.URLCodec;
-import org.apache.commons.httpclient.HttpStatus;
-import org.apache.commons.httpclient.util.DateUtil;
+import org.apache.http.HttpStatus;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -75,6 +74,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
@@ -112,6 +112,8 @@ public class SOLRAPIClient
private static final String CHECKSUM_HEADER = "XAlfresco-modelChecksum";
+ private static final SimpleDateFormat httpHeaderDateFormat = new SimpleDateFormat("EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'Z", Locale.US);
+
private AlfrescoHttpClient repositoryHttpClient;
private SOLRDeserializer deserializer;
private DictionaryService dictionaryService;
@@ -1030,7 +1032,7 @@ public class SOLRAPIClient
Map headers = new HashMap<>();
if(modifiedSince != null)
{
- headers.put("If-Modified-Since", String.valueOf(DateUtil.formatDate(new Date(modifiedSince))));
+ headers.put("If-Modified-Since", httpHeaderDateFormat.format(new Date(modifiedSince)));
}
if (compression)
{
diff --git a/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIClientFactory.java b/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIClientFactory.java
index 3c081d177..71cd8e5f1 100644
--- a/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIClientFactory.java
+++ b/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIClientFactory.java
@@ -38,7 +38,6 @@ import org.alfresco.httpclient.HttpClientFactory;
import org.alfresco.httpclient.HttpClientFactory.SecureCommsType;
import org.alfresco.repo.dictionary.NamespaceDAO;
import org.alfresco.service.cmr.dictionary.DictionaryService;
-import org.apache.commons.httpclient.params.DefaultHttpParams;
/**
* This factory encapsulates the creation of a SOLRAPIClient and the management of that resource.
@@ -263,13 +262,6 @@ public class SOLRAPIClientFactory
setMaxTotalConnections(maxTotalConnections);
setMaxHostConnections(maxHostConnections);
setSocketTimeout(socketTimeout);
- init();
- }
-
- @Override
- public void init()
- {
- DefaultHttpParams.setHttpParamsFactory(new NonBlockingHttpParamsFactory());
}
}
diff --git a/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIQueueClient.java b/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIQueueClient.java
index 2e68fe80c..e3f69b52d 100644
--- a/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIQueueClient.java
+++ b/search-services/alfresco-solrclient-lib/src/main/java/org/alfresco/solr/client/SOLRAPIQueueClient.java
@@ -32,7 +32,6 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
-
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -46,7 +45,7 @@ import org.alfresco.httpclient.Response;
import org.alfresco.repo.dictionary.NamespaceDAO;
import org.alfresco.repo.index.shard.ShardState;
import org.alfresco.service.namespace.QName;
-import org.apache.commons.httpclient.HttpStatus;
+import org.apache.http.HttpStatus;
import org.json.JSONException;
// TODO error handling, including dealing with a repository that is not responsive (ConnectException in sendRemoteRequest)
diff --git a/search-services/alfresco-solrclient-lib/src/test/java/org/alfresco/solr/client/SOLRAPIClientTest.java b/search-services/alfresco-solrclient-lib/src/test/java/org/alfresco/solr/client/SOLRAPIClientTest.java
index b63b34777..42fbff5db 100644
--- a/search-services/alfresco-solrclient-lib/src/test/java/org/alfresco/solr/client/SOLRAPIClientTest.java
+++ b/search-services/alfresco-solrclient-lib/src/test/java/org/alfresco/solr/client/SOLRAPIClientTest.java
@@ -26,16 +26,13 @@
package org.alfresco.solr.client;
-import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
-import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
-import java.security.AlgorithmParameters;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -48,11 +45,8 @@ import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
-import org.alfresco.encryption.DefaultEncryptionUtils;
-import org.alfresco.encryption.KeyProvider;
import org.alfresco.encryption.KeyResourceLoader;
import org.alfresco.encryption.KeyStoreParameters;
-import org.alfresco.encryption.MACUtils.MACInput;
import org.alfresco.encryption.ssl.SSLEncryptionParameters;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.httpclient.AlfrescoHttpClient;
@@ -76,13 +70,9 @@ import org.alfresco.repo.tenant.SingleTServiceImpl;
import org.alfresco.repo.tenant.TenantService;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.DynamicallySizedThreadPoolExecutor;
-import org.alfresco.util.Pair;
import org.alfresco.util.TraceableThreadFactory;
import org.alfresco.util.cache.DefaultAsynchronouslyRefreshedCacheRegistry;
import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.commons.httpclient.HttpMethod;
-import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
-import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.JSONException;
@@ -103,10 +93,6 @@ public class SOLRAPIClientTest extends TestCase
private SOLRAPIClient client;
- private SOLRAPIClient invalidKeyClient;
-
- private SOLRAPIClient tamperWithClient;
-
private DictionaryDAOImpl dictionaryDAO;
private CMISStrictDictionaryService cmisDictionaryService;
@@ -567,118 +553,4 @@ public class SOLRAPIClientTest extends TestCase
assertTrue(diffs.size() > 0);
}
-// public void testMAC() throws IOException, JSONException
-// {
-// // dodyClient has a secret key that is not the same as the repository's. This
-// // should fail with a 401
-// try
-// {
-// Transactions transactions = invalidKeyClient.getTransactions(1298288417234l, null, null, null, 5);
-// }
-// catch (AuthenticationException e)
-// {
-// assertEquals("Should have caught unathorised request", e.getMethod().getStatusCode(), HttpStatus.SC_UNAUTHORIZED);
-// }
-//
-// try
-// {
-// tamperWithEncryptionService.setOverrideTimestamp(true);
-// Transactions transactions = tamperWithClient.getTransactions(1298288417234l, null, null, null, 5);
-// }
-// catch (AuthenticationException e)
-// {
-// assertEquals("Should have caught unathorised request", e.getMethod().getStatusCode(), HttpStatus.SC_UNAUTHORIZED);
-// }
-// finally
-// {
-// tamperWithEncryptionService.setOverrideTimestamp(false);
-// }
-//
-// try
-// {
-// tamperWithEncryptionService.setOverrideMAC(true);
-// Transactions transactions = tamperWithClient.getTransactions(1298288417234l, null, null, null, 5);
-// }
-// catch (AuthenticationException e)
-// {
-// assertEquals("Should have caught unathorised request", e.getMethod().getStatusCode(), HttpStatus.SC_UNAUTHORIZED);
-// }
-// finally
-// {
-// tamperWithEncryptionService.setOverrideMAC(false);
-// }
-// }
-
- private void outputTextContent(SOLRAPIClient.GetTextContentResponse response) throws IOException
- {
- InputStream in = response.getContent();
- if (in != null)
- {
- logger.debug("Text content:");
-
- BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
- String line = null;
- while ((line = reader.readLine()) != null)
- {
- logger.debug(line);
- }
- }
- }
-
- /**
- * Overrides request encryption to create dodgy MAC and timestamp on requests
- */
- private static class TestEncryptionUtils extends DefaultEncryptionUtils
- {
- private boolean overrideMAC = false;
-
- private boolean overrideTimestamp = false;
-
- public void setOverrideMAC(boolean overrideMAC)
- {
- this.overrideMAC = overrideMAC;
- }
-
- public void setOverrideTimestamp(boolean overrideTimestamp)
- {
- this.overrideTimestamp = overrideTimestamp;
- }
-
- @Override
- public void setRequestAuthentication(HttpMethod method, byte[] message) throws IOException
- {
- if (method instanceof PostMethod)
- {
- // encrypt body
- Pair encrypted = encryptor.encrypt(KeyProvider.ALIAS_SOLR, null, message);
- setRequestAlgorithmParameters(method, encrypted.getSecond());
-
- ((PostMethod) method).setRequestEntity(new ByteArrayRequestEntity(encrypted.getFirst(), "application/octet-stream"));
- }
-
- long requestTimestamp = System.currentTimeMillis();
-
- // add MAC header
- byte[] mac = macUtils.generateMAC(KeyProvider.ALIAS_SOLR, new MACInput(message, requestTimestamp, getLocalIPAddress()));
-
- if (logger.isDebugEnabled())
- {
- logger.debug("Setting MAC " + mac + " on HTTP request " + method.getPath());
- logger.debug("Setting timestamp " + requestTimestamp + " on HTTP request " + method.getPath());
- }
-
- if (overrideMAC)
- {
- mac[0] += (byte) 1;
- }
- setRequestMac(method, mac);
-
- if (overrideTimestamp)
- {
- requestTimestamp += 60000;
- }
- // prevent replays
- setRequestTimestamp(method, requestTimestamp);
- }
- }
}
diff --git a/search-services/packaging/pom.xml b/search-services/packaging/pom.xml
index 8d666dc7b..764a4dda2 100644
--- a/search-services/packaging/pom.xml
+++ b/search-services/packaging/pom.xml
@@ -175,6 +175,7 @@
+
diff --git a/search-services/packaging/src/main/resources/licenses/notice.txt b/search-services/packaging/src/main/resources/licenses/notice.txt
index 34ee92b11..27812ef08 100644
--- a/search-services/packaging/src/main/resources/licenses/notice.txt
+++ b/search-services/packaging/src/main/resources/licenses/notice.txt
@@ -35,7 +35,7 @@ json-20210307.jar https://github.com/stleary/JSON-java
xml-resolver-1.2.jar https://github.com/FasterXML/jackson
neethi-3.1.1.jar http://ws.apache.org/commons/neethi/
commons-dbcp-1.4.jar http://jakarta.apache.org/commons/
-commons-logging-1.1.3.jar http://jakarta.apache.org/commons/
+commons-logging-1.2.jar http://jakarta.apache.org/commons/
commons-lang3-3.11.jar http://jakarta.apache.org/commons/
commons-pool-1.5.4.jar http://jakarta.apache.org/commons/
commons-compress-1.21.jar https://commons.apache.org/proper/commons-compress/
@@ -192,7 +192,7 @@ gmetric4j-1.0.7.jar
guava-14.0.1.jar
hppc-0.7.1.jar
htrace-core-3.2.0-incubating.jar
-httpclient-4.4.1.jar
+httpclient-4.5.13.jar
httpcore-4.4.1.jar
httpmime-4.4.1.jar
icu4j-56.1.jar