diff --git a/engines/base/pom.xml b/engines/base/pom.xml
index 1e56a7ba..a66fa849 100644
--- a/engines/base/pom.xml
+++ b/engines/base/pom.xml
@@ -79,6 +79,16 @@
logback-classic
1.2.6
+
+ org.apache.httpcomponents
+ httpclient
+ test
+
+
+ org.apache.httpcomponents
+ httpmime
+ test
+
diff --git a/engines/base/src/test/java/org/alfresco/transform/base/AbstractMetadataExtractsIT.java b/engines/base/src/test/java/org/alfresco/transform/base/AbstractMetadataExtractsIT.java
index ca6c7afb..1ba30730 100644
--- a/engines/base/src/test/java/org/alfresco/transform/base/AbstractMetadataExtractsIT.java
+++ b/engines/base/src/test/java/org/alfresco/transform/base/AbstractMetadataExtractsIT.java
@@ -27,7 +27,7 @@
package org.alfresco.transform.base;
import static java.text.MessageFormat.format;
-import static org.alfresco.transform.base.EngineClient.sendTRequest;
+import static org.alfresco.transform.base.clients.HttpClient.sendTRequest;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_METADATA_EXTRACT;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
@@ -43,6 +43,7 @@ import java.util.Map;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.alfresco.transform.base.clients.FileInfo;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
diff --git a/engines/base/src/test/java/org/alfresco/transform/base/FileInfo.java b/engines/base/src/test/java/org/alfresco/transform/base/clients/FileInfo.java
similarity index 98%
rename from engines/base/src/test/java/org/alfresco/transform/base/FileInfo.java
rename to engines/base/src/test/java/org/alfresco/transform/base/clients/FileInfo.java
index 318280ce..d9f0c953 100644
--- a/engines/base/src/test/java/org/alfresco/transform/base/FileInfo.java
+++ b/engines/base/src/test/java/org/alfresco/transform/base/clients/FileInfo.java
@@ -24,7 +24,7 @@
* along with Alfresco. If not, see .
* #L%
*/
-package org.alfresco.transform.base;
+package org.alfresco.transform.base.clients;
/**
* @author Cezar Leahu
diff --git a/engines/base/src/test/java/org/alfresco/transform/base/EngineClient.java b/engines/base/src/test/java/org/alfresco/transform/base/clients/HttpClient.java
similarity index 97%
rename from engines/base/src/test/java/org/alfresco/transform/base/EngineClient.java
rename to engines/base/src/test/java/org/alfresco/transform/base/clients/HttpClient.java
index 244c00de..842682e8 100644
--- a/engines/base/src/test/java/org/alfresco/transform/base/EngineClient.java
+++ b/engines/base/src/test/java/org/alfresco/transform/base/clients/HttpClient.java
@@ -5,7 +5,7 @@
* pursuant to a written agreement and any use of this program without such an
* agreement is prohibited.
*/
-package org.alfresco.transform.base;
+package org.alfresco.transform.base.clients;
import static java.util.Collections.emptyMap;
import static org.alfresco.transform.common.RequestParamMap.ENDPOINT_TRANSFORM;
@@ -25,7 +25,7 @@ import org.springframework.web.client.RestTemplate;
/**
* @author Cezar Leahu
*/
-public class EngineClient
+public class HttpClient
{
private static final RestTemplate REST_TEMPLATE = new RestTemplate();
diff --git a/engines/base/src/test/java/org/alfresco/transform/base/clients/JacksonSerializer.java b/engines/base/src/test/java/org/alfresco/transform/base/clients/JacksonSerializer.java
new file mode 100644
index 00000000..9b4fb5fd
--- /dev/null
+++ b/engines/base/src/test/java/org/alfresco/transform/base/clients/JacksonSerializer.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2015-2022 Alfresco Software, Ltd. All rights reserved.
+ *
+ * License rights for this program may be obtained from Alfresco Software, Ltd.
+ * pursuant to a written agreement and any use of this program without such an
+ * agreement is prohibited.
+ */
+
+package org.alfresco.transform.base.clients;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStreamWriter;
+
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.MapperFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class JacksonSerializer
+{
+ private static final ObjectMapper MAPPER;
+
+ static
+ {
+ MAPPER = new ObjectMapper();
+ MAPPER.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
+ MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ MAPPER.setSerializationInclusion(Include.NON_NULL);
+ }
+
+ public static byte[] serialize(T value) throws Exception
+ {
+ try (final ByteArrayOutputStream stream = new ByteArrayOutputStream(1024);
+ final OutputStreamWriter writer = new OutputStreamWriter(stream, UTF_8))
+ {
+ MAPPER.writer().writeValue(writer, value);
+ return stream.toByteArray();
+ }
+ }
+
+ public static T deserialize(byte[] data, Class cls) throws Exception
+ {
+ return MAPPER.readValue(data, cls);
+ }
+
+ public static T deserialize(byte[] data, int len, Class cls) throws Exception
+ {
+ return MAPPER.readValue(data, 0, len, cls);
+ }
+
+ public static String readStringValue(String json, String key) throws Exception
+ {
+ JsonNode node = MAPPER.readTree(json);
+ for (String k : key.split("\\."))
+ {
+ node = node.get(k);
+ }
+ return node.asText();
+ }
+}
diff --git a/engines/base/src/test/java/org/alfresco/transform/base/clients/JmsClient.java b/engines/base/src/test/java/org/alfresco/transform/base/clients/JmsClient.java
new file mode 100644
index 00000000..51481a33
--- /dev/null
+++ b/engines/base/src/test/java/org/alfresco/transform/base/clients/JmsClient.java
@@ -0,0 +1,190 @@
+/*
+ * Copyright 2015-2022 Alfresco Software, Ltd. All rights reserved.
+ *
+ * License rights for this program may be obtained from Alfresco Software, Ltd.
+ * pursuant to a written agreement and any use of this program without such an
+ * agreement is prohibited.
+ */
+
+package org.alfresco.transform.base.clients;
+
+import javax.jms.BytesMessage;
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.DeliveryMode;
+import javax.jms.Destination;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+
+import org.alfresco.transform.client.model.TransformReply;
+import org.alfresco.transform.client.model.TransformRequest;
+import org.apache.activemq.ActiveMQConnection;
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.activemq.command.ActiveMQQueue;
+
+/**
+ * JMSClient
+ *
+ * Contains the bare minimum logic necessary for sending and receiving T-Request/Reply messages
+ * through the basic vanilla ActiveMQ client.
+ *
+ * Used by Aspose t-engine and t-router, but likely to be useful in other t-engines.
+ *
+ * @author Cezar Leahu
+ */
+public class JmsClient
+{
+ private final ConnectionFactory factory;
+ private final ActiveMQQueue queue;
+
+ public JmsClient(final String server, final String queueName)
+ {
+ factory = new ActiveMQConnectionFactory(server);
+ queue = new ActiveMQQueue(queueName);
+ }
+
+ public ActiveMQQueue getDestination()
+ {
+ return queue;
+ }
+
+ private static void deleteQueues(final ConnectionFactory factory,
+ final ActiveMQQueue... queues) throws Exception
+ {
+ try (final Connection connection = factory.createConnection())
+ {
+ for (ActiveMQQueue q : queues)
+ {
+ // will fail if there are active subscribers
+ ((ActiveMQConnection) connection).destroyDestination(q);
+ }
+ }
+ }
+
+ public void sendBytesMessage(final TransformRequest request)
+ throws Exception
+ {
+ sendBytesMessage(request, request.getRequestId());
+ }
+
+ public void sendBytesMessage(final TransformRequest request, final String correlationID)
+ throws Exception
+ {
+ sendBytesMessage(JacksonSerializer.serialize(request), correlationID);
+ }
+
+ public void sendBytesMessage(final TransformRequest request, final String correlationID,
+ final Destination replyTo) throws Exception
+ {
+ sendBytesMessage(JacksonSerializer.serialize(request), correlationID, replyTo);
+ }
+
+ public void sendBytesMessage(final byte[] data, final String correlationID) throws
+ Exception
+ {
+ try (final Connection connection = factory.createConnection();
+ final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ final MessageProducer producer = session.createProducer(queue))
+ {
+ producer.setDeliveryMode(DeliveryMode.PERSISTENT);
+ final BytesMessage message = session.createBytesMessage();
+ message.writeBytes(data);
+ if (correlationID != null)
+ {
+ message.setJMSCorrelationID(correlationID);
+ }
+ producer.send(message);
+ }
+ }
+
+ public void sendBytesMessage(final byte[] data, final String correlationID,
+ final Destination replyTo) throws Exception
+ {
+ try (final Connection connection = factory.createConnection();
+ final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ final MessageProducer producer = session.createProducer(queue))
+ {
+ producer.setDeliveryMode(DeliveryMode.PERSISTENT);
+ final BytesMessage message = session.createBytesMessage();
+ message.writeBytes(data);
+ if (correlationID != null)
+ {
+ message.setJMSCorrelationID(correlationID);
+ }
+ if (replyTo != null)
+ {
+ message.setJMSReplyTo(replyTo);
+ }
+ producer.send(message);
+ }
+ }
+
+ public void sendTextMessage(final TransformRequest request)
+ throws Exception
+ {
+ sendTextMessage(request, request.getRequestId());
+ }
+
+ public void sendTextMessage(final TransformRequest request, final String correlationID)
+ throws Exception
+ {
+ sendTextMessage(new String(JacksonSerializer.serialize(request)), correlationID);
+ }
+
+ public void sendTextMessage(final String data, final String correlationID) throws
+ Exception
+ {
+ try (final Connection connection = factory.createConnection();
+ final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ final MessageProducer producer = session.createProducer(queue))
+ {
+ producer.setDeliveryMode(DeliveryMode.PERSISTENT);
+ final TextMessage message = session.createTextMessage(data);
+ if (correlationID != null)
+ {
+ message.setJMSCorrelationID(correlationID);
+ }
+ producer.send(message);
+ }
+ }
+
+ public TransformReply receiveMessage() throws Exception
+ {
+ return receiveMessage(2 * 60 * 1000); // 2 m
+ }
+
+ public TransformReply receiveMessage(final long timeout)
+ throws Exception
+ {
+ try (final Connection connection = factory.createConnection();
+ final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ final MessageConsumer consumer = session.createConsumer(queue))
+ {
+ connection.start();
+
+ final BytesMessage message = (BytesMessage) consumer.receive(timeout);
+ if (message == null)
+ {
+ throw new Exception("No reply was received for the multi-step transform request");
+ }
+ final byte[] data = new byte[2048];
+ int len = message.readBytes(data);
+ return JacksonSerializer.deserialize(data, len, TransformReply.class);
+ }
+ }
+
+ public void cleanQueue()
+ {
+ try
+ {
+ while (receiveMessage(2 * 1000) != null)
+ {
+ }
+ }
+ catch (Exception ignore)
+ {
+ }
+ }
+}
diff --git a/engines/base/src/test/java/org/alfresco/transform/base/clients/SfsClient.java b/engines/base/src/test/java/org/alfresco/transform/base/clients/SfsClient.java
new file mode 100644
index 00000000..025c9ef0
--- /dev/null
+++ b/engines/base/src/test/java/org/alfresco/transform/base/clients/SfsClient.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2015-2022 Alfresco Software, Ltd. All rights reserved.
+ *
+ * License rights for this program may be obtained from Alfresco Software, Ltd.
+ * pursuant to a written agreement and any use of this program without such an
+ * agreement is prohibited.
+ */
+
+package org.alfresco.transform.base.clients;
+
+import static java.text.MessageFormat.format;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.net.URI;
+import java.net.URL;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpHead;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.mime.HttpMultipartMode;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.entity.mime.content.FileBody;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.ImmutableMap;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.Logger;
+
+/**
+ * Used by Aspose t-engine and t-router, but likely to be useful in other t-engines.
+ *
+ * @author Cezar Leahu
+ */
+public class SfsClient
+{
+ static
+ {
+ ((Logger) LoggerFactory.getLogger("org.apache.http.client.protocol")).setLevel(Level.INFO);
+ ((Logger) LoggerFactory.getLogger("org.apache.http.impl.conn")).setLevel(Level.INFO);
+ ((Logger) LoggerFactory.getLogger("org.apache.http.headers")).setLevel(Level.INFO);
+ ((Logger) LoggerFactory.getLogger("org.apache.http.wire")).setLevel(Level.INFO);
+ ((Logger) LoggerFactory.getLogger("org.apache.http.wire")).setAdditive(false);
+ }
+
+ private static final String SFS_BASE_URL = "http://localhost:8099";
+
+ public static String uploadFile(final String fileToUploadName) throws Exception
+ {
+ return uploadFile(fileToUploadName, SFS_BASE_URL);
+ }
+
+ public static String uploadFile(final String fileToUploadName, final String sfsBaseUrl) throws Exception
+ {
+ final File file = readFile(fileToUploadName);
+
+ final HttpPost post = new HttpPost(
+ sfsBaseUrl+"/alfresco/api/-default-/private/sfs/versions/1/file");
+ post.setEntity(MultipartEntityBuilder
+ .create()
+ .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
+ .addPart("file", new FileBody(file, ContentType.DEFAULT_BINARY))
+ .build());
+
+ try (CloseableHttpClient client = HttpClients.createDefault())
+ {
+ final HttpResponse response = client.execute(post);
+ int status = response.getStatusLine().getStatusCode();
+ if (status >= 200 && status < 300)
+ {
+ return JacksonSerializer.readStringValue(EntityUtils.toString(response.getEntity()),
+ "entry.fileRef");
+ }
+ else
+ {
+ throw new Exception("Failed to upload source file to SFS");
+ }
+ }
+ }
+
+ private static File readFile(final String filename) throws Exception
+ {
+ final URL url = SfsClient.class.getClassLoader().getResource(filename);
+ if (url == null)
+ {
+ throw new Exception("Failed to load resource URL with filename " + filename);
+ }
+ final URI uri = url.toURI();
+ try
+ {
+ return Paths.get(uri).toFile();
+ }
+ catch (Exception e)
+ {
+ return readFileFromJar(uri);
+ }
+ }
+
+ private static File readFileFromJar(final URI uri) throws Exception
+ {
+ final String[] array = uri.toString().split("!");
+ try (final FileSystem fs = FileSystems.newFileSystem(URI.create(array[0]),
+ ImmutableMap.of("create", "true")))
+ {
+ File temp = File.createTempFile("temp-", "", new File(System.getProperty("user.dir")));
+ temp.deleteOnExit();
+ Files.copy(fs.getPath(array[1]), temp.toPath(), StandardCopyOption.REPLACE_EXISTING);
+ temp.deleteOnExit();
+ return temp;
+ }
+ }
+
+ public static boolean checkFile(final String uuid) throws Exception
+ {
+ return checkFile(uuid, SFS_BASE_URL);
+ }
+
+ public static boolean checkFile(final String uuid, final String sfsBaseUrl) throws Exception
+ {
+ final HttpHead head = new HttpHead(format(
+ sfsBaseUrl+"/alfresco/api/-default-/private/sfs/versions/1/file/{0}",
+ uuid));
+
+ try (CloseableHttpClient client = HttpClients.createDefault())
+ {
+ final HttpResponse response = client.execute(head);
+ final int status = response.getStatusLine().getStatusCode();
+ return status >= 200 && status < 300;
+ }
+ }
+
+ public static File downloadFile(final String uuid) throws Exception
+ {
+ return downloadFile(uuid, SFS_BASE_URL);
+ }
+
+ public static File downloadFile(final String uuid, final String sfsBaseUrl) throws Exception
+ {
+ final HttpGet get = new HttpGet(format(
+ sfsBaseUrl+"/alfresco/api/-default-/private/sfs/versions/1/file/{0}",
+ uuid));
+
+ try (CloseableHttpClient client = HttpClients.createDefault())
+ {
+ final HttpResponse response = client.execute(get);
+ final int status = response.getStatusLine().getStatusCode();
+ if (status < 200 || status >= 300)
+ {
+ throw new Exception("File with UUID " + uuid + " was not found on SFS");
+ }
+ final HttpEntity entity = response.getEntity();
+ if (entity == null)
+ {
+ throw new Exception("Failed to read HTTP reply entity for file with UUID " + uuid);
+ }
+
+ final File file = File.createTempFile(uuid, "_tmp",
+ new File(System.getProperty("user.dir")));
+ file.deleteOnExit();
+
+ try (OutputStream os = new FileOutputStream(file))
+ {
+ entity.writeTo(os);
+ }
+ return file;
+ }
+ }
+}
diff --git a/engines/base/src/test/java/org/alfresco/transform/base/SourceTarget.java b/engines/base/src/test/java/org/alfresco/transform/base/clients/SourceTarget.java
similarity index 97%
rename from engines/base/src/test/java/org/alfresco/transform/base/SourceTarget.java
rename to engines/base/src/test/java/org/alfresco/transform/base/clients/SourceTarget.java
index a7b9410f..da93457e 100644
--- a/engines/base/src/test/java/org/alfresco/transform/base/SourceTarget.java
+++ b/engines/base/src/test/java/org/alfresco/transform/base/clients/SourceTarget.java
@@ -24,7 +24,7 @@
* along with Alfresco. If not, see .
* #L%
*/
-package org.alfresco.transform.base;
+package org.alfresco.transform.base.clients;
import java.util.Objects;
diff --git a/engines/imagemagick/src/test/java/org/alfresco/transform/imagemagick/ImageMagickTransformationIT.java b/engines/imagemagick/src/test/java/org/alfresco/transform/imagemagick/ImageMagickTransformationIT.java
index b05bd588..d6a7cf03 100644
--- a/engines/imagemagick/src/test/java/org/alfresco/transform/imagemagick/ImageMagickTransformationIT.java
+++ b/engines/imagemagick/src/test/java/org/alfresco/transform/imagemagick/ImageMagickTransformationIT.java
@@ -30,8 +30,8 @@ import static java.text.MessageFormat.format;
import static java.util.Collections.emptyMap;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.toMap;
-import static org.alfresco.transform.base.EngineClient.sendTRequest;
-import static org.alfresco.transform.base.FileInfo.testFile;
+import static org.alfresco.transform.base.clients.HttpClient.sendTRequest;
+import static org.alfresco.transform.base.clients.FileInfo.testFile;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_APPLICATION_EPS;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_IMAGE_BMP;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_IMAGE_CGM;
@@ -76,7 +76,7 @@ import java.util.stream.Stream;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import org.alfresco.transform.base.FileInfo;
+import org.alfresco.transform.base.clients.FileInfo;
import org.apache.commons.lang3.tuple.Pair;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
diff --git a/engines/libreoffice/src/test/java/org/alfresco/transform/libreoffice/LibreOfficeTransformationIT.java b/engines/libreoffice/src/test/java/org/alfresco/transform/libreoffice/LibreOfficeTransformationIT.java
index 9c964801..3915a4a7 100644
--- a/engines/libreoffice/src/test/java/org/alfresco/transform/libreoffice/LibreOfficeTransformationIT.java
+++ b/engines/libreoffice/src/test/java/org/alfresco/transform/libreoffice/LibreOfficeTransformationIT.java
@@ -29,8 +29,8 @@ package org.alfresco.transform.libreoffice;
import static java.text.MessageFormat.format;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.toMap;
-import static org.alfresco.transform.base.EngineClient.sendTRequest;
-import static org.alfresco.transform.base.FileInfo.testFile;
+import static org.alfresco.transform.base.clients.HttpClient.sendTRequest;
+import static org.alfresco.transform.base.clients.FileInfo.testFile;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_EXCEL;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_HTML;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_IMAGE_SVG;
@@ -71,7 +71,7 @@ import java.util.stream.Stream;
import com.google.common.collect.ImmutableSet;
-import org.alfresco.transform.base.FileInfo;
+import org.alfresco.transform.base.clients.FileInfo;
import org.apache.commons.lang3.tuple.Pair;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
diff --git a/engines/misc/src/test/java/org/alfresco/transform/misc/MiscMetadataExtractsIT.java b/engines/misc/src/test/java/org/alfresco/transform/misc/MiscMetadataExtractsIT.java
index 0374bf81..9b19a305 100644
--- a/engines/misc/src/test/java/org/alfresco/transform/misc/MiscMetadataExtractsIT.java
+++ b/engines/misc/src/test/java/org/alfresco/transform/misc/MiscMetadataExtractsIT.java
@@ -27,14 +27,12 @@
package org.alfresco.transform.misc;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_HTML;
-import static org.alfresco.transform.common.Mimetype.MIMETYPE_RFC822;
-import static org.alfresco.transform.common.Mimetype.MIMETYPE_XHTML;
-import static org.alfresco.transform.base.FileInfo.testFile;
+import static org.alfresco.transform.base.clients.FileInfo.testFile;
import java.util.stream.Stream;
import org.alfresco.transform.base.AbstractMetadataExtractsIT;
-import org.alfresco.transform.base.FileInfo;
+import org.alfresco.transform.base.clients.FileInfo;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
diff --git a/engines/misc/src/test/java/org/alfresco/transform/misc/MiscTransformsIT.java b/engines/misc/src/test/java/org/alfresco/transform/misc/MiscTransformsIT.java
index f7d8aca9..b6984c6c 100644
--- a/engines/misc/src/test/java/org/alfresco/transform/misc/MiscTransformsIT.java
+++ b/engines/misc/src/test/java/org/alfresco/transform/misc/MiscTransformsIT.java
@@ -26,8 +26,8 @@
*/
package org.alfresco.transform.misc;
-import org.alfresco.transform.base.FileInfo;
-import org.alfresco.transform.base.SourceTarget;
+import org.alfresco.transform.base.clients.FileInfo;
+import org.alfresco.transform.base.clients.SourceTarget;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import org.springframework.core.io.Resource;
@@ -39,8 +39,8 @@ import java.util.stream.Stream;
import static java.text.MessageFormat.format;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.toMap;
-import static org.alfresco.transform.base.EngineClient.sendTRequest;
-import static org.alfresco.transform.base.FileInfo.testFile;
+import static org.alfresco.transform.base.clients.HttpClient.sendTRequest;
+import static org.alfresco.transform.base.clients.FileInfo.testFile;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_DITA;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_EXCEL;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_HTML;
diff --git a/engines/pdfrenderer/src/test/java/org/alfresco/transform/pdfrenderer/PdfRendererTransformationIT.java b/engines/pdfrenderer/src/test/java/org/alfresco/transform/pdfrenderer/PdfRendererTransformationIT.java
index a84fc8b3..27b5770e 100644
--- a/engines/pdfrenderer/src/test/java/org/alfresco/transform/pdfrenderer/PdfRendererTransformationIT.java
+++ b/engines/pdfrenderer/src/test/java/org/alfresco/transform/pdfrenderer/PdfRendererTransformationIT.java
@@ -29,8 +29,8 @@ package org.alfresco.transform.pdfrenderer;
import static java.text.MessageFormat.format;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.toMap;
-import static org.alfresco.transform.base.EngineClient.sendTRequest;
-import static org.alfresco.transform.base.FileInfo.testFile;
+import static org.alfresco.transform.base.clients.HttpClient.sendTRequest;
+import static org.alfresco.transform.base.clients.FileInfo.testFile;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
import static org.springframework.http.HttpStatus.OK;
@@ -38,7 +38,7 @@ import static org.springframework.http.HttpStatus.OK;
import java.util.Map;
import java.util.stream.Stream;
-import org.alfresco.transform.base.FileInfo;
+import org.alfresco.transform.base.clients.FileInfo;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import org.slf4j.Logger;
diff --git a/engines/tika/src/test/java/org/alfresco/transform/tika/TikaMetadataExtractsIT.java b/engines/tika/src/test/java/org/alfresco/transform/tika/TikaMetadataExtractsIT.java
index 1e76056c..c3b1164a 100644
--- a/engines/tika/src/test/java/org/alfresco/transform/tika/TikaMetadataExtractsIT.java
+++ b/engines/tika/src/test/java/org/alfresco/transform/tika/TikaMetadataExtractsIT.java
@@ -28,7 +28,7 @@ package org.alfresco.transform.tika;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_APP_DWG;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_OUTLOOK_MSG;
-import static org.alfresco.transform.base.FileInfo.testFile;
+import static org.alfresco.transform.base.clients.FileInfo.testFile;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_AUDIO_MP4;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_EXCEL;
import static org.alfresco.transform.common.Mimetype.MIMETYPE_IMAGE_BMP;
@@ -75,7 +75,7 @@ import static org.alfresco.transform.common.Mimetype.MIMETYPE_IMAGE_RAW_NEF;
import java.util.stream.Stream;
import org.alfresco.transform.base.AbstractMetadataExtractsIT;
-import org.alfresco.transform.base.FileInfo;
+import org.alfresco.transform.base.clients.FileInfo;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
diff --git a/engines/tika/src/test/java/org/alfresco/transform/tika/TikaTransformationIT.java b/engines/tika/src/test/java/org/alfresco/transform/tika/TikaTransformationIT.java
index 10153ecb..7b4b7ba9 100644
--- a/engines/tika/src/test/java/org/alfresco/transform/tika/TikaTransformationIT.java
+++ b/engines/tika/src/test/java/org/alfresco/transform/tika/TikaTransformationIT.java
@@ -27,7 +27,7 @@
package org.alfresco.transform.tika;
import com.google.common.collect.ImmutableMap;
-import org.alfresco.transform.base.EngineClient;
+import org.alfresco.transform.base.clients.HttpClient;
import org.apache.commons.lang3.tuple.Triple;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
@@ -77,7 +77,7 @@ public class TikaTransformationIT
sourceFile, sourceMimetype, targetMimetype, targetExtension);
try
{
- final ResponseEntity response = EngineClient.sendTRequest(ENGINE_URL, sourceFile, null,
+ final ResponseEntity response = HttpClient.sendTRequest(ENGINE_URL, sourceFile, null,
targetMimetype, targetExtension, ImmutableMap.of(
"targetEncoding", "UTF-8",
"sourceMimetype", sourceMimetype));
diff --git a/pom.xml b/pom.xml
index e89d771d..4cf94b63 100644
--- a/pom.xml
+++ b/pom.xml
@@ -249,6 +249,16 @@
junit
${dependency.junit.version}
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.13
+
+
+ org.apache.httpcomponents
+ httpmime
+ 4.5.13
+