Get rid of XmlUtilService; Created beans of IXmlProcessor and StaxXmlProcessor

This commit is contained in:
Mikhail Trofimov 2025-07-02 12:15:43 +03:00
parent b4c4475398
commit 3358a8ee21
4 changed files with 31 additions and 65 deletions

View file

@ -1,8 +1,8 @@
package ru.nbch.credit_tracker.service.xml.jaxb;
package ru.nbch.credit_tracker.config.xml;
import jakarta.xml.bind.JAXBException;
import org.springframework.stereotype.Service;
import org.xml.sax.SAXException;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ru.nbch.credit_tracker.entities.request.monitoring_request.MonitoringRequest;
import ru.nbch.credit_tracker.entities.response.errors.MonitoringError;
import ru.nbch.credit_tracker.entities.response.monitoring_signal_response.MonitoringSignalResponse;
@ -10,33 +10,22 @@ import ru.nbch.credit_tracker.entities.response.online_download.OnlineDownloadRe
import ru.nbch.credit_tracker.entities.response.online_report.SgnlOnlineReport;
import ru.nbch.credit_tracker.entities.response.success.MonitoringResponse;
import ru.nbch.credit_tracker.entities.signal_package.Signals;
import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor;
import ru.nbch.credit_tracker.service.xml.jaxb.XmlProcessorImplAnyClasses;
import ru.nbch.credit_tracker.service.xml.stax.SgnlReportStatusStaxReader;
import ru.nbch.credit_tracker.service.xml.stax.StaxReader;
import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor;
import ru.nbch.credit_tracker.service.xml.stax.XmlProcessorStaxImpl;
import javax.xml.XMLConstants;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.stax.StAXSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import static javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI;
@Configuration
public class XmlConfig {
@Service
public class XmlUtilService {
//сделать бином
public IXmlProcessor createJaxbProcessor() throws JAXBException {
@Bean
public IXmlProcessor xmlProcessor() throws JAXBException {
return new XmlProcessorImplAnyClasses(Charset.forName("windows-1251"),
// unmarshalling classes
MonitoringRequest.class,
@ -49,24 +38,10 @@ public class XmlUtilService {
MonitoringSignalResponse.class);
}
@Bean
public StaxXmlProcessor staxXmlProcessor() {
List<StaxReader<?>> staxReader = new ArrayList<>();
staxReader.add(new SgnlReportStatusStaxReader());
return new XmlProcessorStaxImpl(staxReader);
}
public void validateXMLByXSD(InputStream xmlStream, String xsdPath) throws IOException, XMLStreamException, SAXException {
SchemaFactory sf = SchemaFactory.newInstance(W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File(xsdPath));
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
xmlInputFactory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
xmlInputFactory.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "");
xmlInputFactory.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
Validator validator = schema.newValidator();
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(xmlStream);
validator.validate(new StAXSource(xmlStreamReader));
}
}

View file

@ -24,7 +24,6 @@ import ru.nbch.credit_tracker.service.indic.PhoneService;
import ru.nbch.credit_tracker.service.scoring.AuthorizationService;
import ru.nbch.credit_tracker.service.signal.SignalRestService;
import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor;
import ru.nbch.credit_tracker.service.xml.jaxb.XmlUtilService;
import ru.nbch.credit_tracker.utils.CTUtil;
import ru.nbch.credit_tracker.utils.ValidationUtil;
import ru.nbch.credit_tracker.utils.ZipUtils;
@ -49,7 +48,7 @@ public class SignalFacade {
private final AuthorizationService authorizationService;
private final SignalService signalService;
private final SignalRestService signalRestService;
private final XmlUtilService xmlUtilService;
private final IXmlProcessor xmlProcessor;
private final ExecutorService executor;
@ -58,13 +57,13 @@ public class SignalFacade {
AuthorizationService authorizationService,
SignalService signalService,
SignalRestService signalRestService,
XmlUtilService xmlUtilService,
IXmlProcessor xmlProcessor,
@Qualifier("executorService") ExecutorService executor) {
this.config = config;
this.authorizationService = authorizationService;
this.signalService = signalService;
this.signalRestService = signalRestService;
this.xmlUtilService = xmlUtilService;
this.xmlProcessor = xmlProcessor;
this.executor = executor;
}
@ -92,8 +91,7 @@ public class SignalFacade {
zipInputStream = new ZipInputStream(file.getInputStream());
zipInputStream.getNextEntry();
IXmlProcessor processor = xmlUtilService.createJaxbProcessor();
monitoringRequest = processor.read(zipInputStream, MonitoringRequest.class);
monitoringRequest = xmlProcessor.read(zipInputStream, MonitoringRequest.class);
} catch (Exception e) {
if (e instanceof SignalClientException) {
throw (SignalClientException) e;

View file

@ -14,7 +14,6 @@ import ru.nbch.credit_tracker.entities.response.online_report.Report;
import ru.nbch.credit_tracker.entities.response.online_report.SgnlOnlineReport;
import ru.nbch.credit_tracker.service.signal.SignalRestService;
import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor;
import ru.nbch.credit_tracker.service.xml.jaxb.XmlUtilService;
import ru.nbch.credit_tracker.utils.CTUtil;
import java.io.ByteArrayInputStream;
@ -36,16 +35,16 @@ public class MonitoringService {
private final SignalRestService signalRestService;
private final SignalService signalService;
private final XmlUtilService xmlUtilService;
private final IXmlProcessor xmlProcessor;
private final CreditTrackerSettings config;
public MonitoringService(SignalRestService signalRestService,
SignalService signalService,
XmlUtilService xmlUtilService,
IXmlProcessor xmlProcessor,
CreditTrackerSettings config) {
this.signalRestService = signalRestService;
this.signalService = signalService;
this.xmlUtilService = xmlUtilService;
this.xmlProcessor = xmlProcessor;
this.config = config;
}
@ -160,8 +159,7 @@ public class MonitoringService {
folder.mkdir();
}
IXmlProcessor processor = xmlUtilService.createJaxbProcessor();
String xmlStr = processor.asString(response, true);
String xmlStr = xmlProcessor.asString(response, true);
byte[] xmlBytes = xmlStr.getBytes(Charset.forName("windows-1251"));
try (FileOutputStream fos = new FileOutputStream(filePath + fileName + ".zip");
@ -206,8 +204,7 @@ public class MonitoringService {
OnlineDownloadReport report;
try (GZIPInputStream zipInputStream = new GZIPInputStream(new ByteArrayInputStream(archive))) {
IXmlProcessor processor = xmlUtilService.createJaxbProcessor();
report = processor.read(zipInputStream, OnlineDownloadReport.class);
report = xmlProcessor.read(zipInputStream, OnlineDownloadReport.class);
} catch (Exception e) {
log.error(e.getMessage(), e);

View file

@ -15,7 +15,6 @@ import ru.nbch.credit_tracker.entities.response.external_errors.SgnlReport;
import ru.nbch.credit_tracker.entities.response.online_report.SgnlOnlineReport;
import ru.nbch.credit_tracker.entities.signal_package.Signals;
import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor;
import ru.nbch.credit_tracker.service.xml.jaxb.XmlUtilService;
import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor;
import java.io.ByteArrayOutputStream;
@ -35,14 +34,17 @@ public class SignalRestService {
private static String DOWNLOAD_REPORT_URI = "onlinedownload";
private final RestTemplate restTemplate;
private final XmlUtilService xmlUtilService;
private final IXmlProcessor xmlProcessor;
private final StaxXmlProcessor staxProcessor;
private final String authToken;
public SignalRestService(@Qualifier(value = "restTemplate") RestTemplate restTemplate,
XmlUtilService xmlUtilService,
IXmlProcessor xmlProcessor,
StaxXmlProcessor staxProcessor,
CreditTrackerSettings config) throws Exception {
this.restTemplate = restTemplate;
this.xmlUtilService = xmlUtilService;
this.xmlProcessor = xmlProcessor;
this.staxProcessor = staxProcessor;
this.authToken = buildToken(config.getSignalsToken(), config.getSignalsuser());
}
@ -64,8 +66,7 @@ public class SignalRestService {
// good response
return true;
} else if (response.getStatusCode().value() == 200 && response.getBody() != null) {
StaxXmlProcessor staxXmlProcessor = xmlUtilService.staxXmlProcessor();
SgnlReport error = staxXmlProcessor.read(response.getBody(), SgnlReport.class);
SgnlReport error = staxProcessor.read(response.getBody(), SgnlReport.class);
if (error.getError().getDescription() != null) {
log.error("Ошибка при постановке пакета на мониторинг в официальный сервис сигналов: {}", error.getError().getDescription());
} else {
@ -92,8 +93,7 @@ public class SignalRestService {
);
String answer = response.getBody();
StaxXmlProcessor staxXmlProcessor = xmlUtilService.staxXmlProcessor();
SgnlReport error = staxXmlProcessor.read(answer, SgnlReport.class);
SgnlReport error = staxProcessor.read(answer, SgnlReport.class);
if (error.getError().getDescription() != null) {
log.error("Ошибка при удалении пакета из сервиса НБКИ. packCode={}. Описание: {}", packCode, error.getError().getDescription());
}
@ -116,15 +116,13 @@ public class SignalRestService {
String answer = response.getBody();
StaxXmlProcessor staxXmlProcessor = xmlUtilService.staxXmlProcessor();
SgnlReport error = staxXmlProcessor.read(answer, SgnlReport.class);
SgnlReport error = staxProcessor.read(answer, SgnlReport.class);
if (error.getError().getDescription() != null) {
log.error("Ошибка при получении пакета из сервиса НБКИ. packCode={}. Описание: {}", packCode, error.getError().getDescription());
return null;
}
try {
IXmlProcessor processor = xmlUtilService.createJaxbProcessor();
return processor.read(answer, SgnlOnlineReport.class);
return xmlProcessor.read(answer, SgnlOnlineReport.class);
} catch (Exception e) {
log.error("Ошибка при получении пакета из сервиса НБКИ. Код ошибки: {} packCode={}", response.getStatusCode().value(), packCode);
return null;
@ -148,8 +146,7 @@ public class SignalRestService {
byte[] answer = response.getBody();
if (isXmlError(response.getBody())) {
StaxXmlProcessor staxXmlProcessor = xmlUtilService.staxXmlProcessor();
SgnlReport error = staxXmlProcessor.read(answer, SgnlReport.class);
SgnlReport error = staxProcessor.read(answer, SgnlReport.class);
if (error.getError().getDescription() != null) {
log.error("Ошибка при скачивание отчета. fNameReport={}. Описание: {}", reportName, error.getError().getDescription());
return null;
@ -175,8 +172,7 @@ public class SignalRestService {
}
private Resource compressFile(Signals signals) throws Exception {
IXmlProcessor processor = xmlUtilService.createJaxbProcessor();
String requestData = processor.asString(signals, false);
String requestData = xmlProcessor.asString(signals, false);
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
try (GZIPOutputStream gzipStream = new GZIPOutputStream(byteStream)) {