---
- item:
    type: "add"
    title: "HAPI FHIR now supports JDK 9 and JDK 10, both for building HAPI FHIR as well as for use. JDK 8 remains supported and is the minimum requirement in order to build or use HAPI FHIR."
- item:
    type: "add"
    title: "A new command has been added to the HAPI FHIR CLI tool: \"migrate-database\". This command performs the schema modifications required when upgrading HAPI FHIR JPA to a new version (previously this was a manual process involving running scripts and reindexing everything). <br/><br/> See the command documentation for more information on how to use this tool. Please post in the HAPI FHIR Google Group if you run into issues, as this is a brand new framework and we still need lots of help with testing."
- item:
    type: "add"
    title: "The version of a few dependencies have been bumped to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Gson (JSON Parser): 2.8.1 -&gt; 2.8.5</li> <li>Spring Framework (JPA): 5.0.3.RELEASE -&gt; 5.0.8.RELEASE</li> <li>Hibernate ORM (JPA): 5.2.16.Final -&gt; 5.3.6.Final</li> <li>Hibernate Search (JPA): 5.7.1.Final -&gt; 5.10.3.Final</li> <li>Jetty (CLI): 9.4.8.v20171121 -&gt; 9.4.12.v20180830</li> <li>Commons-Codec (All): 1.10 -&gt; 1.11</li> <li>Commons-Lang (All): 3.7 -&gt; 3.8</li> <li>Commons-IO (All): 2.5 -&gt; 2.6</li> <li>Spring-Data (JPA): 1.11.6.RELEASE -&gt; 2.0.7.RELEASE</li> </ul>"
- item:
    type: "add"
    title: "A new mnandatory library depdendency has been added to hapi-fhir-base, meaning that all applications using HAPI FHIR must import ti: commons-text. This library has been added as a few utility methods used by HAPI FHIR that were formerly in the commons-lang3 project have been moved into commons-text. This library has been added as a non-optional dependency in the hapi-fhir-base POM, so Maven/Gradle users should not have to make any changes."
- item:
    type: "add"
    title: "The JPA server now has a configuration item in the DaoConfig to specify which bundle types may be stored as-is on the /Bundle endpoint. By default the following types are allowed: collection, document, message."
- item:
    type: "add"
    title: "CapabilityStatements generated by the server module will now include the server base URL in the <code>CapabilityStatement.implementation.url</code> field."
- item:
    issue: "974"
    type: "add"
    title: "Spring-data (used by the JPA server) has been upgraded to version 2.0.7 (from version 1.11.6). Thanks to Roman Doboni for the pull request!"
- item:
    type: "fix"
    title: "A crash in the validator was fixed: Validating a Bundle that did not have Bundle.fullUrl populated could cause a NullPointerException."
- item:
    type: "add"
    title: "AuthorizationInterceptor now examines requests more closely in order to block requests early that are not possibly going to return allowable results when compartment rules are used. For example, if an AuthorizationInterceptor is configured to allow only <b>read</b> access to compartment <code>Patient/123</code> , a search for <code>Observation?subject=987</code> will now be blocked before the method handler is called. Previously the search was performed and the results were examined in order to determine whether they were all in the appropriate compartment, but this incurs a performance cost, and means that this search would successfully return an empty Bundle if no matches were present. <br/><br/> A new setting on AuthorizationInterceptor called <code>setFlags(flags)</code> can be used to maintain the previous behaviour."
- item:
    type: "add"
    title: "JPA server loading logic has been improved to enhance performance when loading a large number of results in a page, or when loading multiple search results with tags. Thanks to Frank Tao for the pull request! This change was introduced as a part of a collaboration between HAPI FHIR and the US National Institiutes for Health (NIH)."
- item:
    issue: "1010"
    type: "fix"
    title: "Resource loading logic for the JPA server has been optimized to reduce the number of database round trips required when loading search results where many of the entries have a \"forced ID\" (an alphanumeric client-assigned resource ID). Thanks to Frank Tao for the pull request! This change was introduced as a part of a collaboration between HAPI FHIR and the US National Institiutes for Health (NIH)."
- item:
    issue: "1000"
    type: "add"
    title: "LOINC uploader has been updated to support the new LOINC filename scheme introduced in LOINC 2.64. Thanks to Rob Hausam for the pull request!"
- item:
    type: "add"
    title: "In the JPA server, it is now possible for a custom search parameter to use the <code>resolve()</code> function in its path to descend into contained resources and index fields within them."
- item:
    type: "add"
    title: "A new IValidationSupport implementation has been added, named CachingValidationSupport. This module wraps another implementation and provides short-term caching. This can have a dramatic performance improvement on servers that are validating or executing FHIRPath repeatedly under load. This module is used by default in the JPA server."
- item:
    type: "fix"
    title: "An index in the JPA server on the HFJ_FORCED_ID table was incorrectly not marked as unique. This meant that under heavy load it was possible to create two resources with the same client-assigned ID."
- item:
    type: "fix"
    title: "The JPA server <code>$expunge</code> operation deleted components of an individual resource record in separate database transactions, meaning that if an operation failed unexpectedly resources could be left in a weird state. This has been corrected."
- item:
    issue: "1015"
    type: "fix"
    title: "A bug was fixed in the JPA terminology uploader, where it was possible in some cases for some ValueSets and ConceptMaps to not be saved because of a premature short circuit during deferred uploading. Thanks to Joel Schneider for the pull request!"
- item:
    issue: "969"
    type: "fix"
    title: "A bug in the HAPI FHIR CLI was fixed, where uploading terminology for R4 could cause an error about the incorrect FHIR version. Thanks to Rob Hausam for the pull request!"
- item:
    type: "add"
    title: "A new method has been added to AuthorizationInterceptor that can be used to create rules allowing FHIR patch operations. See Authorizing Patch Operations for more information."
- item:
    issue: "1018"
    type: "add"
    title: "A new view has been added to the JPA server, reducing the number of database calls required when reading resources back. This causes an improvement in performance. Thanks to Frank Tao for the pull request!"
- item:
    type: "fix"
    title: "A crash was fixed when deleting a ConceptMap resource in the JPA server. This crash was a regression in HAPI FHIR 3.4.0."
- item:
    type: "fix"
    title: "A crash in the JPA server when performing a manual reindex of a deleted resource was fixed."
- item:
    type: "fix"
    title: "Using the generic/fluent client, it is now possible to invoke the $process-message method using a standard client.operation() call. Previously this caused a strange NullPointerException."
- item:
    type: "fix"
    title: "The REST Server now sanitizes URL path components and query parameter names to escape several reserved characters (e.g. \" and <) in order to prevent HTML injection attacks via maliciously crafted URLs."
- item:
    issue: "912"
    type: "add"
    title: "The generic/fluent client now supports the :contains modifier on string search params. Thanks to Clayton Bodendein for the pull request!"
- item:
    issue: "996"
    type: "fix"
    title: "The HAPI FHIR Server has been updated to correctly reflect the current FHIR specification behaviour for the Prefer header. This means that the server will no longer return an OperationOutcome by default, but that one may be requested via a Prefer header, using the newly implemented \"Repreentation: OperationOutcome\" value. Thanks to Ana Maria Radu for the pul request!"
- item:
    type: "add"
    title: "The REST Server module now allows more than one Resource Provider (i.e. more than one implementation of IResourceProvider) to be registered to the RestfulServer for the same resource type. Previous versions of HAPI FHIR have always limited support to a single resource provider, but this limitation did not serve any purpose so it has been removed."
- item:
    type: "add"
    title: "The HashMapResourceProvider now supports the type and instance history operations. In addition, the search method for the <code>_id</code> search parameter now has the search parameter marked as \"required\". This means that additional search methods can be added in subclasses without their intended searches being routed to the searchById method. Also, the resource map now uses a LinkedHashMap, so searches return a predictable order for unit tests."
- item:
    type: "fix"
    title: "Fixed a bug when creating a custom search parameter in the JPA server: if the SearchParameter resource contained an invalid expression, create/update operations for the given resource would fail with a cryptic error. SearchParameter expressions are now validated upon storage, and the SearchParameter will be rejected if the expression can not be processed."
- item:
    type: "add"
    title: "The generic client history operations (history-instance, history-type, and history-server) now support the <code>_at</code> parameter."
- item:
    type: "add"
    title: "In the plain server, many resource provider method parameters may now use a generic <code>IPrimitiveType&lt;String&gt;</code> or <code>IPrimitiveType&lt;Date&gt;</code> at the parameter type. This is handy if you are trying to write code that works across versions of FHIR."
- item:
    type: "add"
    title: "Several convenience methods have been added to the fluent/generic client interfaces. These methods allow the adding of a sort via a SortSpec object, as well as specifying search parameters via a plain Map of Strings."
- item:
    type: "add"
    title: "A new client interceptor called ThreadLocalCapturingInterceptor has been added. This interceptor works the same way as CapturingInterceptor in that it captures requests and responses for later processing, but it uses a ThreadLocal object to store them in order to facilitate use in multithreaded environments."
