From bb3a33d9e43ca0aa2ed2ad431b480a0d9031e535 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Thu, 30 Jan 2025 18:27:12 +1100 Subject: [PATCH] better control over diagnostics in language error messages --- .../org/hl7/fhir/r5/context/BaseWorkerContext.java | 2 ++ .../utilities/TerminologyOperationContext.java | 10 ++++++++++ .../r5/terminologies/validation/ValueSetValidator.java | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java index 589bc66c2..4d927b74b 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java @@ -1469,6 +1469,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte } catch (TerminologyServiceProtectionException e) { OperationOutcomeIssueComponent iss = new OperationOutcomeIssueComponent(org.hl7.fhir.r5.model.OperationOutcome.IssueSeverity.ERROR, e.getType()); iss.getDetails().setText(e.getMessage()); + iss.setDiagnostics(e.getDiagnostics()); issues.add(iss); return new ValidationResult(IssueSeverity.FATAL, e.getMessage(), e.getError(), issues); } catch (Exception e) { @@ -1752,6 +1753,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte } catch (TerminologyServiceProtectionException e) { OperationOutcomeIssueComponent iss = new OperationOutcomeIssueComponent(org.hl7.fhir.r5.model.OperationOutcome.IssueSeverity.ERROR, e.getType()); iss.getDetails().setText(e.getMessage()); + iss.setDiagnostics(e.getDiagnostics()); issues.add(iss); return new ValidationResult(IssueSeverity.FATAL, e.getMessage(), e.getError(), issues); } catch (Exception e) { diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java index 5ac1cd591..2a8d90a4b 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/utilities/TerminologyOperationContext.java @@ -19,12 +19,19 @@ public class TerminologyOperationContext { private TerminologyServiceErrorClass error; private IssueType type; + private String diagnostics; public TerminologyServiceProtectionException(String message, TerminologyServiceErrorClass error, IssueType type) { super(message); this.error = error; this.type = type; } + public TerminologyServiceProtectionException(String message, TerminologyServiceErrorClass error, IssueType type, String diagnostics) { + super(message); + this.error = error; + this.type = type; + this.diagnostics = diagnostics; + } public TerminologyServiceErrorClass getError() { return error; @@ -33,6 +40,9 @@ public class TerminologyOperationContext { public IssueType getType() { return type; } + public String getDiagnostics() { + return diagnostics; + } } diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java index d2d0f83ef..af01bb0c3 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/terminologies/validation/ValueSetValidator.java @@ -816,7 +816,7 @@ public class ValueSetValidator extends ValueSetProcessBase { try { LanguageTag tag = new LanguageTag(registry, t.getLang()); } catch (Exception e) { - throw new TerminologyServiceProtectionException("Invalid displayLanguage: '"+options.getLanguages().getSource()+"'", TerminologyServiceErrorClass.PROCESSING, IssueType.PROCESSING); + throw new TerminologyServiceProtectionException(context.formatMessage(I18nConstants.INVALID_DISPLAY_NAME, options.getLanguages().getSource()), TerminologyServiceErrorClass.PROCESSING, IssueType.PROCESSING, e.getMessage()); } } }