diff --git a/nifi-nar-bundles/nifi-ccda-bundle/nifi-ccda-processors/pom.xml b/nifi-nar-bundles/nifi-ccda-bundle/nifi-ccda-processors/pom.xml index 09aa3ef074..a69f811823 100644 --- a/nifi-nar-bundles/nifi-ccda-bundle/nifi-ccda-processors/pom.xml +++ b/nifi-nar-bundles/nifi-ccda-bundle/nifi-ccda-processors/pom.xml @@ -35,6 +35,11 @@ nifi-utils 1.20.0-SNAPSHOT + + org.apache.nifi + nifi-xml-processing + 1.20.0-SNAPSHOT + org.apache.commons commons-lang3 diff --git a/nifi-nar-bundles/nifi-ccda-bundle/nifi-ccda-processors/src/main/java/org/apache/nifi/processors/ccda/ExtractCCDAAttributes.java b/nifi-nar-bundles/nifi-ccda-bundle/nifi-ccda-processors/src/main/java/org/apache/nifi/processors/ccda/ExtractCCDAAttributes.java index 24e339e5ad..ac52406bbd 100644 --- a/nifi-nar-bundles/nifi-ccda-bundle/nifi-ccda-processors/src/main/java/org/apache/nifi/processors/ccda/ExtractCCDAAttributes.java +++ b/nifi-nar-bundles/nifi-ccda-bundle/nifi-ccda-processors/src/main/java/org/apache/nifi/processors/ccda/ExtractCCDAAttributes.java @@ -41,6 +41,7 @@ import org.apache.nifi.annotation.behavior.InputRequirement.Requirement; import org.apache.nifi.annotation.behavior.SideEffectFree; import org.apache.nifi.annotation.behavior.SupportsBatching; import org.apache.nifi.annotation.documentation.CapabilityDescription; +import org.apache.nifi.annotation.documentation.DeprecationNotice; import org.apache.nifi.annotation.documentation.Tags; import org.apache.nifi.annotation.lifecycle.OnScheduled; import org.apache.nifi.components.PropertyDescriptor; @@ -53,6 +54,7 @@ import org.apache.nifi.processor.Relationship; import org.apache.nifi.processor.exception.ProcessException; import org.apache.nifi.processor.util.StandardValidators; import org.apache.nifi.util.StopWatch; +import org.apache.nifi.xml.processing.parsers.StandardDocumentProvider; import org.eclipse.emf.common.util.Diagnostic; import org.openhealthtools.mdht.uml.cda.CDAPackage; import org.openhealthtools.mdht.uml.cda.ClinicalDocument; @@ -62,7 +64,9 @@ import org.openhealthtools.mdht.uml.cda.hitsp.HITSPPackage; import org.openhealthtools.mdht.uml.cda.ihe.IHEPackage; import org.openhealthtools.mdht.uml.cda.util.CDAUtil; import org.openhealthtools.mdht.uml.cda.util.CDAUtil.ValidationHandler; +import org.w3c.dom.Document; +@DeprecationNotice(reason = "Parsing XML elements to FlowFile attributes is not recommend and should be replaced with record-oriented handling") @SideEffectFree @SupportsBatching @InputRequirement(Requirement.INPUT_REQUIRED) @@ -284,7 +288,11 @@ public class ExtractCCDAAttributes extends AbstractProcessor { ClinicalDocument cd = null; try { - cd = CDAUtil.load(inputStream); // load CDA document + final StandardDocumentProvider documentProvider = new StandardDocumentProvider(); + documentProvider.setNamespaceAware(true); + final Document document = documentProvider.parse(inputStream); + + cd = CDAUtil.load(document); // load CDA document if (!skipValidation && !CDAUtil.validate(cd, new CDAValidationHandler())) { //optional validation getLogger().error("Failed to validate CDA document"); throw new ProcessException("Failed to validate CDA document"); diff --git a/nifi-nar-bundles/nifi-ccda-bundle/nifi-ccda-processors/src/test/java/org/apache/nifi/processors/ccda/TestExtractCCDAAttributes.java b/nifi-nar-bundles/nifi-ccda-bundle/nifi-ccda-processors/src/test/java/org/apache/nifi/processors/ccda/TestExtractCCDAAttributes.java index 68e0fca20f..27620a6cdc 100644 --- a/nifi-nar-bundles/nifi-ccda-bundle/nifi-ccda-processors/src/test/java/org/apache/nifi/processors/ccda/TestExtractCCDAAttributes.java +++ b/nifi-nar-bundles/nifi-ccda-bundle/nifi-ccda-processors/src/test/java/org/apache/nifi/processors/ccda/TestExtractCCDAAttributes.java @@ -19,7 +19,6 @@ package org.apache.nifi.processors.ccda; 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 org.openhealthtools.mdht.uml.cda.consol.ConsolFactory; @@ -33,20 +32,17 @@ import org.openhealthtools.mdht.uml.cda.consol.VitalSignsOrganizer; import org.openhealthtools.mdht.uml.cda.consol.VitalSignsSection; import org.openhealthtools.mdht.uml.cda.util.CDAUtil; -import java.io.IOException; import java.io.StringWriter; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; - public class TestExtractCCDAAttributes { - private TestRunner runner; + private static final String INVALID_DOCTYPE = " %entity;]>"; - @BeforeAll - public static void setup() { - System.setProperty("org.slf4j.simpleLogger.log.org.apache.nifi", "INFO"); - } + private static final String INVALID_DOCUMENT = String.format("%s", INVALID_DOCTYPE); + + private TestRunner runner; @BeforeEach public void init() { @@ -55,7 +51,7 @@ public class TestExtractCCDAAttributes { @Test public void testProcessor() throws Exception { - Map expectedAttributes = new HashMap(); + Map expectedAttributes = new LinkedHashMap<>(); expectedAttributes.put("code.code", "34133-9"); expectedAttributes.put("code.codeSystem", "2.16.840.1.113883.6.1"); expectedAttributes.put("code.codeSystemName", "LOINC"); @@ -110,11 +106,21 @@ public class TestExtractCCDAAttributes { StringWriter writer = new StringWriter(); CDAUtil.save(doc, writer); - runTests(writer.toString(), expectedAttributes, true, true); + runTests(writer.toString(), expectedAttributes); } - private void runTests(final String content, Map expectedAttributes, final boolean skipValidation, final boolean prettyPrinting) throws IOException{ - runner.setProperty(ExtractCCDAAttributes.SKIP_VALIDATION, String.valueOf(skipValidation)); + @Test + public void testRunInvalidDocument() { + runner.enqueue(INVALID_DOCUMENT); + + runner.run(); + + runner.assertAllFlowFilesTransferred(ExtractCCDAAttributes.REL_FAILURE); + } + + + private void runTests(final String content, final Map expectedAttributes) { + runner.setProperty(ExtractCCDAAttributes.SKIP_VALIDATION, Boolean.TRUE.toString()); runner.enqueue(content);