Skip to content

Instantly share code, notes, and snippets.

@joergreichert
Created August 22, 2022 17:10
Show Gist options
  • Save joergreichert/8d0c714cfb2d3c5a7eef1bdc0e9be097 to your computer and use it in GitHub Desktop.
Save joergreichert/8d0c714cfb2d3c5a7eef1bdc0e9be097 to your computer and use it in GitHub Desktop.
Reproduce endless loop during erezeptabrechnungsdaten validation
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.support.DefaultProfileValidationSupport;
import ca.uhn.fhir.validation.FhirValidator;
import de.abda.fhir.validator.core.support.IgnoreMissingValueSetValidationSupport;
import org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport;
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 org.hl7.fhir.r4.model.Bundle;
import org.junit.jupiter.api.Test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class MemoryBugReproduceTest {
@Test
public void testMemory() throws IOException {
FhirContext fhirContext = FhirContext.forR4();
NpmPackageValidationSupport npmPackageSupport = new NpmPackageValidationSupport(fhirContext);
// download via npm --registry https://packages.simplifier.net install de.gkvsv.eRezeptAbrechnungsdaten@1.2.0
// or download via https://simplifier.net/packages/de.gkvsv.erezeptabrechnungsdaten/1.2.0/download (requires free login)
npmPackageSupport.loadPackageFromClasspath("classpath:package/de.gkvsv.erezeptabrechnungsdaten-1.2.0.tgz");
ValidationSupportChain validationSupportChain = new ValidationSupportChain(
npmPackageSupport,
new DefaultProfileValidationSupport(fhirContext),
new SnapshotGeneratingValidationSupport(fhirContext),
new IgnoreMissingValueSetValidationSupport(fhirContext)
);
CachingValidationSupport validationSupport = new CachingValidationSupport(validationSupportChain);
FhirInstanceValidator instanceValidator = new FhirInstanceValidator(validationSupport);
instanceValidator.setAnyExtensionsAllowed(false);
instanceValidator.setNoTerminologyChecks(false);
FhirValidator fhirValidator = new FhirValidator(fhirContext);
fhirValidator.registerValidatorModule(instanceValidator);
URLConnection urlcon = new URL("https://raw.githubusercontent.com/DAV-ABDA/eRezept-Beispiele/main/Freitext-Verordnung/Freitext-Verordnung_V1/FT_V1_TA7_Sammelrechnung_Bundle.xml").openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(urlcon.getInputStream()));
StringBuilder sb = new StringBuilder();
String i;
while ((i = br.readLine()) != null) {
sb.append(i).append("\n");
}
var content = sb.toString();
var iParser = FhirContext.forR4().newXmlParser().setPrettyPrint(true);
var bundle = iParser.parseResource(Bundle.class, content);
fhirValidator.validateWithResult(bundle);
}
}
@joergreichert
Copy link
Author

joergreichert commented Aug 22, 2022

