google / fhir-data-pipes

A collection of tools for extracting FHIR resources and analytics services on top of that data.
https://google.github.io/fhir-data-pipes/
Apache License 2.0
151 stars 84 forks source link

NPE while trying to find StructureDefinition for a resource extensions that is missing. #1027

Closed bashir2 closed 4 months ago

bashir2 commented 5 months ago

Steps to reproduce (this is the how I found about this issue; it probably can be reproduced directly by FhirEtl and for any other resource type that has a missing extension not just QuestionnaireResponse):

The following exception is thrown; note this only happens when structureDefinitionsClasspath: "/r4-us-core-definitions" is set (which is by default in the above application.yaml). Instead of throwing NPE, we should gracefully handle this case and communicate the issue more clearly:

Caused by: java.lang.NullPointerException: Cannot invoke "org.hl7.fhir.r4.model.StructureDefinition.getSnapshot()" because "this.structureDefinition" is null
        at com.cerner.bunsen.definitions.r4.R4StructureDefinitions$StructureDefinitionWrapper.getSnapshotDefinitions(R4StructureDefinitions.java:71)
        at com.cerner.bunsen.definitions.StructureDefinitions.extensionElementToFields(StructureDefinitions.java:166)
        at com.cerner.bunsen.definitions.StructureDefinitions.elementToFields(StructureDefinitions.java:279)
        at com.cerner.bunsen.definitions.StructureDefinitions.transformChildren(StructureDefinitions.java:423)
        at com.cerner.bunsen.definitions.StructureDefinitions.elementToFields(StructureDefinitions.java:345)
        at com.cerner.bunsen.definitions.StructureDefinitions.transformChildren(StructureDefinitions.java:423)
        at com.cerner.bunsen.definitions.StructureDefinitions.transformRoot(StructureDefinitions.java:583)
        at com.cerner.bunsen.definitions.StructureDefinitions.transform(StructureDefinitions.java:517)
        at com.cerner.bunsen.avro.AvroConverter.visitResource(AvroConverter.java:69)
        at com.cerner.bunsen.avro.AvroConverter.forResource(AvroConverter.java:182)
        at com.cerner.bunsen.avro.AvroConverter.forResources(AvroConverter.java:157)
        at com.google.fhir.analytics.AvroConversionUtil.getConverter(AvroConversionUtil.java:170)
        at com.google.fhir.analytics.AvroConversionUtil.getResourceSchema(AvroConversionUtil.java:202)
        at com.google.fhir.analytics.ParquetUtil.createWriter(ParquetUtil.java:161)
        at com.google.fhir.analytics.ParquetUtil.write(ParquetUtil.java:176)
        at com.google.fhir.analytics.ParquetUtil.writeRecords(ParquetUtil.java:217)
        at com.google.fhir.analytics.FetchSearchPageFn.processBundle(FetchSearchPageFn.java:246)
        at com.google.fhir.analytics.FetchSearchPageFn.processBundle(FetchSearchPageFn.java:237)
        at com.google.fhir.analytics.FetchResources$SearchFn.processElement(FetchResources.java:144)