Data types and exceptions in FHIR Components

IPF FHIR IHE endpoints expect and provide certain types of content in the Camel message body and headers. These types differ depending on whether an endpoint acts as producer or consumer.

Consumer-side requests

Consumer-side requests are automatically unmarshalled, i.e. the incoming message stream sent by the client is transformed into a HAPI FHIR resource object (for write operations) or into message header parameters (for search operations). If unmarshalling fails, an FHIR response automatically generated and passed back to the sender.

Transaction Request Message Type Request Message Headers
ITI-65 Bundle containing DocumentManifest, DocumentReference and Binary resources n/a
ITI-66 n/a Query Parameters
ITI-67 n/a Query Parameters
ITI-68 n/a n/a
ITI-78 n/a Query Parameters
ITI-81 n/a Query Parameters
ITI-83 n/a Query Parameters
PCC-44 n/a Query Parameters
CH:PPQ-3 - for POST and PUT – Consent resource
- for DELETE – identifier of a Consent resource
CH:PPQ-4 Transaction Bundle containing Consent resources or identifiers of Consent resources  
CH:PPQ-5 ChPpq5SearchParameters  

The following Camel headers are set by the consumer:

org.openehealth.ipf.commons.ihe.fhir.Constants. Header Name Content
HTTP_URI FhirHttpUri HttpServletRequest#getRequestURI()
HTTP_URL FhirHttpUrl HttpServletRequest#getRequestURL().toString()
HTTP_METHOD FhirHttpMethod HttpServletRequest#getMethod()
HTTP_QUERY FhirHttpQuery httpServletRequest.getQueryString()
HTTP_CHARACTER_ENCODING FhirHttpCharacterEncoding httpServletRequest.getCharacterEncoding()
HTTP_CONTENT_TYPE FhirHttpContentType httpServletRequest.getContentType()
HTTP_PROTOCOL_VERSION FhirHttpProtocolVersion httpServletRequest.getProtocol()
HTTP_CLIENT_IP_ADDRESS FhirHttpClientIpAddress httpServletRequest.getRemoteAddr()
HTTP_LOCALES FhirHttpAcceptLanguage Collections.list(httpServletRequest.getLocales())
HTTP_USER FhirHttpUserPrincipal httpServletRequest.getUserPrincipal()
HTTP_INCOMING_HEADERS FhirHttpHeaders Map<String, List<String>> of HTTP headers
HTTP_X509_CERTIFICATES FhirHttpCertificates httpServletRequest.getAttribute(X509Certificate.class.getName())
FHIR_REQUEST_PARAMETERS FhirRequestParameters for Queries: Subclass of FhirSearchParameters, containing all populated search parameters
FHIR_REQUEST_DETAILS FhirRequestDetails HAPI FHIR RequestDetails object
FHIR_RESOURCE_TYPE_HEADER RESOURCE_TYPE_HEADER Type of FHIR resource the current requests refers to
FHIR_OPERATION_HEADER OPERATION_HEADER FHIR operation of the current request

Producer-side responses

Producer-side responses are automatically unmarshalled, i.e. the incoming message stream returned by the server is transformed into a HAPI FHIR resource. When unmarshalling fails, an exception will be thrown.

Transaction Response Message Type
ITI-65 Bundle
ITI-66 (search) Bundle containing DocumentManifest resources
ITI-66 (get) DocumentManifest resource
ITI-67 (search) Bundle containing DocumentReference resources
ITI-67 (get) DocumentReference resource
ITI-68 binary content (usually via an InputStream)
ITI-78 (search) Bundle containing matching Patient resources
ITI-78 (get) Patient resource
ITI-81 (get) AuditEvent resource
ITI-83 Parameters containing matching identifiers
PCC-44 (search) Bundle containing resources, depending on IHE option
CH:PPQ-3 MethodOutcome
CH:PPQ-4 Bundle containing transaction results
CH:PPQ-5 Bundle containing found Consent resources

Consumer-side responses

Consumer-side responses are accepted in a number of data types, depending on the transaction, corresponding with the producer-side responses (see above).

Additionally, exceptions are translated into a corresponding HTTP status code and OperationOutcome content. Please refer to the HAPI FHIR documentation for details.

Producer-side requests

Data types for the request message of the supported transactions on producer (i.e. client) side are listed in the table below:

Transaction Request Message Type
ITI-65 Bundle
ITI-66 (search) or URL string
ITI-66 (get) String with the DocumentManifest resource identifier
ITI-67 (search) or URL string
ITI-67 (get) String with the DocumentReference resource identifier
ITI-68 URL string
ITI-78 (search) or URL string
ITI-78 (get) String with the Patient resource identifier
ITI-81 (search) or URL string
ITI-83 org.hl7.fhir.instance.model.Parameters
PCC-44 (search) or URL string
CH:PPQ-3 - for POST and PUT – Consent resource
- for DELETE – identifier of a Consent resource
CH:PPQ-4 Transaction Bundle containing Consent resources or identifiers of Consent resources
CH:PPQ-5 Array of ICriterion<?>

The URL string may be complete (e.g. in which case the client’s base URL will be ignored. Or it can be relative (e.g. Patient?family=smith) in which case the client’s base URL will be used.

Additional outgoing HTTP headers may be set by providing a Camel message header with the name org.openehealth.ipf.commons.ihe.fhir.Constants.HTTP_OUTGOING_HEADERS.
It shall contain a map from header names to lists of values, i.e. Map<String, List<String>>.