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 7da795ec..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 @@ -59,7 +59,7 @@ public XRoadMessage extractData(WebServiceMessage response) throws IO NodeList kehaNodes = body.getChildNodes(); kehaNode = body.getChildNodes().item(0); if (kehaNode instanceof javax.xml.soap.Text) { - kehaNode = kehaNodes.item(1); + 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 index 9ba72f3f..c9fedef4 100644 --- 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 @@ -1,6 +1,7 @@ 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; @@ -12,8 +13,69 @@ import java.io.IOException; import java.io.InputStream; +import static org.junit.Assert.assertEquals; + public class StandardXRoadConsumerMessageExtractorTest { + private final static String TEST_MESSAGE = "\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 TEST_MESSAGE2 = "\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" + + ""; + private SOAPMessage getMessageFromString(String filename) throws SOAPException, IOException { InputStream is = (new ClassPathResource(filename)).getInputStream(); @@ -21,9 +83,24 @@ private SOAPMessage getMessageFromString(String filename) throws SOAPException, return MessageFactory.newInstance().createMessage(null, is); } + @Test + public void testExtractDataWithComment() throws IOException, SOAPException { + StandardXRoadConsumerMessageExtractor extractor = + new StandardXRoadConsumerMessageExtractor(new XmlBeansXRoadMetadata("operation", + "b", + "request", + "d", + "response", + "f", + "1")); + // with comment + XRoadMessage message = extractor.extractData(new SaajSoapMessage(getMessageFromString("extractor/EarestFail6.xml"))); + assertEquals(TEST_MESSAGE, message.getContent().toString()); + } + @Test - public void testExtractData() throws IOException, SOAPException { + public void testExtractDataBase64SingleRow() throws IOException, SOAPException { StandardXRoadConsumerMessageExtractor extractor = new StandardXRoadConsumerMessageExtractor(new XmlBeansXRoadMetadata("operation", "b", @@ -32,21 +109,37 @@ public void testExtractData() throws IOException, SOAPException { "response", "f", "1")); + // whole file in a single row (base64binary in a single row) + XRoadMessage message = extractor.extractData(new SaajSoapMessage(getMessageFromString("extractor/EarestFail4.xml"))); + assertEquals(TEST_MESSAGE2, message.getContent().toString()); + } + @Test + public void testExtractDataBase64PEMFormat() throws IOException, SOAPException { + StandardXRoadConsumerMessageExtractor extractor = + new StandardXRoadConsumerMessageExtractor(new XmlBeansXRoadMetadata("operation", + "b", + "request", + "d", + "response", + "f", + "1")); - // xml elements in a single row, but base64binary part on different rows - extractor.extractData(new SaajSoapMessage(getMessageFromString("extractor/EarestFail1.xml"))); - // manually formated file with whitespaces between elements without new row - extractor.extractData(new SaajSoapMessage(getMessageFromString("extractor/EarestFail2.xml"))); + // 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(TEST_MESSAGE, message1.getContent().toString()); - // menually formated file without whitespaces between elements and without new row - extractor.extractData(new SaajSoapMessage(getMessageFromString("extractor/EarestFail3.xml"))); + // 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(TEST_MESSAGE, message2.getContent().toString()); - // whole file in a single row - extractor.extractData(new SaajSoapMessage(getMessageFromString("extractor/EarestFail4.xml"))); + // 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(TEST_MESSAGE, message3.getContent().toString()); - // menually formated file with whitespaces between elements and without new row - extractor.extractData(new SaajSoapMessage(getMessageFromString("extractor/EarestFail5.xml"))); + // 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(TEST_MESSAGE, message5.getContent().toString()); } } diff --git a/client-transport/src/test/resources/extractor/EarestFail1.xml b/client-transport/src/test/resources/extractor/EarestFail1.xml index a6e026e0..808d05f4 100644 --- a/client-transport/src/test/resources/extractor/EarestFail1.xml +++ b/client-transport/src/test/resources/extractor/EarestFail1.xml @@ -1,6 +1,6 @@ 7000034915d11af556270000349-14233366054.0ee-devGOV70000349earest-clientee-devGOV70000310earestMulleSaabunudAsjadv12017-10-06T15:51:00A801201702209240jyritammJVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu - ZyhldC1FRSkgL1N0cnVjdFRyZWVSb290IDE1IDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+ - CjE1MDc2Nw0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyNy9Sb290IDEgMCBS - L0luZm8gMTQgMCBSL0lEWzxBNDQzRkEyNkVCQzM3RTRDODczOUFEQkYxNUEyRTZDRj48QTQ0M0ZB - MjZFQkMzN0U0Qzg3MzlBREJGMTVBMkU2Q0Y+XSAvUHJldiAxNTA3NjcvWFJlZlN0bSAxNTA0NjM+ - Pg0Kc3RhcnR4cmVmDQoxNTE0NjUNCiUlRU9G \ No newline at end of file +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 index 4d17a055..dd4b589f 100644 --- a/client-transport/src/test/resources/extractor/EarestFail2.xml +++ b/client-transport/src/test/resources/extractor/EarestFail2.xml @@ -37,11 +37,11 @@ jyritamm JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu - ZyhldC1FRSkgL1N0cnVjdFRyZWVSb290IDE1IDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+ - CjE1MDc2Nw0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyNy9Sb290IDEgMCBS - L0luZm8gMTQgMCBSL0lEWzxBNDQzRkEyNkVCQzM3RTRDODczOUFEQkYxNUEyRTZDRj48QTQ0M0ZB - MjZFQkMzN0U0Qzg3MzlBREJGMTVBMkU2Q0Y+XSAvUHJldiAxNTA3NjcvWFJlZlN0bSAxNTA0NjM+ - Pg0Kc3RhcnR4cmVmDQoxNTE0NjUNCiUlRU9G +ZyhldC1FRSkgL1N0cnVjdFRyZWVSb290IDE1IDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+ +CjE1MDc2Nw0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyNy9Sb290IDEgMCBS +L0luZm8gMTQgMCBSL0lEWzxBNDQzRkEyNkVCQzM3RTRDODczOUFEQkYxNUEyRTZDRj48QTQ0M0ZB +MjZFQkMzN0U0Qzg3MzlBREJGMTVBMkU2Q0Y+XSAvUHJldiAxNTA3NjcvWFJlZlN0bSAxNTA0NjM+ +Pg0Kc3RhcnR4cmVmDQoxNTE0NjUNCiUlRU9G diff --git a/client-transport/src/test/resources/extractor/EarestFail3.xml b/client-transport/src/test/resources/extractor/EarestFail3.xml index c95b1c0b..b0c01cf9 100644 --- a/client-transport/src/test/resources/extractor/EarestFail3.xml +++ b/client-transport/src/test/resources/extractor/EarestFail3.xml @@ -1,50 +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 - - - - - - - - - + + + 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/EarestFail5.xml b/client-transport/src/test/resources/extractor/EarestFail5.xml index 2c649b54..c338065c 100644 --- a/client-transport/src/test/resources/extractor/EarestFail5.xml +++ b/client-transport/src/test/resources/extractor/EarestFail5.xml @@ -33,11 +33,11 @@ jyritamm JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu - ZyhldC1FRSkgL1N0cnVjdFRyZWVSb290IDE1IDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+ - CjE1MDc2Nw0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyNy9Sb290IDEgMCBS - L0luZm8gMTQgMCBSL0lEWzxBNDQzRkEyNkVCQzM3RTRDODczOUFEQkYxNUEyRTZDRj48QTQ0M0ZB - MjZFQkMzN0U0Qzg3MzlBREJGMTVBMkU2Q0Y+XSAvUHJldiAxNTA3NjcvWFJlZlN0bSAxNTA0NjM+ - Pg0Kc3RhcnR4cmVmDQoxNTE0NjUNCiUlRU9G +ZyhldC1FRSkgL1N0cnVjdFRyZWVSb290IDE1IDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+ +CjE1MDc2Nw0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyNy9Sb290IDEgMCBS +L0luZm8gMTQgMCBSL0lEWzxBNDQzRkEyNkVCQzM3RTRDODczOUFEQkYxNUEyRTZDRj48QTQ0M0ZB +MjZFQkMzN0U0Qzg3MzlBREJGMTVBMkU2Q0Y+XSAvUHJldiAxNTA3NjcvWFJlZlN0bSAxNTA0NjM+ +Pg0Kc3RhcnR4cmVmDQoxNTE0NjUNCiUlRU9G 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