uses

        <properties>
           <hapi-fhir.version>6.0.1</hapi-fhir.version>
           <abda-fhir-validator.version>0.9.9</abda-fhir-validator.version>
        </properties>
        ...
        <dependency>
            <groupId>ca.uhn.hapi.fhir</groupId>
            <artifactId>hapi-fhir-base</artifactId>
            <version>${hapi-fhir.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>jcl-over-slf4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>ca.uhn.hapi.fhir</groupId>
            <artifactId>hapi-fhir-structures-r4</artifactId>
            <version>${hapi-fhir.version}</version>
        </dependency>
        <dependency>
            <groupId>ca.uhn.hapi.fhir</groupId>
            <artifactId>hapi-fhir-validation</artifactId>
            <version>${hapi-fhir.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>xpp3</groupId>
                    <artifactId>xpp3</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>ca.uhn.hapi.fhir</groupId>
            <artifactId>hapi-fhir-validation-resources-r4</artifactId>
            <version>${hapi-fhir.version}</version>
        </dependency>
        <dependency>
            <groupId>de.abda</groupId>
            <artifactId>fhir-validator-core</artifactId>
            <version>${abda-fhir-validator.version}</version>
        </dependency>
        <dependency>
            <groupId>de.abda</groupId>
            <artifactId>fhir-validator-packages</artifactId>
            <version>${abda-fhir-validator.version}</version>
        </dependency>

@joergreichert
Copy link
Author

will end in

19:08:13.952 [main]  INFO  ca.uhn.fhir.util.VersionUtil #84 - HAPI FHIR version 6.0.1 - Rev 2a70df1a11
19:08:13.969 [main]  INFO  ca.uhn.fhir.context.FhirContext #208 - Creating new FHIR context for FHIR version [R4]
19:08:18.413 [main]  INFO  ca.uhn.fhir.context.FhirContext #208 - Creating new FHIR context for FHIR version [R4]
19:08:18.550 [main]  INFO  ca.uhn.fhir.util.XmlUtil #75 - FHIR XML procesing will use StAX implementation 'Woodstox' version '6.2.7'
19:08:19.277 [main]  INFO  ca.uhn.fhir.context.FhirContext #208 - Creating new FHIR context for FHIR version [R5]
19:08:19.508 [main]  INFO  c.u.f.c.s.DefaultProfileValidationSupport #327 - Loading structure definitions from classpath: /org/hl7/fhir/r4/model/profile/profiles-resources.xml
19:08:21.028 [main]  INFO  c.u.f.c.s.DefaultProfileValidationSupport #327 - Loading structure definitions from classpath: /org/hl7/fhir/r4/model/profile/profiles-types.xml
19:08:21.177 [main]  INFO  c.u.f.c.s.DefaultProfileValidationSupport #327 - Loading structure definitions from classpath: /org/hl7/fhir/r4/model/profile/profiles-others.xml
19:08:21.436 [main]  INFO  c.u.f.c.s.DefaultProfileValidationSupport #327 - Loading structure definitions from classpath: /org/hl7/fhir/r4/model/extension/extension-definitions.xml
19:08:23.494 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Bundle
19:08:24.073 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_EX_ERP_TA7_Dateinummer
19:08:24.714 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Composition
19:08:25.190 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_EX_TA7_IK_Empfaenger
19:08:25.765 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_EX_TA7_IK_Kostentraeger
19:08:26.084 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_List
19:08:26.561 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Bundle
19:08:26.563 [main]  WARN  o.h.f.c.h.v.s.SnapshotGeneratingValidationSupport #65 - Detected circular dependency, already generating snapshot for: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Bundle
19:08:26.576 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Composition
19:08:26.577 [main]  WARN  o.h.f.c.h.v.s.SnapshotGeneratingValidationSupport #65 - Detected circular dependency, already generating snapshot for: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Composition
19:08:26.598 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_List
19:08:26.599 [main]  WARN  o.h.f.c.h.v.s.SnapshotGeneratingValidationSupport #65 - Detected circular dependency, already generating snapshot for: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_List
19:08:26.623 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Rechnung
19:08:27.154 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_EX_ERP_TA7_Abrechnungszeitraum
19:08:27.445 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_EX_ERP_RezeptBundleReferenz
19:08:27.786 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_List
19:08:28.302 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Bundle
19:08:28.648 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Composition
19:08:28.899 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_List
19:08:28.900 [main]  WARN  o.h.f.c.h.v.s.SnapshotGeneratingValidationSupport #65 - Detected circular dependency, already generating snapshot for: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_List
19:08:28.906 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Bundle
19:08:28.907 [main]  WARN  o.h.f.c.h.v.s.SnapshotGeneratingValidationSupport #65 - Detected circular dependency, already generating snapshot for: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Bundle
19:08:28.913 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Composition
19:08:28.914 [main]  WARN  o.h.f.c.h.v.s.SnapshotGeneratingValidationSupport #65 - Detected circular dependency, already generating snapshot for: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Composition
19:08:28.948 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_List
19:08:29.250 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Bundle
19:08:29.627 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Composition
19:08:29.830 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_List
19:08:29.831 [main]  WARN  o.h.f.c.h.v.s.SnapshotGeneratingValidationSupport #65 - Detected circular dependency, already generating snapshot for: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_List
19:08:29.839 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Bundle
19:08:29.840 [main]  WARN  o.h.f.c.h.v.s.SnapshotGeneratingValidationSupport #65 - Detected circular dependency, already generating snapshot for: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Bundle
19:08:29.848 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Composition
19:08:29.849 [main]  WARN  o.h.f.c.h.v.s.SnapshotGeneratingValidationSupport #65 - Detected circular dependency, already generating snapshot for: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Composition
19:08:29.872 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_List
19:08:30.157 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Bundle
19:08:30.552 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Composition
19:08:30.742 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_List
19:08:30.742 [main]  WARN  o.h.f.c.h.v.s.SnapshotGeneratingValidationSupport #65 - Detected circular dependency, already generating snapshot for: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_List
19:08:30.746 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Bundle
19:08:30.747 [main]  WARN  o.h.f.c.h.v.s.SnapshotGeneratingValidationSupport #65 - Detected circular dependency, already generating snapshot for: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Bundle
19:08:30.752 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Composition
19:08:30.753 [main]  WARN  o.h.f.c.h.v.s.SnapshotGeneratingValidationSupport #65 - Detected circular dependency, already generating snapshot for: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_Composition
19:08:30.778 [main]  INFO  o.h.f.c.h.v.v.VersionSpecificWorkerContextWrapper #103 - Generating snapshot for StructureDefinition: https://fhir.gkvsv.de/StructureDefinition/GKVSV_PR_TA7_Sammelrechnung_List

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment