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); } } }