diff --git a/server/src/main/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidator.java b/server/src/main/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidator.java
index 165366b5d3..1e56533ed3 100644
--- a/server/src/main/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidator.java
+++ b/server/src/main/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidator.java
@@ -82,6 +82,8 @@ public Response validate(Response response, ConnectorMessage connectorMessage) {
} else {
response.setStatus(Status.SENT);
}
+ } else {
+ handleInvalidACK(response);
}
} else {
// ER7 response received
@@ -175,9 +177,7 @@ public Response validate(Response response, ConnectorMessage connectorMessage) {
}
if (!valid) {
- response.setStatus(Status.QUEUED);
- response.setStatusMessage("Invalid HL7 v2.x acknowledgement received.");
- response.setError(response.getStatusMessage());
+ handleInvalidACK(response);
}
}
} catch (Exception e) {
@@ -300,6 +300,12 @@ private void handleNACK(Response response, boolean rejected, String msa3, String
response.setError(nackMessage.toString());
}
+ private void handleInvalidACK(Response response) {
+ response.setStatus(Status.QUEUED);
+ response.setStatusMessage("Invalid HL7 v2.x acknowledgement received.");
+ response.setError(response.getStatusMessage());
+ }
+
private void handleInvalidControlId(Response response, String originalControlID, String msa2) {
response.setStatus(Status.ERROR);
diff --git a/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidatorTest.java b/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidatorTest.java
index abdacf9740..ef576bd427 100644
--- a/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidatorTest.java
+++ b/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidatorTest.java
@@ -236,13 +236,20 @@ public void testXmlErrorAndRejectedAcks() {
assertEquals("NACK sent from receiver. (Rejected)", validate("CR").getStatusMessage());
}
- /*
- * Characterizes existing behaviour: an unknown ACK code in an ER7 response is QUEUED as invalid
- * (see testUnknownAckCodeIsInvalid), but in an XML response the status is left as it was.
- */
@Test
- public void testXmlUnknownAckCodeLeavesStatusUnchanged() {
- assertEquals(Status.SENT, validate("XX").getStatus());
+ public void testXmlUnknownAckCodeIsInvalid() {
+ Response response = validate("XX");
+
+ assertEquals(Status.QUEUED, response.getStatus());
+ assertEquals("Invalid HL7 v2.x acknowledgement received.", response.getStatusMessage());
+ }
+
+ @Test
+ public void testXmlMissingMsaIsInvalid() {
+ Response response = validate("ACK");
+
+ assertEquals(Status.QUEUED, response.getStatus());
+ assertEquals("Invalid HL7 v2.x acknowledgement received.", response.getStatusMessage());
}
@Test