Fixed XmlMergeCoordinator::mergeBatch

This commit is contained in:
Mikhail Trofimov 2025-10-09 15:30:36 +03:00
parent e5945a1ef2
commit b272123802

View file

@ -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<PartFilePayload> 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);
}
/**