diff --git a/src/main/java/ru/nbch/credit_tracker/service/xml/jaxb/XmlUtilService.java b/src/main/java/ru/nbch/credit_tracker/config/xml/XmlConfig.java similarity index 51% rename from src/main/java/ru/nbch/credit_tracker/service/xml/jaxb/XmlUtilService.java rename to src/main/java/ru/nbch/credit_tracker/config/xml/XmlConfig.java index 77253e7..263b036 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/xml/jaxb/XmlUtilService.java +++ b/src/main/java/ru/nbch/credit_tracker/config/xml/XmlConfig.java @@ -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 = 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)); - } - } diff --git a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java index 57787e3..e4ca4ce 100644 --- a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java +++ b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java @@ -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; diff --git a/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java b/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java index c777b27..cb1b905 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java @@ -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); diff --git a/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java b/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java index 33a0cb8..b53ee2b 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java @@ -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)) {