use of org.hl7.fhir.r4.model.OperationOutcome.OperationOutcomeIssueComponent in project org.hl7.fhir.core by hapifhir.
the class ValidationEngineTests method test140.
@Test
public void test140() throws Exception {
if (inbuild) {
Assertions.assertTrue(true);
return;
}
if (!TestUtilities.silent)
System.out.println("Test140: Validate patient-example.xml in v1.4.0 version");
ValidationEngine ve = TestUtilities.getValidationEngine("hl7.fhir.r2b.core#1.4.0", DEF_TX, FhirPublication.DSTU2016May, "1.4.0");
CacheVerificationLogger logger = new CacheVerificationLogger();
ve.getContext().getTxClient().setLogger(logger);
OperationOutcome op = ve.validate(FhirFormat.XML, TestingUtilities.loadTestResourceStream("validator", "patient140.xml"), null);
if (!TestUtilities.silent)
for (OperationOutcomeIssueComponent iss : op.getIssue()) {
System.out.println(" " + iss.getDetails().getText());
}
int e = errors(op);
int w = warnings(op);
int h = hints(op);
Assertions.assertEquals(1, e);
Assertions.assertEquals(0, w);
Assertions.assertEquals(0, h);
assertTrue(logger.verifyHasNoRequests(), "Unexpected request to TX server");
if (!TestUtilities.silent)
System.out.println(" .. done: " + Integer.toString(e) + " errors, " + Integer.toString(w) + " warnings, " + Integer.toString(h) + " information messages");
}
use of org.hl7.fhir.r4.model.OperationOutcome.OperationOutcomeIssueComponent in project fhir-bridge by ehrbase.
the class ValidationUtils method addIssue.
public static void addIssue(OperationOutcome outcome, IssueSeverity severity, String diagnostics, String location) {
Assert.notNull(outcome, "OperationOutcome must not be null");
Assert.notNull(outcome, "IssueSeverity must not be null");
var issue = new OperationOutcomeIssueComponent().setSeverity(severity).setCode(OperationOutcome.IssueType.PROCESSING).setDiagnostics(diagnostics);
if (location != null) {
issue.addLocation(location);
}
outcome.addIssue(issue);
}
use of org.hl7.fhir.r4.model.OperationOutcome.OperationOutcomeIssueComponent in project fhir-bridge by ehrbase.
the class FhirProfileValidator method validateProfiles.
/**
* Validates the profiles for the given resource.
*
* @param resource the submitted resource
* @param exchange the current exchange
*/
private void validateProfiles(Resource resource, Exchange exchange) {
Set<Profile> supportedProfiles = Profile.resolveAll(resource);
Class<? extends Resource> resourceType = resource.getClass();
OperationOutcome outcome = new OperationOutcome();
if (supportedProfiles.isEmpty()) {
outcome.addIssue(new OperationOutcomeIssueComponent().setSeverity(IssueSeverity.FATAL).setCode(IssueType.VALUE).setDiagnostics(messages.getMessage("validation.profile.missingSupported", new Object[] { Profile.getSupportedProfiles(resourceType) })).addExpression(profileExpression(resource)));
} else if (supportedProfiles.size() > 1) {
outcome.addIssue(new OperationOutcomeIssueComponent().setSeverity(IssueSeverity.FATAL).setCode(IssueType.VALUE).setDiagnostics(messages.getMessage("validation.profile.moreThanOneSupported")).addExpression(profileExpression(resource)));
}
if (outcome.hasIssue()) {
throw new UnprocessableEntityException(fhirContext, outcome);
}
exchange.getMessage().setHeader(CamelConstants.PROFILE, supportedProfiles.iterator().next());
}
use of org.hl7.fhir.r4.model.OperationOutcome.OperationOutcomeIssueComponent in project fhir-bridge by ehrbase.
the class FhirProfileValidator method validateDefault.
/**
* Validates if the default profile is supported by the resource.
*
* @param resource the submitted resource
* @param exchange the current exchange
*/
private void validateDefault(Resource resource, Exchange exchange) {
Class<? extends Resource> clazz = resource.getClass();
Profile profile = Profile.getDefaultProfile(clazz);
if (profile == null) {
OperationOutcome outcome = new OperationOutcome().addIssue(new OperationOutcomeIssueComponent().setSeverity(IssueSeverity.FATAL).setCode(IssueType.VALUE).setDiagnostics(messages.getMessage("validation.profile.defaultNotSupported", new Object[] { resource.getResourceType(), Profile.getSupportedProfiles(clazz) })).addExpression(profileExpression(resource)));
throw new UnprocessableEntityException(fhirContext, outcome);
}
exchange.getMessage().setHeader(CamelConstants.PROFILE, profile);
}
use of org.hl7.fhir.r4.model.OperationOutcome.OperationOutcomeIssueComponent in project pathling by aehrc.
the class ImportExecutor method execute.
/**
* Executes an import request.
*
* @param inParams a FHIR {@link Parameters} object describing the import request
* @return a FHIR {@link OperationOutcome} resource describing the result
*/
@Nonnull
public OperationOutcome execute(@Nonnull @ResourceParam final Parameters inParams) {
// Parse and validate the JSON request.
final List<ParametersParameterComponent> sourceParams = inParams.getParameter().stream().filter(param -> "source".equals(param.getName())).collect(Collectors.toList());
if (sourceParams.isEmpty()) {
throw new InvalidUserInputError("Must provide at least one source parameter");
}
log.info("Received $import request");
// the corresponding table in the warehouse.
for (final ParametersParameterComponent sourceParam : sourceParams) {
final ParametersParameterComponent resourceTypeParam = sourceParam.getPart().stream().filter(param -> "resourceType".equals(param.getName())).findFirst().orElseThrow(() -> new InvalidUserInputError("Must provide resourceType for each source"));
final ParametersParameterComponent urlParam = sourceParam.getPart().stream().filter(param -> "url".equals(param.getName())).findFirst().orElseThrow(() -> new InvalidUserInputError("Must provide url for each source"));
// The mode parameter defaults to 'overwrite'.
final ImportMode importMode = sourceParam.getPart().stream().filter(param -> "mode".equals(param.getName()) && param.getValue() instanceof CodeType).findFirst().map(param -> ImportMode.fromCode(((CodeType) param.getValue()).asStringValue())).orElse(ImportMode.OVERWRITE);
final String resourceCode = ((CodeType) resourceTypeParam.getValue()).getCode();
final ResourceType resourceType = ResourceType.fromCode(resourceCode);
// Get an encoder based on the declared resource type within the source parameter.
final ExpressionEncoder<IBaseResource> fhirEncoder;
try {
fhirEncoder = fhirEncoders.of(resourceType.toCode());
} catch (final UnsupportedResourceError e) {
throw new InvalidUserInputError("Unsupported resource type: " + resourceCode);
}
// Read the resources from the source URL into a dataset of strings.
final Dataset<String> jsonStrings = readStringsFromUrl(urlParam);
// Parse each line into a HAPI FHIR object, then encode to a Spark dataset.
final Dataset<IBaseResource> resources = jsonStrings.map(jsonToResourceConverter(), fhirEncoder);
log.info("Importing {} resources (mode: {})", resourceType.toCode(), importMode.getCode());
if (importMode == ImportMode.OVERWRITE) {
database.overwrite(resourceType, resources.toDF());
} else {
database.merge(resourceType, resources.toDF());
}
}
// We return 200, as this operation is currently synchronous.
log.info("Import complete");
// Construct a response.
final OperationOutcome opOutcome = new OperationOutcome();
final OperationOutcomeIssueComponent issue = new OperationOutcomeIssueComponent();
issue.setSeverity(IssueSeverity.INFORMATION);
issue.setCode(IssueType.INFORMATIONAL);
issue.setDiagnostics("Data import completed successfully");
opOutcome.getIssue().add(issue);
return opOutcome;
}
Aggregations