diff --git a/client-transport/src/main/java/com/nortal/jroad/client/service/extractor/StandardXRoadConsumerMessageExtractor.java b/client-transport/src/main/java/com/nortal/jroad/client/service/extractor/StandardXRoadConsumerMessageExtractor.java index df2e8eaa..0298942f 100644 --- a/client-transport/src/main/java/com/nortal/jroad/client/service/extractor/StandardXRoadConsumerMessageExtractor.java +++ b/client-transport/src/main/java/com/nortal/jroad/client/service/extractor/StandardXRoadConsumerMessageExtractor.java @@ -58,8 +58,8 @@ public XRoadMessage extractData(WebServiceMessage response) throws IO Element body = mes.getSOAPBody(); NodeList kehaNodes = body.getChildNodes(); kehaNode = body.getChildNodes().item(0); - if (kehaNode.getTextContent().contains("\n")) { - kehaNode = kehaNodes.item(1); + if (kehaNode instanceof javax.xml.soap.Text) { + kehaNode = getKehaNode(kehaNodes, 1); } if (kehaNodes.getLength() > 1) { // In case of multiple elements take the first one that matches specified hierarchy @@ -140,6 +140,14 @@ public XRoadMessage extractData(WebServiceMessage response) throws IO } + private Node getKehaNode(NodeList kehaNodes, int nextIndex) { + Node kehaNode = kehaNodes.item(nextIndex); + if (kehaNode instanceof javax.xml.soap.Text) { + kehaNode = getKehaNode(kehaNodes, ++nextIndex); + } + return kehaNode; + } + private void checkForNonTechnicalFault(Node kehaNode) throws NonTechnicalFaultException { String nonTechnicalFaultCode = null; String nonTechnicalFaultString = null; diff --git a/client-transport/src/test/java/com/nortal/jroad/client/service/extractor/StandardXRoadConsumerMessageExtractorTest.java b/client-transport/src/test/java/com/nortal/jroad/client/service/extractor/StandardXRoadConsumerMessageExtractorTest.java new file mode 100644 index 00000000..0b22f27a --- /dev/null +++ b/client-transport/src/test/java/com/nortal/jroad/client/service/extractor/StandardXRoadConsumerMessageExtractorTest.java @@ -0,0 +1,128 @@ +package com.nortal.jroad.client.service.extractor; + + +import com.nortal.jroad.model.XRoadMessage; +import com.nortal.jroad.model.XmlBeansXRoadMetadata; +import org.junit.Test; +import org.springframework.core.io.ClassPathResource; +import org.springframework.ws.soap.saaj.SaajSoapMessage; + +import javax.xml.soap.MessageFactory; +import javax.xml.soap.SOAPException; +import javax.xml.soap.SOAPMessage; +import java.io.IOException; +import java.io.InputStream; + +import static org.junit.Assert.assertEquals; + +public class StandardXRoadConsumerMessageExtractorTest { + + private final static String RESULT_PEM_FORMAT = "\n" + + " \n" + + " 2017-10-06T15:51:00\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " A801201702209240\n" + + " \n" + + " \n" + + " \n" + + " jyritamm\n" + + " JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu\n" + + "ZyhldC1FRSkgL1N0cnVjdFRyZWVSb290IDE1IDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+\n" + + "CjE1MDc2Nw0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyNy9Sb290IDEgMCBS\n" + + "L0luZm8gMTQgMCBSL0lEWzxBNDQzRkEyNkVCQzM3RTRDODczOUFEQkYxNUEyRTZDRj48QTQ0M0ZB\n" + + "MjZFQkMzN0U0Qzg3MzlBREJGMTVBMkU2Q0Y+XSAvUHJldiAxNTA3NjcvWFJlZlN0bSAxNTA0NjM+\n" + + "Pg0Kc3RhcnR4cmVmDQoxNTE0NjUNCiUlRU9G\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + ""; + + + private final static String RESULT_SINGLE_ROW_FORMAT = "\n" + + " \n" + + " 2017-10-06T15:51:00\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " A801201702209240\n" + + " \n" + + " \n" + + " \n" + + " jyritamm\n" + + " JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb" + + "2cvUGFnZXMgMiAwIFIvTGFuZyhldC1FRSkgL1N0cnVjdFRyZWVSb290IDE1IDAgUi9NYXJrSW5mbzw8L01h" + + "cmtlZCB0cnVlPj4+CjE1MDc2Nw0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyNy9Sb29" + + "0IDEgMCBSL0luZm8gMTQgMCBSL0lEWzxBNDQzRkEyNkVCQzM3RTRDODczOUFEQkYxNUEyRTZDRj48QTQ0M0" + + "ZBMjZFQkMzN0U0Qzg3MzlBREJGMTVBMkU2Q0YXSAvUHJldiAxNTA3NjcvWFJlZlN0bSAxNTA0NjM+Pg0Kc3" + + "RhcnR4cmVmDQoxNTE0NjUNCiUlRU9G\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + ""; + + public static final StandardXRoadConsumerMessageExtractor EXTRACTOR = + new StandardXRoadConsumerMessageExtractor(new XmlBeansXRoadMetadata("operation", + "b", + "request", + "d", + "response", + "f", + "1")); + + + private SOAPMessage getMessageFromString(String filename) throws SOAPException, IOException { + InputStream is = (new ClassPathResource(filename)).getInputStream(); + + return MessageFactory.newInstance().createMessage(null, is); + } + + @Test + public void testExtractDataWithComment() throws IOException, SOAPException { + // with comment + XRoadMessage message = EXTRACTOR.extractData(new SaajSoapMessage(getMessageFromString("extractor/EarestFail6.xml"))); + assertEquals(RESULT_PEM_FORMAT, message.getContent().toString()); + } + + + @Test + public void testExtractDataBase64SingleRow() throws IOException, SOAPException { + // whole file in a single row (base64binary in a single row) + XRoadMessage message = EXTRACTOR.extractData(new SaajSoapMessage(getMessageFromString("extractor/EarestFail4.xml"))); + assertEquals(RESULT_SINGLE_ROW_FORMAT, message.getContent().toString()); + } + + @Test + public void testExtractDataBase64PEMFormat() throws IOException, SOAPException { + // xml elements in a single row, but base64binary part on different rows (PEM format) + XRoadMessage message1 = EXTRACTOR.extractData(new SaajSoapMessage(getMessageFromString("extractor/EarestFail1.xml"))); + assertEquals(RESULT_PEM_FORMAT, message1.getContent().toString()); + + // manually formated file with whitespaces between elements without new row (base64binary in PEM format) + XRoadMessage message2 = EXTRACTOR.extractData(new SaajSoapMessage(getMessageFromString("extractor/EarestFail2.xml"))); + assertEquals(RESULT_PEM_FORMAT, message2.getContent().toString()); + + // menually formated file without whitespaces between elements and without new row (base64binary in PEM format) + XRoadMessage message3 = EXTRACTOR.extractData(new SaajSoapMessage(getMessageFromString("extractor/EarestFail3.xml"))); + assertEquals(RESULT_PEM_FORMAT, message3.getContent().toString()); + + // menually formated file with whitespaces between elements and without new row (base64binary in PEM format) + XRoadMessage message5 = EXTRACTOR.extractData(new SaajSoapMessage(getMessageFromString("extractor/EarestFail5.xml"))); + assertEquals(RESULT_PEM_FORMAT, message5.getContent().toString()); + } +} diff --git a/client-transport/src/test/resources/extractor/EarestFail1.xml b/client-transport/src/test/resources/extractor/EarestFail1.xml new file mode 100644 index 00000000..808d05f4 --- /dev/null +++ b/client-transport/src/test/resources/extractor/EarestFail1.xml @@ -0,0 +1,6 @@ +7000034915d11af556270000349-14233366054.0ee-devGOV70000349earest-clientee-devGOV70000310earestMulleSaabunudAsjadv12017-10-06T15:51:00A801201702209240jyritammJVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu +ZyhldC1FRSkgL1N0cnVjdFRyZWVSb290IDE1IDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+ +CjE1MDc2Nw0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyNy9Sb290IDEgMCBS +L0luZm8gMTQgMCBSL0lEWzxBNDQzRkEyNkVCQzM3RTRDODczOUFEQkYxNUEyRTZDRj48QTQ0M0ZB +MjZFQkMzN0U0Qzg3MzlBREJGMTVBMkU2Q0Y+XSAvUHJldiAxNTA3NjcvWFJlZlN0bSAxNTA0NjM+ +Pg0Kc3RhcnR4cmVmDQoxNTE0NjUNCiUlRU9G \ No newline at end of file diff --git a/client-transport/src/test/resources/extractor/EarestFail2.xml b/client-transport/src/test/resources/extractor/EarestFail2.xml new file mode 100644 index 00000000..dd4b589f --- /dev/null +++ b/client-transport/src/test/resources/extractor/EarestFail2.xml @@ -0,0 +1,54 @@ + + + 70000349 + 15d11af556270000349-1423336605 + 4.0 + + ee-dev + GOV + 70000349 + earest-client + + + ee-dev + GOV + 70000310 + earest + MulleSaabunudAsjad + v1 + + + + + + + + + 2017-10-06T15:51:00 + + + + + + + A801201702209240 + + + + jyritamm + JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu +ZyhldC1FRSkgL1N0cnVjdFRyZWVSb290IDE1IDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+ +CjE1MDc2Nw0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyNy9Sb290IDEgMCBS +L0luZm8gMTQgMCBSL0lEWzxBNDQzRkEyNkVCQzM3RTRDODczOUFEQkYxNUEyRTZDRj48QTQ0M0ZB +MjZFQkMzN0U0Qzg3MzlBREJGMTVBMkU2Q0Y+XSAvUHJldiAxNTA3NjcvWFJlZlN0bSAxNTA0NjM+ +Pg0Kc3RhcnR4cmVmDQoxNTE0NjUNCiUlRU9G + + + + + + + + + + \ No newline at end of file diff --git a/client-transport/src/test/resources/extractor/EarestFail3.xml b/client-transport/src/test/resources/extractor/EarestFail3.xml new file mode 100644 index 00000000..b0c01cf9 --- /dev/null +++ b/client-transport/src/test/resources/extractor/EarestFail3.xml @@ -0,0 +1,55 @@ + + + 70000349 + 15d11af556270000349-1423336605 + 4.0 + + ee-dev + GOV + 70000349 + earest-client + + + ee-dev + GOV + 70000310 + earest + MulleSaabunudAsjad + v1 + + + + + + 2017-10-06T15:51:00 + + + + + + + A801201702209240 + + + + jyritamm + +JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu +ZyhldC1FRSkgL1N0cnVjdFRyZWVSb290IDE1IDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+ +CjE1MDc2Nw0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyNy9Sb290IDEgMCBS +L0luZm8gMTQgMCBSL0lEWzxBNDQzRkEyNkVCQzM3RTRDODczOUFEQkYxNUEyRTZDRj48QTQ0M0ZB +MjZFQkMzN0U0Qzg3MzlBREJGMTVBMkU2Q0Y+XSAvUHJldiAxNTA3NjcvWFJlZlN0bSAxNTA0NjM+ +Pg0Kc3RhcnR4cmVmDQoxNTE0NjUNCiUlRU9G + + + + + + + + + + + \ No newline at end of file diff --git a/client-transport/src/test/resources/extractor/EarestFail4.xml b/client-transport/src/test/resources/extractor/EarestFail4.xml new file mode 100644 index 00000000..c2961ffc --- /dev/null +++ b/client-transport/src/test/resources/extractor/EarestFail4.xml @@ -0,0 +1 @@ +7000034915d11af556270000349-14233366054.0ee-devGOV70000349earest-clientee-devGOV70000310earestMulleSaabunudAsjadv12017-10-06T15:51:00A801201702209240jyritammJVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhldC1FRSkgL1N0cnVjdFRyZWVSb290IDE1IDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+CjE1MDc2Nw0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyNy9Sb290IDEgMCBSL0luZm8gMTQgMCBSL0lEWzxBNDQzRkEyNkVCQzM3RTRDODczOUFEQkYxNUEyRTZDRj48QTQ0M0ZBMjZFQkMzN0U0Qzg3MzlBREJGMTVBMkU2Q0YXSAvUHJldiAxNTA3NjcvWFJlZlN0bSAxNTA0NjM+Pg0Kc3RhcnR4cmVmDQoxNTE0NjUNCiUlRU9G \ No newline at end of file diff --git a/client-transport/src/test/resources/extractor/EarestFail5.xml b/client-transport/src/test/resources/extractor/EarestFail5.xml new file mode 100644 index 00000000..c338065c --- /dev/null +++ b/client-transport/src/test/resources/extractor/EarestFail5.xml @@ -0,0 +1,50 @@ + + + 70000349 + 15d11af556270000349-1423336605 + 4.0 + + ee-dev + GOV + 70000349 + earest-client + + + ee-dev + GOV + 70000310 + earest + MulleSaabunudAsjad + v1 + + + + + 2017-10-06T15:51:00 + + + + + + + A801201702209240 + + + + jyritamm + JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu +ZyhldC1FRSkgL1N0cnVjdFRyZWVSb290IDE1IDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+ +CjE1MDc2Nw0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyNy9Sb290IDEgMCBS +L0luZm8gMTQgMCBSL0lEWzxBNDQzRkEyNkVCQzM3RTRDODczOUFEQkYxNUEyRTZDRj48QTQ0M0ZB +MjZFQkMzN0U0Qzg3MzlBREJGMTVBMkU2Q0Y+XSAvUHJldiAxNTA3NjcvWFJlZlN0bSAxNTA0NjM+ +Pg0Kc3RhcnR4cmVmDQoxNTE0NjUNCiUlRU9G + + + + + + + + + + \ No newline at end of file diff --git a/client-transport/src/test/resources/extractor/EarestFail6.xml b/client-transport/src/test/resources/extractor/EarestFail6.xml new file mode 100644 index 00000000..c69723e7 --- /dev/null +++ b/client-transport/src/test/resources/extractor/EarestFail6.xml @@ -0,0 +1,59 @@ + + + 70000349 + 15d11af556270000349-1423336605 + 4.0 + + ee-dev + GOV + 70000349 + earest-client + + + ee-dev + GOV + 70000310 + earest + MulleSaabunudAsjad + v1 + + + + + + + + + + 2017-10-06T15:51:00 + + + + + + + A801201702209240 + + + + jyritamm + +JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu +ZyhldC1FRSkgL1N0cnVjdFRyZWVSb290IDE1IDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+ +CjE1MDc2Nw0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyNy9Sb290IDEgMCBS +L0luZm8gMTQgMCBSL0lEWzxBNDQzRkEyNkVCQzM3RTRDODczOUFEQkYxNUEyRTZDRj48QTQ0M0ZB +MjZFQkMzN0U0Qzg3MzlBREJGMTVBMkU2Q0Y+XSAvUHJldiAxNTA3NjcvWFJlZlN0bSAxNTA0NjM+ +Pg0Kc3RhcnR4cmVmDQoxNTE0NjUNCiUlRU9G + + + + + + + + + + + \ No newline at end of file