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);