diff --git a/FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/frostserver/service/ServiceRequest.java b/FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/frostserver/service/ServiceRequest.java
index 4c16b0bf2..60ee8dc66 100644
--- a/FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/frostserver/service/ServiceRequest.java
+++ b/FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/frostserver/service/ServiceRequest.java
@@ -110,7 +110,7 @@ public String getContentString() {
return IOUtils.toString(contentBinary, StandardCharsets.UTF_8);
} catch (IOException ex) {
LOGGER.debug("Failed to convert input to a string", ex);
- LOGGER.error("Failed to convert input to a string: " + ex.getMessage());
+ LOGGER.error("Failed to convert input to a string: {}", ex.getMessage());
throw new IllegalStateException("Failed to read input.");
}
}
diff --git a/Plugins/BatchProcessing/pom.xml b/Plugins/BatchProcessing/pom.xml
index 3764a613e..2aa94cbf0 100644
--- a/Plugins/BatchProcessing/pom.xml
+++ b/Plugins/BatchProcessing/pom.xml
@@ -29,6 +29,10 @@
FROST-Server.Util
${project.version}
+
+ commons-io
+ commons-io
+
org.junit.jupiter
junit-jupiter
diff --git a/Plugins/BatchProcessing/src/main/java/de/fraunhofer/iosb/ilt/frostserver/plugin/batchprocessing/ServiceBatchProcessing.java b/Plugins/BatchProcessing/src/main/java/de/fraunhofer/iosb/ilt/frostserver/plugin/batchprocessing/ServiceBatchProcessing.java
index cbb1e9df9..7acb016f6 100644
--- a/Plugins/BatchProcessing/src/main/java/de/fraunhofer/iosb/ilt/frostserver/plugin/batchprocessing/ServiceBatchProcessing.java
+++ b/Plugins/BatchProcessing/src/main/java/de/fraunhofer/iosb/ilt/frostserver/plugin/batchprocessing/ServiceBatchProcessing.java
@@ -75,8 +75,8 @@ public ServiceResponse executeBatchOperation(final Service service, final Servic
return sendResponse(resultContent, response);
case CONTENT_TYPE_APPLICATION_JSON:
- JsonBatchResponse batchResponse = new JsonBatchProcessor(service, request, response)
- .processRequest(streaming);
+ final JsonBatchProcessor jsonBatchProcessor = new JsonBatchProcessor(service, request, response);
+ final JsonBatchResponse batchResponse = jsonBatchProcessor.processRequest(streaming);
try {
new ResultFormatterDefault()
.format(null, null, batchResponse, false)
diff --git a/Plugins/BatchProcessing/src/main/java/de/fraunhofer/iosb/ilt/frostserver/plugin/batchprocessing/json/JsonBatchProcessor.java b/Plugins/BatchProcessing/src/main/java/de/fraunhofer/iosb/ilt/frostserver/plugin/batchprocessing/json/JsonBatchProcessor.java
index e31cade42..3f8072fa9 100644
--- a/Plugins/BatchProcessing/src/main/java/de/fraunhofer/iosb/ilt/frostserver/plugin/batchprocessing/json/JsonBatchProcessor.java
+++ b/Plugins/BatchProcessing/src/main/java/de/fraunhofer/iosb/ilt/frostserver/plugin/batchprocessing/json/JsonBatchProcessor.java
@@ -40,13 +40,17 @@
import de.fraunhofer.iosb.ilt.frostserver.service.UpdateMode;
import de.fraunhofer.iosb.ilt.frostserver.settings.CoreSettings;
import de.fraunhofer.iosb.ilt.frostserver.util.StringHelper;
+import java.io.BufferedWriter;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -67,6 +71,7 @@ public class JsonBatchProcessor implements Iterator {
private final ServiceRequest request;
private final ServiceResponse response;
+ private Path tempFile;
private JsonParser parser;
private JsonBatchResultItem next;
@@ -86,7 +91,12 @@ public JsonBatchResponse processRequest(boolean stream) {
if (stream) {
parser = mapper.createParser(request.getContentReader());
} else {
- parser = mapper.createParser(request.getContentString());
+ tempFile = Files.createTempFile(null, null);
+ try (BufferedWriter tempWriter = Files.newBufferedWriter(tempFile)) {
+ IOUtils.copy(request.getContentReader(), tempWriter);
+ tempWriter.flush();
+ }
+ parser = mapper.createParser(tempFile.toFile());
}
JsonToken currentToken = parser.nextToken();
while (currentToken != null) {
@@ -112,12 +122,21 @@ public JsonBatchResponse processRequest(boolean stream) {
throw new IllegalArgumentException("No requests found in input");
}
- private void close() {
+ public void close() {
if (parser != null) {
try {
parser.close();
} catch (IOException ex) {
- LOGGER.warn("Failed to close parser!", ex);
+ LOGGER.warn("Failed to close parser: {}", ex.getMessage());
+ LOGGER.debug("Failed to close parser.", ex);
+ }
+ }
+ if (tempFile != null) {
+ try {
+ Files.deleteIfExists(tempFile);
+ } catch (IOException ex) {
+ LOGGER.warn("Failed to delete temp file: {}", ex.getMessage());
+ LOGGER.debug("Failed to delete temp file.", ex);
}
}
}