hapi-fhir
hapi-fhir copied to clipboard
UnsupportedOperationException causing validation error while validating resources based on IHE MHD implementation guide
Describe the bug
While validating Bundle
resources using https://profiles.ihe.net/ITI/MHD/StructureDefinition/IHE.MHD.Minimal.ProvideBundle
profile from IHE MHD IG (4.2.1
), the following method from VersionSpecificWorkerContextWrapper
is called:
@Override
public ValueSetExpansionOutcome expandVS(
Resource src,
org.hl7.fhir.r5.model.ElementDefinition.ElementDefinitionBindingComponent binding,
boolean cacheOk,
boolean Hierarchical) {
throw new UnsupportedOperationException(Msg.code(663));
}
As a result, the following error is returned in the validation result:
{
"severity": "error",
"code": "processing",
"details": {
"coding": [
{
"system": "http://hl7.org/fhir/java-core-messageId",
"code": "SLICING_CANNOT_BE_EVALUATED"
}
]
},
"diagnostics": "Slicing cannot be evaluated: Problem evaluating slicing expression for element in profile https://profiles.ihe.net/ITI/MHD/StructureDefinition/IHE.MHD.Minimal.ProvideBundle|4.2.2 path Bundle.entry[2] (fhirPath = true and resource.conformsTo('http://hl7.org/fhir/StructureDefinition/Binary') and (request.method memberOf 'http://hl7.org/fhir/ValueSet/http-verb|4.0.1')): HAPI-0663: ",
"location": [
"Bundle.entry[2]",
"Line[141] Col[10]"
]
}
To Reproduce
- Download IHE MHD implementation guide here
- Copy and paste the following class
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.support.DefaultProfileValidationSupport;
import ca.uhn.fhir.validation.FhirValidator;
import ca.uhn.fhir.validation.ValidationResult;
import org.hl7.fhir.common.hapi.validation.support.CommonCodeSystemsTerminologyService;
import org.hl7.fhir.common.hapi.validation.support.InMemoryTerminologyServerValidationSupport;
import org.hl7.fhir.common.hapi.validation.support.NpmPackageValidationSupport;
import org.hl7.fhir.common.hapi.validation.support.SnapshotGeneratingValidationSupport;
import org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain;
import org.hl7.fhir.common.hapi.validation.validator.FhirInstanceValidator;
import java.io.IOException;
public class HapiFhirIheMhdValidation {
public static void main(String[] args) throws IOException {
var bundle = """
{
"resourceType": "Bundle",
"meta": {
"profile": [
"https://profiles.ihe.net/ITI/MHD/StructureDefinition/IHE.MHD.Minimal.ProvideBundle"
],
"security": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-ActReason",
"code": "HTEST"
}
]
},
"type": "transaction",
"timestamp": "2024-05-11T14:16:19.224Z",
"entry": [
{
"fullUrl": "urn:uuid:9649cc3d-eb0b-407b-b1ba-61c4eef4dba3",
"resource": {
"resourceType": "List",
"id": "9649cc3d-eb0b-407b-b1ba-61c4eef4dba3",
"meta": {
"profile": [
"https://profiles.ihe.net/ITI/MHD/StructureDefinition/IHE.MHD.Minimal.SubmissionSet"
],
"security": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-ActReason",
"code": "HTEST"
}
]
},
"text": {
"status": "extensions",
"div": "<div xmlns=\\"http://www.w3.org/1999/xhtml\\">SubmissionSet with Patient</div>"
},
"contained": [
{
"resourceType": "Practitioner",
"id": "622209e6-32ad-4283-b4eb-e2bea2aea856",
"telecom": [
{
"system": "email",
"value": "john.doe@localhost"
}
]
}
],
"extension": [
{
"url": "https://profiles.ihe.net/ITI/MHD/StructureDefinition/ihe-sourceId",
"valueIdentifier": {
"value": "urn:oid:1.2.3.4"
}
},
{
"url": "https://profiles.ihe.net/ITI/MHD/StructureDefinition/ihe-intendedRecipient",
"valueReference": {
"reference": "#622209e6-32ad-4283-b4eb-e2bea2aea856"
}
}
],
"identifier": [
{
"use": "usual",
"system": "urn:ietf:rfc:3986",
"value": "urn:oid:1.2.840.113556.1.8000.2554.58783.21864.3474.19410.44358.58254.41281.46343"
}
],
"status": "current",
"mode": "working",
"code": {
"coding": [
{
"system": "https://profiles.ihe.net/ITI/MHD/CodeSystem/MHDlistTypes",
"code": "submissionset"
}
]
},
"subject": {
"reference": "urn:uuid:51eb4fab-9d1a-4314-ad7c-363fc430f52c"
},
"date": "2004-10-25T23:50:50-05:00",
"entry": [
{
"item": {
"reference": "urn:uuid:f494ac72-be69-4910-baf4-0cce4a45e7c1"
}
}
]
},
"request": {
"method": "POST",
"url": "List"
}
},
{
"fullUrl": "urn:uuid:f494ac72-be69-4910-baf4-0cce4a45e7c1",
"resource": {
"resourceType": "DocumentReference",
"id": "f494ac72-be69-4910-baf4-0cce4a45e7c1",
"meta": {
"profile": [
"https://profiles.ihe.net/ITI/MHD/StructureDefinition/IHE.MHD.Minimal.DocumentReference"
],
"security": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-ActReason",
"code": "HTEST"
}
]
},
"masterIdentifier": {
"system": "urn:ietf:rfc:3986",
"value": "urn:oid:1.2.840.113556.1.8000.2554.53432.348.12973.17740.34205.4355.50220.62012"
},
"status": "current",
"subject": {
"reference": "urn:uuid:51eb4fab-9d1a-4314-ad7c-363fc430f52c"
},
"content": [
{
"attachment": {
"contentType": "text/plain",
"url": "urn:uuid:4d14267b-19ff-4237-a301-4cdcfd67d4f9",
"size": 11,
"hash": "MGE0ZDU1YThkNzc4ZTUwMjJmYWI3MDE5NzdjNWQ4NDBiYmM0ODZkMA=="
},
"format": {
"system": "http://ihe.net/fhir/ihe.formatcode.fhir/CodeSystem/formatcode",
"code": "urn:ihe:iti:xds-sd:text:2008"
}
}
]
},
"request": {
"method": "POST",
"url": "DocumentReference"
}
},
{
"fullUrl": "urn:uuid:4d14267b-19ff-4237-a301-4cdcfd67d4f9",
"resource": {
"resourceType": "Binary",
"id": "4d14267b-19ff-4237-a301-4cdcfd67d4f9",
"meta": {
"security": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-ActReason",
"code": "HTEST"
}
]
},
"contentType": "text/plain",
"data": "SGVsbG8gV29ybGQ="
},
"request": {
"method": "POST",
"url": "Binary"
}
},
{
"fullUrl": "urn:uuid:51eb4fab-9d1a-4314-ad7c-363fc430f52c",
"resource": {
"resourceType": "Patient",
"id": "51eb4fab-9d1a-4314-ad7c-363fc430f52c",
"meta": {
"security": [
{
"system": "http://terminology.hl7.org/CodeSystem/v3-ActReason",
"code": "HTEST"
}
]
},
"name": [
{
"family": "Doe",
"given": [
"John"
]
}
]
},
"request": {
"method": "POST",
"url": "Patient"
}
}
]
}
""";
FhirContext fhirContext = FhirContext.forR4();
var validationSupport = new ValidationSupportChain();
validationSupport.addValidationSupport(new DefaultProfileValidationSupport(fhirContext));
validationSupport.addValidationSupport(new SnapshotGeneratingValidationSupport(fhirContext));
validationSupport.addValidationSupport(new CommonCodeSystemsTerminologyService(fhirContext));
validationSupport.addValidationSupport(new InMemoryTerminologyServerValidationSupport(fhirContext));
NpmPackageValidationSupport npmPackageValidationSupport = new NpmPackageValidationSupport(fhirContext);
npmPackageValidationSupport.loadPackageFromClasspath("classpath:package.tgz");
validationSupport.addValidationSupport(npmPackageValidationSupport);
var instanceValidator = new FhirInstanceValidator(validationSupport);
FhirValidator validator = fhirContext.newValidator();
validator.registerValidatorModule(instanceValidator);
ValidationResult validationResult = validator.validateWithResult(bundle);
if (validationResult.isSuccessful()) {
System.out.println("Validation successful");
} else {
System.out.println("Validation failed");
System.out.println(validationResult.getMessages());
}
}
- Runs the class
Expected behavior No validation error should be reported regarding the slice as the resource is valid.
Environment (please complete the following information):
- HAPI FHIR Version: 7.0.2
- OS: MacOS/Linux
- Browser: n/a