From df77506bf7eaffeb546779d8322a326bff4d45c5 Mon Sep 17 00:00:00 2001 From: dotasek Date: Mon, 16 Sep 2024 15:39:27 -0400 Subject: [PATCH] Add setting for UnknownCodeSystemsCauseErrors + fix tests --- .../jpa/dao/r4/FhirResourceDaoR4ValidateTest.java | 6 +++--- .../validation/validator/FhirInstanceValidator.java | 12 ++++++++++++ .../hapi/validation/validator/ValidatorWrapper.java | 8 ++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/hapi-fhir-jpaserver-test-r4/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4ValidateTest.java b/hapi-fhir-jpaserver-test-r4/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4ValidateTest.java index 3de4d680d9d..65eb5737e2b 100644 --- a/hapi-fhir-jpaserver-test-r4/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4ValidateTest.java +++ b/hapi-fhir-jpaserver-test-r4/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4ValidateTest.java @@ -228,7 +228,7 @@ public class FhirResourceDaoR4ValidateTest extends BaseJpaR4Test { encoded = encode(oo); ourLog.info(encoded); assertThat(oo.getIssue()).hasSize(1); - assertEquals("CodeSystem is unknown and can't be validated: http://cs for 'http://cs#code1' (error because this is a required binding)", oo.getIssueFirstRep().getDiagnostics()); + assertEquals("CodeSystem is unknown and can't be validated: http://cs for 'http://cs#code1'", oo.getIssueFirstRep().getDiagnostics()); assertEquals(OperationOutcome.IssueSeverity.WARNING, oo.getIssueFirstRep().getSeverity()); // Invalid code @@ -334,7 +334,7 @@ public class FhirResourceDaoR4ValidateTest extends BaseJpaR4Test { encoded = encode(oo); ourLog.info(encoded); assertThat(oo.getIssue()).hasSize(1); - assertEquals("CodeSystem is unknown and can't be validated: http://cs for 'http://cs#code1' (error because this is a required binding)", oo.getIssueFirstRep().getDiagnostics()); + assertEquals("CodeSystem is unknown and can't be validated: http://cs for 'http://cs#code1'", oo.getIssueFirstRep().getDiagnostics()); assertEquals(OperationOutcome.IssueSeverity.WARNING, oo.getIssueFirstRep().getSeverity()); // Invalid code @@ -343,7 +343,7 @@ public class FhirResourceDaoR4ValidateTest extends BaseJpaR4Test { encoded = encode(oo); ourLog.info(encoded); assertThat(oo.getIssue()).hasSize(1); - assertEquals("CodeSystem is unknown and can't be validated: http://cs for 'http://cs#code99' (error because this is a required binding)", oo.getIssue().get(0).getDiagnostics()); + assertEquals("CodeSystem is unknown and can't be validated: http://cs for 'http://cs#code99'", oo.getIssue().get(0).getDiagnostics()); assertEquals(OperationOutcome.IssueSeverity.WARNING, oo.getIssue().get(0).getSeverity()); } diff --git a/hapi-fhir-validation/src/main/java/org/hl7/fhir/common/hapi/validation/validator/FhirInstanceValidator.java b/hapi-fhir-validation/src/main/java/org/hl7/fhir/common/hapi/validation/validator/FhirInstanceValidator.java index 70af4473f18..ad5c78bc428 100644 --- a/hapi-fhir-validation/src/main/java/org/hl7/fhir/common/hapi/validation/validator/FhirInstanceValidator.java +++ b/hapi-fhir-validation/src/main/java/org/hl7/fhir/common/hapi/validation/validator/FhirInstanceValidator.java @@ -35,6 +35,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta private boolean noBindingMsgSuppressed = false; private volatile VersionSpecificWorkerContextWrapper myWrappedWorkerContext; private boolean errorForUnknownProfiles = true; + private boolean myUnknownSystemsCauseErrors = true; private boolean assumeValidRestReferences; private List myExtensionDomains = Collections.emptyList(); private IValidatorResourceFetcher validatorResourceFetcher; @@ -132,6 +133,14 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta myBestPracticeWarningLevel = theBestPracticeWarningLevel; } + public void setUnknownSystemsCauseErrors(boolean theUnknownSystemsCauseErrors) { + myUnknownSystemsCauseErrors = theUnknownSystemsCauseErrors; + } + + public boolean isUnknownSystemsCauseErrors() { + return myUnknownSystemsCauseErrors; + } + /** * Returns the {@link IValidationSupport validation support} in use by this validator. Default is an instance of * DefaultProfileValidationSupport if the no-arguments constructor for this object was used. @@ -229,6 +238,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta .setAnyExtensionsAllowed(isAnyExtensionsAllowed()) .setBestPracticeWarningLevel(getBestPracticeWarningLevel()) .setErrorForUnknownProfiles(isErrorForUnknownProfiles()) + .setUnknownSystemsCauseErrors(isUnknownSystemsCauseErrors()) .setExtensionDomains(getExtensionDomains()) .setValidationPolicyAdvisor(validatorPolicyAdvisor) .setNoTerminologyChecks(isNoTerminologyChecks()) @@ -239,6 +249,8 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta .validate(wrappedWorkerContext, theValidationCtx); } + + @Nonnull protected VersionSpecificWorkerContextWrapper provideWorkerContext() { VersionSpecificWorkerContextWrapper wrappedWorkerContext = myWrappedWorkerContext; diff --git a/hapi-fhir-validation/src/main/java/org/hl7/fhir/common/hapi/validation/validator/ValidatorWrapper.java b/hapi-fhir-validation/src/main/java/org/hl7/fhir/common/hapi/validation/validator/ValidatorWrapper.java index c5ed37b5519..ac17c300554 100644 --- a/hapi-fhir-validation/src/main/java/org/hl7/fhir/common/hapi/validation/validator/ValidatorWrapper.java +++ b/hapi-fhir-validation/src/main/java/org/hl7/fhir/common/hapi/validation/validator/ValidatorWrapper.java @@ -47,6 +47,7 @@ class ValidatorWrapper { private boolean myAssumeValidRestReferences; private boolean myNoExtensibleWarnings; private boolean myNoBindingMsgSuppressed; + private boolean myUnknownSystemsCauseErrors; private Collection myExtensionDomains; private IValidatorResourceFetcher myValidatorResourceFetcher; private IValidationPolicyAdvisor myValidationPolicyAdvisor; @@ -82,6 +83,11 @@ class ValidatorWrapper { return this; } + public ValidatorWrapper setUnknownSystemsCauseErrors(boolean theUnknownSystemsCauseErrors) { + myUnknownSystemsCauseErrors = theUnknownSystemsCauseErrors; + return this; + } + public ValidatorWrapper setNoTerminologyChecks(boolean theNoTerminologyChecks) { myNoTerminologyChecks = theNoTerminologyChecks; return this; @@ -129,6 +135,7 @@ class ValidatorWrapper { v.setResourceIdRule(IdStatus.OPTIONAL); v.setNoTerminologyChecks(myNoTerminologyChecks); v.setErrorForUnknownProfiles(myErrorForUnknownProfiles); + v.setUnknownCodeSystemsCauseErrors(myUnknownSystemsCauseErrors); v.getExtensionDomains().addAll(myExtensionDomains); v.setFetcher(myValidatorResourceFetcher); v.setPolicyAdvisor(myValidationPolicyAdvisor); @@ -136,6 +143,7 @@ class ValidatorWrapper { v.setNoBindingMsgSuppressed(myNoBindingMsgSuppressed); v.setAllowXsiLocation(true); + List messages = new ArrayList<>(); List profiles = new ArrayList<>();