[[fhir-component]]
= FHIR Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-fhir/camel-fhir-component/src/main/docs/fhir-component.adoc
:docTitle: FHIR
:artifactId: camel-fhir
:description: Exchange information in the healthcare domain using the FHIR (Fast Healthcare Interoperability Resources) standard.
:since: 2.23
:supportLevel: Stable
:component-header: Both producer and consumer are supported

*Since Camel {since}*

*{component-header}*

The FHIR component integrates with the
http://hapifhir.io/[HAPI-FHIR] library which is an open-source implementation of the
http://hl7.org/implement/standards/fhir/[FHIR] (Fast Healthcare Interoperability Resources) specification in Java.

Maven users will need to add the following dependency to their pom.xml
for this component:


[source,xml]
----
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-fhir</artifactId>
    <version>${camel-version}</version>
</dependency>
----

== URI Format

The FHIR Component uses the following URI format:

[source,text]
----
fhir://endpoint-prefix/endpoint?[options]
----

Endpoint prefix can be one of:

* capabilities
* create
* delete
* history
* load-page
* meta
* operation
* patch
* read
* search
* transaction
* update
* validate


// component options: START
The FHIR component supports 27 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *encoding* (common) | Encoding to use for all request. The value can be one of: JSON, XML |  | String
| *fhirVersion* (common) | The FHIR Version to use. The value can be one of: DSTU2, DSTU2_HL7ORG, DSTU2_1, DSTU3, R4, R5 | R4 | String
| *log* (common) | Will log every requests and responses | false | boolean
| *prettyPrint* (common) | Pretty print all request | false | boolean
| *serverUrl* (common) | The FHIR server base URL |  | String
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *client* (advanced) | To use the custom client |  | IGenericClient
| *clientFactory* (advanced) | To use the custom client factory |  | IRestfulClientFactory
| *compress* (advanced) | Compresses outgoing (POST/PUT) contents to the GZIP format | false | boolean
| *configuration* (advanced) | To use the shared configuration |  | FhirConfiguration
| *connectionTimeout* (advanced) | How long to try and establish the initial TCP connection (in ms) | 10000 | Integer
| *deferModelScanning* (advanced) | When this option is set, model classes will not be scanned for children until the child list for the given type is actually accessed. | false | boolean
| *fhirContext* (advanced) | FhirContext is an expensive object to create. To avoid creating multiple instances, it can be set directly. |  | FhirContext
| *forceConformanceCheck* (advanced) | Force conformance check | false | boolean
| *sessionCookie* (advanced) | HTTP session cookie to add to every request |  | String
| *socketTimeout* (advanced) | How long to block for individual read/write operations (in ms) | 10000 | Integer
| *summary* (advanced) | Request that the server modify the response using the _summary param. The value can be one of: COUNT, TEXT, DATA, TRUE, FALSE |  | String
| *validationMode* (advanced) | When should Camel validate the FHIR Server's conformance statement. The value can be one of: NEVER, ONCE | ONCE | String
| *proxyHost* (proxy) | The proxy host |  | String
| *proxyPassword* (proxy) | The proxy password |  | String
| *proxyPort* (proxy) | The proxy port |  | Integer
| *proxyUser* (proxy) | The proxy username |  | String
| *accessToken* (security) | OAuth access token |  | String
| *password* (security) | Username to use for basic authentication |  | String
| *username* (security) | Username to use for basic authentication |  | String
|===
// component options: END


// endpoint options: START
The FHIR endpoint is configured using URI syntax:

----
fhir:apiName/methodName
----

with the following path and query parameters:

=== Path Parameters (2 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *apiName* | *Required* What kind of operation to perform. The value can be one of: capabilities, create, delete, history, load-page, meta, patch, read, search, transaction, update, validate |  | FhirApiName
| *methodName* | *Required* What sub operation to use for the selected operation |  | String
|===


=== Query Parameters (46 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *encoding* (common) | Encoding to use for all request. The value can be one of: JSON, XML |  | String
| *fhirVersion* (common) | The FHIR Version to use. The value can be one of: DSTU2, DSTU2_HL7ORG, DSTU2_1, DSTU3, R4, R5 | R4 | String
| *inBody* (common) | Sets the name of a parameter to be passed in the exchange In Body |  | String
| *log* (common) | Will log every requests and responses | false | boolean
| *prettyPrint* (common) | Pretty print all request | false | boolean
| *serverUrl* (common) | The FHIR server base URL |  | String
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. The value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
| *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *client* (advanced) | To use the custom client |  | IGenericClient
| *clientFactory* (advanced) | To use the custom client factory |  | IRestfulClientFactory
| *compress* (advanced) | Compresses outgoing (POST/PUT) contents to the GZIP format | false | boolean
| *connectionTimeout* (advanced) | How long to try and establish the initial TCP connection (in ms) | 10000 | Integer
| *deferModelScanning* (advanced) | When this option is set, model classes will not be scanned for children until the child list for the given type is actually accessed. | false | boolean
| *fhirContext* (advanced) | FhirContext is an expensive object to create. To avoid creating multiple instances, it can be set directly. |  | FhirContext
| *forceConformanceCheck* (advanced) | Force conformance check | false | boolean
| *sessionCookie* (advanced) | HTTP session cookie to add to every request |  | String
| *socketTimeout* (advanced) | How long to block for individual read/write operations (in ms) | 10000 | Integer
| *summary* (advanced) | Request that the server modify the response using the _summary param. The value can be one of: COUNT, TEXT, DATA, TRUE, FALSE |  | String
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *validationMode* (advanced) | When should Camel validate the FHIR Server's conformance statement. The value can be one of: NEVER, ONCE | ONCE | String
| *proxyHost* (proxy) | The proxy host |  | String
| *proxyPassword* (proxy) | The proxy password |  | String
| *proxyPort* (proxy) | The proxy port |  | Integer
| *proxyUser* (proxy) | The proxy username |  | String
| *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
| *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
| *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
| *delay* (scheduler) | Milliseconds before the next poll. | 500 | long
| *greedy* (scheduler) | If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | false | boolean
| *initialDelay* (scheduler) | Milliseconds before the first poll starts. | 1000 | long
| *repeatCount* (scheduler) | Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever. | 0 | long
| *runLoggingLevel* (scheduler) | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. The value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | TRACE | LoggingLevel
| *scheduledExecutorService* (scheduler) | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. |  | ScheduledExecutorService
| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz component. The value can be one of: none, spring, quartz | none | String
| *schedulerProperties* (scheduler) | To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. |  | Map
| *startScheduler* (scheduler) | Whether the scheduler should be auto started. | true | boolean
| *timeUnit* (scheduler) | Time unit for initialDelay and delay options. The value can be one of: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS | MILLISECONDS | TimeUnit
| *useFixedDelay* (scheduler) | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean
| *accessToken* (security) | OAuth access token |  | String
| *password* (security) | Username to use for basic authentication |  | String
| *username* (security) | Username to use for basic authentication |  | String
|===
// endpoint options: END

include::camel-spring-boot::page$fhir-starter.adoc[]
