diff --git a/src/main/java/gov/cdc/izgateway/logging/event/TransactionData.java b/src/main/java/gov/cdc/izgateway/logging/event/TransactionData.java index c7856af..cc001ee 100644 --- a/src/main/java/gov/cdc/izgateway/logging/event/TransactionData.java +++ b/src/main/java/gov/cdc/izgateway/logging/event/TransactionData.java @@ -18,6 +18,7 @@ import gov.cdc.izgateway.logging.markers.Markers2; import gov.cdc.izgateway.soap.fault.Fault; import gov.cdc.izgateway.soap.fault.FaultSupport; +import gov.cdc.izgateway.soap.fault.HubClientFault; import gov.cdc.izgateway.soap.fault.UnexpectedExceptionFault; import gov.cdc.izgateway.soap.fault.UnsupportedOperationFault; import gov.cdc.izgateway.logging.info.SourceInfo; @@ -665,6 +666,9 @@ public void setProcessError(Exception fault) { s = f; } else if (fault instanceof Fault f) { s = f; + if (f instanceof HubClientFault hcf && hcf.getOriginalBody() != null) { + this.setResponse(hcf.getOriginalBody()); + } } else { s = new UnexpectedExceptionFault(fault, null); } diff --git a/src/main/java/gov/cdc/izgateway/model/IDestination.java b/src/main/java/gov/cdc/izgateway/model/IDestination.java index 5442841..299d4c7 100644 --- a/src/main/java/gov/cdc/izgateway/model/IDestination.java +++ b/src/main/java/gov/cdc/izgateway/model/IDestination.java @@ -2,18 +2,36 @@ import java.util.Date; +import org.apache.commons.lang3.StringUtils; + import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonFormat.Shape; import gov.cdc.izgateway.common.Constants; import gov.cdc.izgateway.common.HasDestinationUri; +import io.swagger.v3.oas.annotations.media.Schema; public interface IDestination extends IEndpoint, HasDestinationUri { @SuppressWarnings("serial") static class Map extends MappableEntity {} static String ID_PATTERN = "^[-_\\p{Alnum}]+$"; + /** Version value for IIS endpoints using CDC Schema */ + public static final String IZGW_2011 = "2011"; + /** Version value for IIS endpoints using 2014 Schema (subset of HUB Schema w/o HubHeader) */ + public static final String IZGW_2014 = "2014"; + /** Version value for IIS endpoints using IZGW Hub Schema */ + public static final String IZGW_HUB = "HUB"; + /** Version value for ADS endpoints using DEX 1.0 Schema */ + public static final String IZGW_ADS_VERSION1 = "DEX1.0"; + /** Version value for ADS endpoints using DEX 2.0 Schema */ + public static final String IZGW_ADS_VERSION2 = "DEX2.0"; + /** Version value for ADS endpoints using NDLP 1.0 Schema (Azure with v1 Folder Structure) */ + public static final String IZGW_AZURE_VERSION1 = "V2022-12-31"; + /** Version value for ADS endpoints using NDLP 2.0 Schema (Azure with v2 Folder Structure) */ + public static final String IZGW_AZURE_VERSION2 = "V2022-12-31"; + String getFacilityId(); IDestinationId getId(); @@ -84,16 +102,38 @@ static class Map extends MappableEntity {} IDestination safeCopy(); - boolean is2011(); - - boolean is2014(); - - boolean isHub(); + @JsonIgnore + @Schema(description = "True if this destination supports the original CDC 2011 Protocol", hidden=true) + default boolean is2011() { + return IZGW_2011.equals(getDestVersion()); + } - boolean isDex(); + @JsonIgnore + @Schema(description = "True if this destination supports the IZ Gateway 2014 Protocol", hidden=true) + default boolean is2014() { + String destVersion = getDestVersion(); + return StringUtils.isEmpty(destVersion) || IZGW_2014.equals(destVersion); + } + + @JsonIgnore + @Schema(description = "True if this destination supports the IZ Gateway Hub Protocol", hidden=true) + default boolean isHub() { + return IZGW_HUB.equalsIgnoreCase(getDestVersion()); + } + + @JsonIgnore + @Schema(description = "True if this destination supports the CDC DEX Protocol", hidden=true) + default boolean isDex() { + String destVersion = getDestVersion(); + return IZGW_ADS_VERSION1.equals(destVersion) || IZGW_ADS_VERSION2.equals(destVersion); + } + + @JsonIgnore + @Schema(description = "True if this destination supports the Azure Blob Storage Protocol", hidden=true) + default boolean isAzure() { + return IZGW_AZURE_VERSION1.equals(getDestVersion()); + } - boolean isAzure(); - String getDestinationUri(); } \ No newline at end of file diff --git a/src/main/java/gov/cdc/izgateway/soap/fault/DestinationConnectionFault.java b/src/main/java/gov/cdc/izgateway/soap/fault/DestinationConnectionFault.java index 4cfc125..2eb6248 100644 --- a/src/main/java/gov/cdc/izgateway/soap/fault/DestinationConnectionFault.java +++ b/src/main/java/gov/cdc/izgateway/soap/fault/DestinationConnectionFault.java @@ -106,7 +106,7 @@ public class DestinationConnectionFault extends Fault implements HasDestinationU FAULT_NAME, "20", "Write Error", "Error writing message to the destination endpoint", - "There was an IO Error writing to the destination endpoint. This may indicate a problem with the networking infrastructure between" + "There was an IO Error writing to the destination endpoint. This may indicate a problem with the networking infrastructure between " + "IZ Gateway and the endpoint.", RetryStrategy.NORMAL ), @@ -114,7 +114,7 @@ public class DestinationConnectionFault extends Fault implements HasDestinationU FAULT_NAME, "21", "Read Error", "Error reading message from the destination endpoint", - "There was an IO Error reading from the destination endpoint. This may indicate a problem with the networking infrastructure between" + "There was an IO Error reading from the destination endpoint. This may indicate a problem with the networking infrastructure between " + "IZ Gateway and the endpoint.", RetryStrategy.NORMAL ), @@ -133,6 +133,14 @@ public class DestinationConnectionFault extends Fault implements HasDestinationU "There was an error establishing a trusted connection between IZ Gateway and the destination endpoint. The destination endpoint does not trust IZ Gateway. This can result from a problem with the destination's" + "acceptance of the IZ Gateway trust parameters including supported protocol versions, encryption suites or the destination certificate.", RetryStrategy.CONTACT_SUPPORT + ), + new MessageSupport( + FAULT_NAME, + "24", + "IO Error At Destination", "Error communicating from/to destination", + "There was an IO Error accessing the destination endpoint. This may indicate a problem with the networking infrastructure between " + + "IZ Gateway and the endpoint.", + RetryStrategy.NORMAL ) }; static { @@ -227,6 +235,9 @@ public static DestinationConnectionFault readError(IDestination routing, IOExcep } return new DestinationConnectionFault(11, routing, ex.getMessage(), ex); } + public static DestinationConnectionFault ioError(IDestination routing, IOException ex) { + return new DestinationConnectionFault(14, routing, ex.getMessage(), ex); + } public static DestinationConnectionFault tlsErrorAtDestination(IDestination routing, TlsFatalAlertReceived tlsErr, long elapsedTimeIIS) { return new DestinationConnectionFault(13, routing, tlsErr.getMessage(), tlsErr);