From 1815596a7bc55c74133afa4760208f603d5033dd Mon Sep 17 00:00:00 2001 From: Mikhail Trofimov Date: Wed, 16 Jul 2025 10:20:14 +0300 Subject: [PATCH] Added new method for stax reader to read from inputstream --- .../credit_tracker/facade/SignalFacade.java | 2 +- .../service/xml/stax/StaxXmlProcessor.java | 3 +++ .../service/xml/stax/XmlProcessorStaxImpl.java | 17 +++++++++++++++++ .../ru/nbch/credit_tracker/stax/StaxTest.java | 6 +++--- .../ru/nbch/credit_tracker/utils/UtilTest.java | 2 +- 5 files changed, 25 insertions(+), 5 deletions(-) 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 aa714d0..4d8cabd 100644 --- a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java +++ b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java @@ -97,7 +97,7 @@ public class SignalFacade { zipInputStream = new ZipInputStream(file.getInputStream()); zipInputStream.getNextEntry(); - monitoringRequest = staxXmlProcessor.read(zipInputStream.readAllBytes(), MonitoringRequest.class); + monitoringRequest = staxXmlProcessor.read(zipInputStream, MonitoringRequest.class); } catch (Exception e) { if (e.getCause() instanceof XMLStreamException) { throw clientExcp(SignalError.ERROR_011, XmlErrorFormat.MonitoringError); diff --git a/src/main/java/ru/nbch/credit_tracker/service/xml/stax/StaxXmlProcessor.java b/src/main/java/ru/nbch/credit_tracker/service/xml/stax/StaxXmlProcessor.java index 762e54b..9a5b65c 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/xml/stax/StaxXmlProcessor.java +++ b/src/main/java/ru/nbch/credit_tracker/service/xml/stax/StaxXmlProcessor.java @@ -1,6 +1,9 @@ package ru.nbch.credit_tracker.service.xml.stax; +import java.io.InputStream; + public interface StaxXmlProcessor { Z read(String xml, Class clazz); Z read(byte[] xml, Class clazz); + Z read(InputStream inputStream, Class clazz); } \ No newline at end of file diff --git a/src/main/java/ru/nbch/credit_tracker/service/xml/stax/XmlProcessorStaxImpl.java b/src/main/java/ru/nbch/credit_tracker/service/xml/stax/XmlProcessorStaxImpl.java index 4041eab..93fccda 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/xml/stax/XmlProcessorStaxImpl.java +++ b/src/main/java/ru/nbch/credit_tracker/service/xml/stax/XmlProcessorStaxImpl.java @@ -8,6 +8,7 @@ import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import java.io.ByteArrayInputStream; +import java.io.InputStream; import java.io.StringReader; import java.util.Arrays; import java.util.HashMap; @@ -66,4 +67,20 @@ public class XmlProcessorStaxImpl implements StaxXmlProcessor { throw new RuntimeException(e); } } + + @Override + public Z read(InputStream inputStream, Class clazz) { + try { + XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(inputStream); + @SuppressWarnings("unchecked") + StaxReader staxProcessor = (StaxReader) staxReaders.get(clazz); + if (staxProcessor != null) { + return staxProcessor.read(xmlStreamReader); + } + throw new IllegalStateException("no stax reader registered for " + clazz); + } catch (Exception e) { + log.error(ExceptionUtils.getStackTrace(e)); + throw new RuntimeException(e); + } + } } diff --git a/src/test/java/ru/nbch/credit_tracker/stax/StaxTest.java b/src/test/java/ru/nbch/credit_tracker/stax/StaxTest.java index 6186793..1030edd 100644 --- a/src/test/java/ru/nbch/credit_tracker/stax/StaxTest.java +++ b/src/test/java/ru/nbch/credit_tracker/stax/StaxTest.java @@ -58,7 +58,7 @@ public class StaxTest { void testInvalidXmlRequest() { Exception ex = null; try { - staxXmlProcessor.read(getClass().getResourceAsStream("/monitoring_request/xml/invalid_xml_request.xml").readAllBytes(), MonitoringRequest.class); + staxXmlProcessor.read(getClass().getResourceAsStream("/monitoring_request/xml/invalid_xml_request.xml"), MonitoringRequest.class); } catch (Exception e) { ex = e; } @@ -70,7 +70,7 @@ public class StaxTest { void testEmptyXmlRequest() { Exception ex = null; try { - staxXmlProcessor.read(getClass().getResourceAsStream("/monitoring_request/xml/empty_request.xml").readAllBytes(), MonitoringRequest.class); + staxXmlProcessor.read(getClass().getResourceAsStream("/monitoring_request/xml/empty_request.xml"), MonitoringRequest.class); } catch (Exception e) { ex = e; } @@ -80,7 +80,7 @@ public class StaxTest { @Test void testNonEpectedTag() throws IOException { - MonitoringRequest monitoringRequest = staxXmlProcessor.read(getClass().getResourceAsStream("/monitoring_request/xml/non_expected_tag_request.xml").readAllBytes(), MonitoringRequest.class); + MonitoringRequest monitoringRequest = staxXmlProcessor.read(getClass().getResourceAsStream("/monitoring_request/xml/non_expected_tag_request.xml"), MonitoringRequest.class); Assertions.assertNull(monitoringRequest.getSubjects().getSubject().get(0).getId()); } diff --git a/src/test/java/ru/nbch/credit_tracker/utils/UtilTest.java b/src/test/java/ru/nbch/credit_tracker/utils/UtilTest.java index e842d18..b2cf3c4 100644 --- a/src/test/java/ru/nbch/credit_tracker/utils/UtilTest.java +++ b/src/test/java/ru/nbch/credit_tracker/utils/UtilTest.java @@ -137,7 +137,7 @@ public class UtilTest { try { zipInputStream = new ZipInputStream(getClass().getResourceAsStream(path)); zipInputStream.getNextEntry(); - monitoringRequest = staxXmlProcessor.read(zipInputStream.readAllBytes(), MonitoringRequest.class); + monitoringRequest = staxXmlProcessor.read(zipInputStream, MonitoringRequest.class); } catch (Exception e) { if (e.getCause() instanceof XMLStreamException) { ex = clientExcp(SignalError.ERROR_011, XmlErrorFormat.MonitoringError);