- item:
    type: "add"
    title: "A new constructor has been added to the client BasicAuthInterceptor allowing credentials to be specified in the form \"username:password\" as an alternate to specifying them as two discrete strings."
- item:
    type: "add"
    title: "SimpleBundleProvider has been modified to optionally allow calling code to specify a search UUID, and a field to allow the preferred page size to be configured."
- item:
    type: "add"
    title: "The JPA server search UUID column has been reduced in length from 40 chars to 36, in order to align with the actual length of the generated UUIDs."
- item:
    type: "add"
    title: "Plain servers using paging may now specify an ID/name for individual pages being returned, avoiding the need to respond to arbitrary offset/index requests from the server. In this mode, page links in search result bundles simply include the ID to the next page."
- item:
    issue: "965"
    type: "fix"
    title: "An issue was fixed in BundleUtil#toListOfEntries, where sometimes a resource could be associated with the wrong entry in the response. Thanks to GitHub user @jbalbien for the pull request!"
- item:
    type: "add"
    title: "JPA subscription delivery queues no longer store the resource body in the queue (only the ID), which should reduce the memory/disk footprint of the queue when it grows long."
- item:
    issue: "1053"
    type: "fix"
    title: "A bug was fixed in JPA server searches: When performing a search with a _lastUpdate filter, the filter was applied to any _include values, which it should not have been. Thanks to Deepak Garg for reporting!"
- item:
    type: "add"
    title: "When performing a ConceptMap/$translate operation with reverse=\"true\" in the arguments, the equivalency flag is now set on the response just as it is for a non-reverse lookup."
- item:
    type: "add"
    title: "When executing a FHIR transaction in JPA server, if the request bundle contains placeholder IDs references (i.e. \"urn:uuid:*\" references) that can not be resolved anywhere else in the bundle, a user friendly error is now returned. Previously, a cryptic error containing only the UUID was returned. As a part of this change, transaction processing has now been consolidated into a single codebase for DSTU3 / R4 (and future) versions of FHIR. This should greatly improve maintainability and consistency for transaction processing."
- item:
    type: "add"
    title: "ResponseHighlighterInterceptor now displays the total size of the output and an estimate of the transfer time at the bottom of the response."
- item:
    issue: "1022"
    type: "add"
    title: "The Prefer header is now honoured for HTTP PATCH requests. Thanks to Alin Leonard for the Pull Request!"
- item:
    type: "add"
    title: "The <code>Composition</code> operation <code>$document</code> has been implemented. Thanks to Patrick Werner for the Pull Request!"
- item:
    type: "add"
    title: "HAPI FHIR CLI commands that allow Basic Auth credentials or a Bearer Token may now use a value of \"PROMPT\" to cause the CLI to prompt the user for credentials using an interactive prompt."
- item:
    type: "remove"
    title: "The experimental \"dynamic mode\" for search parameter registration has been removed. This mode was never published or documented and was labelled as experimental, so I am hoping it was never depended on by anyone. Please post on the HAPI FHIR mailing list if this change affects you."
- item:
    type: "fix"
    title: "A crash was fixed when using the ConceptMap/$translate operation to translate a mapping where the equivalence was not specified."
- item:
    type: "add"
    title: "The maximum length for codes in the JPA server terminology service have been increased to 500 in order to better accomodate code systems with very long codes."
- item:
    type: "fix"
    title: "A bug in the DSTU3 validator was fixed where validation resources such as StructureDefinitions and Questionnaires were cached in a cache that never expired, leading to validations against stale versions of resources."
- item:
    type: "fix"
    title: "In the REST server, if an incoming request has the Content-Encoding header, the server will not try to read request parameters from the content stream. This avoids an incompatibility with new versions of Jetty."
- item:
    issue: "1050"
    type: "fix"
    title: "Custom profile names when not matching standard FHIR profile names, are now handled properly by the validator. Thanks to Anthony Sute for the Pull Request!"
- item:
    type: "add"
    title: "The JPA server now performs a count query instead of a more expensive data query when searches using <code>_summary=count</code> . This means that a total will always be returned in the Bundle (this isn't always guaranteed otherwise, since the Search Controller can result in data being returned before the total number of results is known)."
- item:
    type: "add"
    title: "The JPA server SearchCoordinator now prefetches only a smaller and configurable number of results during the initial search request, and more may be requested in subsequent page requests. This change may have a significant improvement on performance: in previous versions of HAPI FHIR, even if the user only wanted the first page of 10 results, many many more might be prefetched, consuming database resources and server time."
