From b2721238027ad8a35e1f68c8736f0f747b0a2e86 Mon Sep 17 00:00:00 2001 From: Mikhail Trofimov Date: Thu, 9 Oct 2025 15:30:36 +0300 Subject: [PATCH] Fixed XmlMergeCoordinator::mergeBatch --- .../service/task/XmlMergeCoordinator.java | 29 ++++++------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/src/main/java/ru/nbch/credit_tracker/service/task/XmlMergeCoordinator.java b/src/main/java/ru/nbch/credit_tracker/service/task/XmlMergeCoordinator.java index 82ac282..79e3519 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/task/XmlMergeCoordinator.java +++ b/src/main/java/ru/nbch/credit_tracker/service/task/XmlMergeCoordinator.java @@ -1,5 +1,13 @@ package ru.nbch.credit_tracker.service.task; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Service; +import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; +import ru.nbch.credit_tracker.model.PartFilePayload; + +import javax.xml.stream.*; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -7,7 +15,6 @@ import java.io.OutputStream; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.StandardCopyOption; import java.nio.file.StandardOpenOption; import java.util.ArrayList; import java.util.List; @@ -15,18 +22,6 @@ import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLOutputFactory; -import javax.xml.stream.XMLStreamConstants; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.exception.ExceptionUtils; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.stereotype.Service; -import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; -import ru.nbch.credit_tracker.model.PartFilePayload; @Slf4j @Service @@ -91,26 +86,20 @@ public final class XmlMergeCoordinator implements InitializingBean { private void mergeBatch(List inputs) throws Exception { Integer packageId = inputs.stream().findFirst().get().getPackageId(); String outName = "merged_" + packageId + ".xml"; - Path tmp = mergedDir.resolve(outName + ".part"); Path out = mergedDir.resolve(outName); XMLOutputFactory xof = XMLOutputFactory.newFactory(); - try (OutputStream os = Files.newOutputStream(tmp, StandardOpenOption.CREATE_NEW)) { + try (OutputStream os = Files.newOutputStream(out, StandardOpenOption.CREATE, StandardOpenOption.APPEND)) { XMLStreamWriter w = xof.createXMLStreamWriter(os, encoding.name()); - w.writeStartDocument(encoding.name(), "1.0"); - w.writeStartElement("Persons"); for (PartFilePayload in : inputs) { log.debug("Copy person to file {}", in.getPartPath()); copyPersonsChildren(in.getPartPath(), w); } - w.writeEndElement(); - w.writeEndDocument(); w.flush(); w.close(); } - Files.move(tmp, out, StandardCopyOption.ATOMIC_MOVE); } /**