This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new f41f6fea4f NIFI-13850 Simplified TextXMLReader using Current Language
and Library Practices (#9361)
f41f6fea4f is described below
commit f41f6fea4f217c70719a9c1a10ddd12cb2e42e9e
Author: dan-s1 <[email protected]>
AuthorDate: Wed Oct 9 14:06:05 2024 -0400
NIFI-13850 Simplified TextXMLReader using Current Language and Library
Practices (#9361)
Signed-off-by: David Handermann <[email protected]>
---
.../java/org/apache/nifi/xml/TestXMLReader.java | 300 ++++++++++-----------
1 file changed, 144 insertions(+), 156 deletions(-)
diff --git
a/nifi-extension-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/xml/TestXMLReader.java
b/nifi-extension-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/xml/TestXMLReader.java
index 9f2120fa5f..8b3037ba3e 100644
---
a/nifi-extension-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/xml/TestXMLReader.java
+++
b/nifi-extension-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/xml/TestXMLReader.java
@@ -18,18 +18,17 @@
package org.apache.nifi.xml;
import org.apache.nifi.components.PropertyDescriptor;
-import org.apache.nifi.reporting.InitializationException;
import org.apache.nifi.schema.access.SchemaAccessUtils;
import org.apache.nifi.schema.inference.SchemaInferenceUtil;
import org.apache.nifi.util.MockFlowFile;
import org.apache.nifi.util.TestRunner;
import org.apache.nifi.util.TestRunners;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Collections;
@@ -39,119 +38,106 @@ import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
-public class TestXMLReader {
+class TestXMLReader {
- private final String ATTRIBUTE_PREFIX = "attribute_prefix";
- private final String CONTENT_NAME = "content_field";
- private final String EVALUATE_IS_ARRAY = "xml.stream.is.array";
+ private static final String CONTENT_NAME = "content_field";
+ private static final String EVALUATE_IS_ARRAY = "xml.stream.is.array";
+ private static String testSchemaText;
+ private static Path personRecord;
+ private static Path fieldWithSubElement;
+ private static Path people;
- private TestRunner setup(Map<PropertyDescriptor, String>
xmlReaderProperties) throws InitializationException {
- return setup(xmlReaderProperties, null);
+ private TestRunner runner;
+ private XMLReader reader;
+
+ @BeforeAll
+ static void setUpBeforeAll() throws Exception {
+ testSchemaText = getSchemaText("src/test/resources/xml/testschema");
+ personRecord = Paths.get("src/test/resources/xml/person_record.xml");
+ fieldWithSubElement =
Paths.get("src/test/resources/xml/field_with_sub-element.xml");
+ people = Paths.get("src/test/resources/xml/people.xml");
}
- private TestRunner setup(Map<PropertyDescriptor, String>
xmlReaderProperties, String recordFieldNameToGetAsString) throws
InitializationException {
- TestRunner runner =
TestRunners.newTestRunner(TestXMLReaderProcessor.class);
- XMLReader reader = new XMLReader();
+ @BeforeEach
+ void setUp() throws Exception {
+ runner = TestRunners.newTestRunner(TestXMLReaderProcessor.class);
+ reader = new XMLReader();
runner.addControllerService("xml_reader", reader);
runner.setProperty(TestXMLReaderProcessor.XML_READER, "xml_reader");
- if (recordFieldNameToGetAsString != null) {
-
runner.setProperty(TestXMLReaderProcessor.RECORD_FIELD_TO_GET_AS_STRING,
recordFieldNameToGetAsString);
- }
-
- for (Map.Entry<PropertyDescriptor, String> entry :
xmlReaderProperties.entrySet()) {
- runner.setProperty(reader, entry.getKey(), entry.getValue());
- }
-
- runner.enableControllerService(reader);
- return runner;
}
@Test
- public void testRecordFormatDeterminedBasedOnAttribute() throws
IOException, InitializationException {
- String outputSchemaPath = "src/test/resources/xml/testschema";
- String outputSchemaText = new
String(Files.readAllBytes(Paths.get(outputSchemaPath)));
-
- Map<PropertyDescriptor, String> xmlReaderProperties = new HashMap<>();
+ void testRecordFormatDeterminedBasedOnAttribute() throws Exception {
+ final Map<PropertyDescriptor, String> xmlReaderProperties = new
HashMap<>();
xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_ACCESS_STRATEGY,
SchemaAccessUtils.SCHEMA_TEXT_PROPERTY.getValue());
- xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_TEXT,
outputSchemaText);
+ xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_TEXT, testSchemaText);
xmlReaderProperties.put(XMLReader.RECORD_FORMAT,
XMLReader.RECORD_EVALUATE.getValue());
- TestRunner runner = setup(xmlReaderProperties);
+ configureAndEnableXmlReader(xmlReaderProperties);
- try (InputStream is = new
FileInputStream("src/test/resources/xml/people.xml")) {
- runner.enqueue(is, Collections.singletonMap(EVALUATE_IS_ARRAY,
"true"));
- runner.run();
- }
+ runner.enqueue(people, Collections.singletonMap(EVALUATE_IS_ARRAY,
"true"));
+ runner.run();
- List<MockFlowFile> flowFile =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS);
- List<String> records = Arrays.asList((new
String(runner.getContentAsByteArray(flowFile.get(0)))).split("\n"));
+ runner.assertTransferCount(TestXMLReaderProcessor.SUCCESS, 1);
+ final MockFlowFile flowFile =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).getFirst();
+ final List<String> records = getRecords(flowFile);
assertEquals(4, records.size());
}
@Test
- public void testRecordFormatArray() throws IOException,
InitializationException {
- String outputSchemaPath = "src/test/resources/xml/testschema";
- String outputSchemaText = new
String(Files.readAllBytes(Paths.get(outputSchemaPath)));
-
- Map<PropertyDescriptor, String> xmlReaderProperties = new HashMap<>();
+ void testRecordFormatArray() throws Exception {
+ final Map<PropertyDescriptor, String> xmlReaderProperties = new
HashMap<>();
xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_ACCESS_STRATEGY,
SchemaAccessUtils.SCHEMA_TEXT_PROPERTY.getValue());
- xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_TEXT,
outputSchemaText);
+ xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_TEXT, testSchemaText);
xmlReaderProperties.put(XMLReader.RECORD_FORMAT,
XMLReader.RECORD_ARRAY.getValue());
- TestRunner runner = setup(xmlReaderProperties);
+ configureAndEnableXmlReader(xmlReaderProperties);
- try (InputStream is = new
FileInputStream("src/test/resources/xml/people.xml")) {
- runner.enqueue(is, Collections.singletonMap(EVALUATE_IS_ARRAY,
"true"));
- runner.run();
- }
+ runner.enqueue(people, Collections.singletonMap(EVALUATE_IS_ARRAY,
"true"));
+ runner.run();
- List<MockFlowFile> flowFile =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS);
- List<String> records = Arrays.asList((new
String(runner.getContentAsByteArray(flowFile.get(0)))).split("\n"));
+ runner.assertTransferCount(TestXMLReaderProcessor.SUCCESS, 1);
+ final MockFlowFile flowFile =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).getFirst();
+ final List<String> records = getRecords(flowFile);
assertEquals(4, records.size());
}
@Test
- public void testRecordFormatNotArray() throws IOException,
InitializationException {
- String outputSchemaPath = "src/test/resources/xml/testschema";
- String outputSchemaText = new
String(Files.readAllBytes(Paths.get(outputSchemaPath)));
-
- Map<PropertyDescriptor, String> xmlReaderProperties = new HashMap<>();
+ void testRecordFormatNotArray() throws Exception {
+ final Map<PropertyDescriptor, String> xmlReaderProperties = new
HashMap<>();
xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_ACCESS_STRATEGY,
SchemaAccessUtils.SCHEMA_TEXT_PROPERTY.getValue());
- xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_TEXT,
outputSchemaText);
+ xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_TEXT, testSchemaText);
xmlReaderProperties.put(XMLReader.RECORD_FORMAT,
XMLReader.RECORD_SINGLE.getValue());
- TestRunner runner = setup(xmlReaderProperties);
+ configureAndEnableXmlReader(xmlReaderProperties);
- try (InputStream is = new
FileInputStream("src/test/resources/xml/person.xml")) {
- runner.enqueue(is, Collections.singletonMap(EVALUATE_IS_ARRAY,
"true"));
- runner.run();
- }
+ final Path data = Paths.get("src/test/resources/xml/person.xml");
+ runner.enqueue(data, Collections.singletonMap(EVALUATE_IS_ARRAY,
"true"));
+ runner.run();
- List<MockFlowFile> flowFile =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS);
- List<String> records = Arrays.asList(new
String(runner.getContentAsByteArray(flowFile.get(0))).split("\n"));
+ runner.assertTransferCount(TestXMLReaderProcessor.SUCCESS, 1);
+ final MockFlowFile flowFile =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).getFirst();
+ final List<String> records = getRecords(flowFile);
assertEquals(1, records.size());
}
@Test
- public void testAttributePrefix() throws IOException,
InitializationException {
- String outputSchemaPath = "src/test/resources/xml/testschema";
- String outputSchemaText = new
String(Files.readAllBytes(Paths.get(outputSchemaPath)));
-
- Map<PropertyDescriptor, String> xmlReaderProperties = new HashMap<>();
+ void testAttributePrefix() throws Exception {
+ final Map<PropertyDescriptor, String> xmlReaderProperties = new
HashMap<>();
xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_ACCESS_STRATEGY,
SchemaAccessUtils.SCHEMA_TEXT_PROPERTY.getValue());
- xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_TEXT,
outputSchemaText);
- xmlReaderProperties.put(XMLReader.ATTRIBUTE_PREFIX, "${" +
ATTRIBUTE_PREFIX + "}");
+ xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_TEXT, testSchemaText);
+ final String attributePrefix = "attribute_prefix";
+ xmlReaderProperties.put(XMLReader.ATTRIBUTE_PREFIX, "${" +
attributePrefix + "}");
xmlReaderProperties.put(XMLReader.RECORD_FORMAT,
XMLReader.RECORD_ARRAY.getValue());
- TestRunner runner = setup(xmlReaderProperties);
+ configureAndEnableXmlReader(xmlReaderProperties);
- try (InputStream is = new
FileInputStream("src/test/resources/xml/people.xml")) {
- runner.enqueue(is, Collections.singletonMap(ATTRIBUTE_PREFIX,
"ATTR_"));
- runner.run();
- }
+ runner.enqueue(people, Collections.singletonMap(attributePrefix,
"ATTR_"));
+ runner.run();
- List<MockFlowFile> flowFile =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS);
- List<String> records = Arrays.asList(new
String(runner.getContentAsByteArray(flowFile.get(0))).split("\n"));
+ runner.assertTransferCount(TestXMLReaderProcessor.SUCCESS, 1);
+ final MockFlowFile flowFile =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).getFirst();
+ final List<String> records = getRecords(flowFile);
assertEquals(4, records.size());
assertEquals("MapRecord[{ATTR_ID=P1, NAME=Cleve Butler, AGE=42,
COUNTRY=USA}]", records.get(0));
@@ -161,24 +147,22 @@ public class TestXMLReader {
}
@Test
- public void testContentField() throws IOException, InitializationException
{
- String outputSchemaPath = "src/test/resources/xml/testschema2";
- String outputSchemaText = new
String(Files.readAllBytes(Paths.get(outputSchemaPath)));
-
- Map<PropertyDescriptor, String> xmlReaderProperties = new HashMap<>();
+ void testContentField() throws Exception {
+ final String outputSchemaText =
getSchemaText("src/test/resources/xml/testschema2");
+ final Map<PropertyDescriptor, String> xmlReaderProperties = new
HashMap<>();
xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_ACCESS_STRATEGY,
SchemaAccessUtils.SCHEMA_TEXT_PROPERTY.getValue());
xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_TEXT,
outputSchemaText);
xmlReaderProperties.put(XMLReader.CONTENT_FIELD_NAME, "${" +
CONTENT_NAME + "}");
xmlReaderProperties.put(XMLReader.RECORD_FORMAT,
XMLReader.RECORD_ARRAY.getValue());
- TestRunner runner = setup(xmlReaderProperties);
+ configureAndEnableXmlReader(xmlReaderProperties);
- try (InputStream is = new
FileInputStream("src/test/resources/xml/people_tag_in_characters.xml")) {
- runner.enqueue(is, Collections.singletonMap(CONTENT_NAME,
"CONTENT"));
- runner.run();
- }
+ final Path data =
Paths.get("src/test/resources/xml/people_tag_in_characters.xml");
+ runner.enqueue(data, Collections.singletonMap(CONTENT_NAME,
"CONTENT"));
+ runner.run();
- List<MockFlowFile> flowFile =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS);
- List<String> records = Arrays.asList(new
String(runner.getContentAsByteArray(flowFile.get(0))).split("\n"));
+ runner.assertTransferCount(TestXMLReaderProcessor.SUCCESS, 1);
+ final MockFlowFile flowFile =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).getFirst();
+ final List<String> records = getRecords(flowFile);
assertEquals(5, records.size());
assertEquals("MapRecord[{ID=P1, NAME=MapRecord[{ATTR=attr content,
INNER=inner content, CONTENT=Cleve Butler}], AGE=42}]", records.get(0));
@@ -189,120 +173,108 @@ public class TestXMLReader {
}
@Test
- public void testInferSchema() throws InitializationException, IOException {
- String expectedContent = "MapRecord[{num=123, name=John Doe,
software=MapRecord[{favorite=true, " + CONTENT_NAME + "=Apache NiFi}]}]";
-
- Map<PropertyDescriptor, String> xmlReaderProperties = new HashMap<>();
+ void testInferSchema() throws Exception {
+ final String expectedContent = "MapRecord[{num=123, name=John Doe,
software=MapRecord[{favorite=true, " + CONTENT_NAME + "=Apache NiFi}]}]";
+ final Map<PropertyDescriptor, String> xmlReaderProperties = new
HashMap<>();
xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_ACCESS_STRATEGY,
SchemaInferenceUtil.INFER_SCHEMA.getValue());
xmlReaderProperties.put(XMLReader.RECORD_FORMAT,
XMLReader.RECORD_SINGLE.getValue());
xmlReaderProperties.put(XMLReader.CONTENT_FIELD_NAME, CONTENT_NAME);
- TestRunner runner = setup(xmlReaderProperties);
+ configureAndEnableXmlReader(xmlReaderProperties);
- try (InputStream is = new
FileInputStream("src/test/resources/xml/person_record.xml")) {
- runner.enqueue(is);
- runner.run();
- }
+ runner.enqueue(personRecord);
+ runner.run();
- MockFlowFile out =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).get(0);
- String actualContent = out.getContent();
+ runner.assertTransferCount(TestXMLReaderProcessor.SUCCESS, 1);
+ final MockFlowFile out =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).getFirst();
+ final String actualContent = out.getContent();
assertEquals(expectedContent, actualContent);
}
@Test
- public void testInferSchemaContentFieldNameNotSet() throws
InitializationException, IOException {
- String expectedContent = "MapRecord[{num=123, name=John Doe,
software=MapRecord[{favorite=true}]}]";
-
- Map<PropertyDescriptor, String> xmlReaderProperties = new HashMap<>();
+ void testInferSchemaContentFieldNameNotSet() throws Exception {
+ final String expectedContent = "MapRecord[{num=123, name=John Doe,
software=MapRecord[{favorite=true}]}]";
+ final Map<PropertyDescriptor, String> xmlReaderProperties = new
HashMap<>();
xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_ACCESS_STRATEGY,
SchemaInferenceUtil.INFER_SCHEMA.getValue());
xmlReaderProperties.put(XMLReader.RECORD_FORMAT,
XMLReader.RECORD_SINGLE.getValue());
- TestRunner runner = setup(xmlReaderProperties);
+ configureAndEnableXmlReader(xmlReaderProperties);
- try (InputStream is = new
FileInputStream("src/test/resources/xml/person_record.xml")) {
- runner.enqueue(is);
- runner.run();
- }
+ runner.enqueue(personRecord);
+ runner.run();
- MockFlowFile out =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).get(0);
- String actualContent = out.getContent();
+ runner.assertTransferCount(TestXMLReaderProcessor.SUCCESS, 1);
+ final MockFlowFile out =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).getFirst();
+ final String actualContent = out.getContent();
assertEquals(expectedContent, actualContent);
}
@Test
- public void testInferSchemaContentFieldNameNotSetSubElementExists() throws
InitializationException, IOException {
- String expectedContent =
"MapRecord[{field_with_attribute=MapRecord[{attr=attr_content, value=123}]}]";
-
- Map<PropertyDescriptor, String> xmlReaderProperties = new HashMap<>();
+ void testInferSchemaContentFieldNameNotSetSubElementExists() throws
Exception {
+ final String expectedContent =
"MapRecord[{field_with_attribute=MapRecord[{attr=attr_content, value=123}]}]";
+ final Map<PropertyDescriptor, String> xmlReaderProperties = new
HashMap<>();
xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_ACCESS_STRATEGY,
SchemaInferenceUtil.INFER_SCHEMA.getValue());
xmlReaderProperties.put(XMLReader.RECORD_FORMAT,
XMLReader.RECORD_SINGLE.getValue());
- TestRunner runner = setup(xmlReaderProperties);
+ configureAndEnableXmlReader(xmlReaderProperties);
- try (InputStream is = new
FileInputStream("src/test/resources/xml/field_with_sub-element.xml")) {
- runner.enqueue(is);
- runner.run();
- }
+ runner.enqueue(fieldWithSubElement);
+ runner.run();
- MockFlowFile out =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).get(0);
- String actualContent = out.getContent();
+ runner.assertTransferCount(TestXMLReaderProcessor.SUCCESS, 1);
+ final MockFlowFile out =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).getFirst();
+ final String actualContent = out.getContent();
assertEquals(expectedContent, actualContent);
}
@Test
- public void testInferSchemaContentFieldNameSetSubElementExistsNameClash()
throws InitializationException, IOException {
- String expectedContent =
"MapRecord[{field_with_attribute=MapRecord[{attr=attr_content, value=content of
field}]}]";
-
- Map<PropertyDescriptor, String> xmlReaderProperties = new HashMap<>();
+ void testInferSchemaContentFieldNameSetSubElementExistsNameClash() throws
Exception {
+ final String expectedContent =
"MapRecord[{field_with_attribute=MapRecord[{attr=attr_content, value=content of
field}]}]";
+ final Map<PropertyDescriptor, String> xmlReaderProperties = new
HashMap<>();
xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_ACCESS_STRATEGY,
SchemaInferenceUtil.INFER_SCHEMA.getValue());
xmlReaderProperties.put(XMLReader.RECORD_FORMAT,
XMLReader.RECORD_SINGLE.getValue());
xmlReaderProperties.put(XMLReader.CONTENT_FIELD_NAME, "value");
- TestRunner runner = setup(xmlReaderProperties);
+ configureAndEnableXmlReader(xmlReaderProperties);
- try (InputStream is = new
FileInputStream("src/test/resources/xml/field_with_sub-element.xml")) {
- runner.enqueue(is);
- runner.run();
- }
+ runner.enqueue(fieldWithSubElement);
+ runner.run();
- MockFlowFile out =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).get(0);
- String actualContent = out.getContent();
+ runner.assertTransferCount(TestXMLReaderProcessor.SUCCESS, 1);
+ final MockFlowFile out =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).getFirst();
+ final String actualContent = out.getContent();
assertEquals(expectedContent, actualContent);
}
@Test
- public void
testInferSchemaContentFieldNameSetSubElementExistsNoNameClash() throws
InitializationException, IOException {
- String expectedContent =
"MapRecord[{field_with_attribute=MapRecord[{attr=attr_content, value=123, " +
CONTENT_NAME + "=content of field" +
- "}]}]";
-
- Map<PropertyDescriptor, String> xmlReaderProperties = new HashMap<>();
+ void testInferSchemaContentFieldNameSetSubElementExistsNoNameClash()
throws Exception {
+ final String expectedContent =
String.format("MapRecord[{field_with_attribute=MapRecord[{attr=attr_content,
value=123, %s=content of field}]}]", CONTENT_NAME);
+ final Map<PropertyDescriptor, String> xmlReaderProperties = new
HashMap<>();
xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_ACCESS_STRATEGY,
SchemaInferenceUtil.INFER_SCHEMA.getValue());
xmlReaderProperties.put(XMLReader.RECORD_FORMAT,
XMLReader.RECORD_SINGLE.getValue());
xmlReaderProperties.put(XMLReader.CONTENT_FIELD_NAME, CONTENT_NAME);
- TestRunner runner = setup(xmlReaderProperties);
+ configureAndEnableXmlReader(xmlReaderProperties);
- try (InputStream is = new
FileInputStream("src/test/resources/xml/field_with_sub-element.xml")) {
- runner.enqueue(is);
- runner.run();
- }
+ runner.enqueue(fieldWithSubElement);
+ runner.run();
- MockFlowFile out =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).get(0);
- String actualContent = out.getContent();
+ runner.assertTransferCount(TestXMLReaderProcessor.SUCCESS, 1);
+ final MockFlowFile out =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).getFirst();
+ final String actualContent = out.getContent();
assertEquals(expectedContent, actualContent);
}
@Test
- public void testInferSchemaIgnoreAttributes() throws
InitializationException, IOException {
- String expectedContent = "MapRecord[{num=123, name=John Doe,
software=Apache NiFi}]";
-
- Map<PropertyDescriptor, String> xmlReaderProperties = new HashMap<>();
+ void testInferSchemaIgnoreAttributes() throws Exception {
+ final String expectedContent = "MapRecord[{num=123, name=John Doe,
software=Apache NiFi}]";
+ final Map<PropertyDescriptor, String> xmlReaderProperties = new
HashMap<>();
xmlReaderProperties.put(SchemaAccessUtils.SCHEMA_ACCESS_STRATEGY,
SchemaInferenceUtil.INFER_SCHEMA.getValue());
xmlReaderProperties.put(XMLReader.RECORD_FORMAT,
XMLReader.RECORD_SINGLE.getValue());
xmlReaderProperties.put(XMLReader.PARSE_XML_ATTRIBUTES, "false");
- TestRunner runner = setup(xmlReaderProperties);
+ configureAndEnableXmlReader(xmlReaderProperties);
- InputStream is = new
FileInputStream("src/test/resources/xml/person_record.xml");
- runner.enqueue(is);
+ runner.enqueue(personRecord);
runner.run();
- MockFlowFile out =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).get(0);
- String actualContent = out.getContent();
+ runner.assertTransferCount(TestXMLReaderProcessor.SUCCESS, 1);
+ final MockFlowFile out =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).getFirst();
+ final String actualContent = out.getContent();
assertEquals(expectedContent, actualContent);
}
@@ -313,10 +285,11 @@ public class TestXMLReader {
xmlReaderProperties.put(XMLReader.RECORD_FORMAT,
XMLReader.RECORD_SINGLE.getValue());
xmlReaderProperties.put(XMLReader.PARSE_XML_ATTRIBUTES, "true");
xmlReaderProperties.put(XMLReader.CONTENT_FIELD_NAME, "Value");
- TestRunner runner = setup(xmlReaderProperties, "Data");
+ configureAndEnableXmlReader(xmlReaderProperties);
+
runner.setProperty(TestXMLReaderProcessor.RECORD_FIELD_TO_GET_AS_STRING,
"Data");
- final InputStream is = new
FileInputStream("src/test/resources/xml/dataWithArrayOfDifferentTypes.xml");
- runner.enqueue(is);
+ final Path data =
Paths.get("src/test/resources/xml/dataWithArrayOfDifferentTypes.xml");
+ runner.enqueue(data);
runner.run();
final MockFlowFile out =
runner.getFlowFilesForRelationship(TestXMLReaderProcessor.SUCCESS).getFirst();
@@ -324,4 +297,19 @@ public class TestXMLReader {
final String actualContent = out.getContent();
assertEquals(expectedContent, actualContent);
}
+
+ private void configureAndEnableXmlReader(Map<PropertyDescriptor, String>
xmlReaderProperties) {
+ for (Map.Entry<PropertyDescriptor, String> entry :
xmlReaderProperties.entrySet()) {
+ runner.setProperty(reader, entry.getKey(), entry.getValue());
+ }
+ runner.enableControllerService(reader);
+ }
+
+ private List<String> getRecords(MockFlowFile flowFile) {
+ return Arrays.asList(flowFile.getContent().split("\n"));
+ }
+
+ private static String getSchemaText(String schemaPath) throws Exception {
+ return Files.readString(Paths.get(schemaPath));
+ }
}