Spring Boot FHIR support

ipf-fhir-spring-boot-starter sets up the infrastructure for FHIR-based IHE transactions

The dependency on the IPF Spring Boot IHE FHIR starter module is for FHIR STU3:

    <dependency>
        <groupId>org.openehealth.ipf.boot</groupId>
        <artifactId>ipf-fhir-stu3-spring-boot-starter</artifactId>
    </dependency>

and for FHIR R4:

    <dependency>
        <groupId>org.openehealth.ipf.boot</groupId>
        <artifactId>ipf-fhir-r4-spring-boot-starter</artifactId>
    </dependency>

Both ipf-fhir-spring-boot-starter modules auto-configure by default:

You can define your own beans of this type in order to override the defaults.

The modules define a mandatory instance of ca.uhn.fhir.context.FhirContext in the correct FHIR version, the bean name is fhirContext. The instance can, however, be customized by providing a FhirContextCustomizer bean:


    @Bean
    public FhirContextCustomizer fhirContextCustomizer() {
        return new FhirContextCustomizer() {
            
            public void customizeFhirContext(FhirContext fhirContext) {
                // configure FhirContext here
            }
        };
    }

Furthermore, if a single org.springframework.cache.CacheManager bean is available and the application property ipf.fhir.caching is set to true, the following caching storage beans are set up:

ipf-fhir-spring-boot-starter modules do not transitively depend on the respective Camel-dependent IHE FHIR modules as these have been split into support for IHE MHD, PIXm/PDQm, QEDm and RESTful ATNA, respectively. So, e.g. in order to provide STU3 MHD endpoints, you have to include

        <dependency>
            <groupId>org.openehealth.ipf.platform-camel</groupId>
            <artifactId>ipf-platform-camel-ihe-fhir-r4-mhd</artifactId>
        </dependency>

into your project descriptor.

ipf-fhir-spring-boot-starter modules provides the following application properties:

Property (ipf.fhir.) Default Description
caching false Whether to set up a cache for paging
path /fhir Path that serves as the base URI for the FHIR services
fhir-version (depends on module) FHIR Version
identifier-naming-systems   Resource containing a bundle of FHIR NamingSystem resources used for mapping from FHIR URIs to OIDs and namespaces
servlet.init   init parameters for the FHIR servlet
servlet.load-on-startup 1 Load on startup priority of the FHIR servlet
servlet.name FhirServlet Name of the FHIR servlet
servlet.paging-requests 50 Number of concurrent paging requests that can be handled
servlet.default-page-size 50 Default number of result entries to be returned if no _count parameter is specified in a search
servlet.max-page-size 100 Maximum number of result entries to be returned even if the _count parameter of a search demands for more
servlet.distributed-paging-provider false Whether the Paging Provider cache is expected to be distributed, so that serialization of result bundles is necessary. In this case, FHIR endpoints must not use lazy-loading of results.
servlet.logging false Whether server-side request logging is enabled
servlet.pretty-print true Whether pretty-printing responses is enabled
servlet.response-highlighting true Whether color-coding responses queried from a Web Browser is enabled
servlet.strict false Whether FHIR resource parsing is strict
cors.allowed-origins   A list of origins for which cross-origin requests are allowed. Values may be a specific domain, e.g. “https://domain1.com”, or the CORS defined special value “*” for all origins.
cors.allowed-origin-patterns   Alternative to setAllowedOrigins that supports more flexible origins patterns with “*” anywhere in the host name in addition to port lists
cors.allowed-methods   The HTTP methods to allow, e.g. “GET”, “POST”, “PUT”, etc. The special value “*” allows all methods.
cors.allowed-headers   The list of headers that a pre-flight request can list as allowed for use during an actual request. The special value “*” allows actual requests to send any header.
cors.exposed-headers   The list of response headers that an actual response might have and can be exposed to the client. The special value “*” allows all headers to be exposed.
cors.allow-credentials   Whether user credentials are supported. Setting this property has an impact on how origins, originPatterns, allowedMethods and allowedHeaders are processed,
cors.max-age   How long, as a duration, the response from a pre-flight request can be cached by clients.

See ipf-spring-boot-starter and ipf-atna-spring-boot-starter for additional properties.

The starter module does not set up a Camel servlet for serving MHD ITI-68 (Retrieve Document) transactions. Camel provides a Spring boot starter module for this:

        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-servlet-starter</artifactId>
        </dependency>

camel-servlet-starter provides the following application properties:

Property (camel.servlet.mapping.) Default Description
enabled true Enables the automatic mapping of the servlet component into the Spring web context
context-path /camel/* Context path used by the servlet component for automatic mapping
servlet-name CamelServlet The name of the Camel servlet