Permalink
5389 lines (5387 sloc) 249 KB
<?xml version="1.0"?>
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/changes/1.0.0"
xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 ./changes.xsd">
<properties>
<author>James Agnew</author>
<title>HAPI FHIR Changelog</title>
</properties>
<body>
<release version="3.5.0" date="TBD">
<action type="add">
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.
</action>
<action type="add">
The version of a few dependencies have been bumped to the
latest versions (dependent HAPI modules listed in brackets):
<![CDATA[
<ul>
<li>Spring Framework (JPA): 5.0.3.RELEASE -&gt; 5.0.6.RELEASE</li>
<li>Hibernate OR (JPA): 5.2.16.Final -&gt; 5.3.1.Final</li>
<li>Hibernate Search (JPA): 5.7.1.Final -&gt; 5.10.1.Final</li>
<li>Jetty (CLI): 9.4.8.v20171121 -&gt; 9.4.10.v20180503</li>
<li>Commons-Codec (All): 1.10 -&gt; 1.11</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>
]]>
</action>
<action type="add">
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.
</action>
<action type="add">
CapabilityStatements generated by the server module will now include the server
base URL in the
<![CDATA[<code>CapabilityStatement.implementation.url</code>]]>
field.
</action>
<action type="add" issue="974">
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!
</action>
<action type="fix">
A crash in the validator was fixed: Validating a Bundle that did not have fullUrl entries
in a required spot caused a NullPointerException.
</action>
<action type="add">
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
<![CDATA[<b>read</b>]]>
access to compartment
<![CDATA[<code>Patient/123</code>]]>,
a search for
<![CDATA[<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.
<![CDATA[<br/><br/>]]>
A new setting on AuthorizationInterceptor called
<![CDATA[<code>setFlags(flags)</code>]]>
can be used to maintain the previous behaviour.
</action>
<action type="974">
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!
</action>
<action type="add" issue="1000">
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!
</action>
<action type="add">
In the JPA server, it is now possible for a custom search parameter
to use the
<![CDATA[<code>resolve()</code>]]> function in its path to descend into
contained resources and index fields within them.
</action>
<action type="fix" issue="1010">
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 reosurce ID). Thanks to Frank Tao for the pull
request!
</action>
<action type="add">
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.
</action>
<action type="fix">
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.
</action>
<action type="fix">
The JPA server
<![CDATA[<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.
</action>
<action type="fix" issue="1015">
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!
</action>
<action type="fix" issue="969">
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!
</action>
<action type="add">
A new method has been added to AuthorizationInterceptor that can be used to
create rules allowing FHIR patch operations. See
<![CDATA[<a href="http://hapifhir.io/doc_rest_server_security.html#Authorizing_Patch_Operations">Authorizing Patch Operations</a>]]>
for more information.
</action>
<action type="add" issue="1018">
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!
</action>
<action type="fix">
A crash was fixed when deleting a ConceptMap resource in the
JPA server. This crash was a regression in HAPI FHIR 3.4.0.
</action>
<action type="fix">
A crash in the JPA server when performing a manual reindex of a deleted resource
was fixed.
</action>
<action type="fix">
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.
</action>
</release>
<release version="3.4.0" date="2018-05-28">
<action type="add">
The version of a few dependencies have been bumped to the
latest versions (dependent HAPI modules listed in brackets):
<![CDATA[
<ul>
<li>Commons-Lang3 (All): 3.6 -&gt; 3.7</li>
<li>Hibernate (JPA): 5.2.12.Final -&gt; 5.2.16.Final</li>
<li>Javassist (JPA): 3.20.0-GA -&gt; 3.22.0-GA</li>
</ul>
]]>
</action>
<action type="add">
Several enhancements have been made to the JPA server index
tables. These enhancements consist of new colums that will be
used in a future version of HAPI FHIR to significantly decrease
the amount of space required for indexes on token and string index
types.
<![CDATA[<br/><br/>]]>
These new columns are not yet used in HAPI FHIR 3.4.0 but will be
enabled in HAPI FHIR 3.5.0. Anyone upgrading to HAPI FHIR 3.4.0 (or above)
is recommended to invoke the following SQL statement on their
database in order to reindex all data in a background job:
<![CDATA[<br/>]]>
<![CDATA[<pre>update HFJ_RESOURCE set SP_INDEX_STATUS = null;</pre>]]>
<![CDATA[<br/>]]>
Note that if you do this reindex now, you will not have any downtime while
you upgrade to HAPI FHIR 3.5.0. If you need to perform the reindex at the
time that you upgrade to HAPI FHIR 3.5.0 some indexes may not be
available.
<![CDATA[<br/>]]>
In addition, the following schema changes should be made while upgrading:
<![CDATA[<br/>]]>
<![CDATA[<pre>update table TRM_CODESYSTEM_VER drop column RES_VERSION_ID;
alter table TRM_CODESYSTEM_VER drop constraint IDX_CSV_RESOURCEPID_AND_VER</pre>]]>
</action>
<action type="add">
R4 structures have been updated to the latest definitions
(SVN 13732)
</action>
<action type="fix" issue="846">
When calling a getter on a DSTU3/R4 structure for a choice type
(e.g. Observation#getValueString()), a NullPointerException
was thrown if there was no value in this field, and the NPE
had no useful error message. Now this method call will simply
return null.
method
</action>
<action type="fix">
When performing a FHIR resource update in the JPA server
where the update happens within a transaction, and the
resource being updated contains placeholder IDs, and
the resource has not actually changed, a new version was
created even though there was not actually any change.
This particular combination of circumstances seems very
specific and improbable, but it is quite common for some
types of solutions (e.g. mapping HL7v2 data) so this
fix can prevent significant wasted space in some cases.
</action>
<action type="fix">
JPA server index tables did not have a column length specified
on the resource type column. This caused the default of 255 to
be used, which wasted a lot of space since resource names are all
less than 30 chars long and a single resource can have 10-100+
index rows depending on configuration. This has now been set
to a much more sensible 30.
</action>
<action type="fix">
The LOINC uploader for the JPA Terminology Server has been
significantly beefed up so that it now takes in the full
set of LOINC distribution artifacts, and creates not only
the LOINC CodeSystem but a complete set of concept properties,
a number of LOINC ValueSets, and a number of LOINC ConceptMaps.
This work was sponsored by the Regenstrief Institute. Thanks
to Regenstrief for their support!
</action>
<action type="add">
The DSTU2 validator has been refactored to use the same codebase
as the DSTU3/R4 validator (which were harmonized in HAPI FHIR 3.3.0).
This means that we now have a single codebase for all validators, which
improves maintainability and brings a number of improvements
to the accuracy of DSTU2 resource validation.
</action>
<action type="fix">
When encoding a resource that had contained resources with user-supplied
local IDs (e.g. resource.setId("#1")) as well as contained resources
with no IDs (meaning HAPI should automatically assign a local ID
for these resources) it was possible for HAPI to generate
a local ID that already existed, making the resulting
serialization invalid. This has been corrected.
</action>
<action type="add">
The REST Generic Client now supports invoking an operation
on a specific version of a resource instance.
</action>
<action type="add">
A new operation has been added to the JPA server called
"$expunge". This operation can be used to physically delete
old versions of resources, logically deleted resources, or
even all resources in the database.
</action>
<action type="add">
An experimental new feature has been added to AuthorizationInterceptor which
allows user-supplied checkers to add additional checking logic
to determine whether a particular rule applies. This could be
used for example to restrict an auth rule to particular
source IPs, or to only allow operations with specific
parameter values.
</action>
<action type="add">
A new qualifier has been added to the AuthorizationInterceptor
RuleBuilder that allows a rule on an operation to match
<![CDATA[<code>atAnyLevel()</code>]]>, meaning that the rule
applies to the operation by name whether it is at the
server, type, or instance level.
</action>
<action type="add">
Calling <![CDATA[<code>IdType#withVersion(String)</code>]]>
with a null/blank parameter will now return a copy of the
ID with the version removed. Previously this call would
deliberately cause an IllegalArgumentException.
</action>
<action type="fix">
When updating resources on the JPA server, tags did not always
consistently follow FHIR's recommended rules for tag retention. According
to FHIR's rules, if a tag is not explicitly present on an update but
was present on the previous version, it should be carried forward anyhow.
Due to a bug, this happened when more than one tag was present
but not when only one was present. This has been corrected. In
addition, a new request header called
<![CDATA[<code>X-Meta-Snapshot-Mode</code>]]>
has been added that can be used by the client to override
this behaviour.
</action>
<action type="fix">
The JPA server's resource counts query has been optimized to
give the database a bit more flexibility to
optimize, which should increase performance for this query.
</action>
<action type="add">
The JPA server CapabilityStatement generator has been tuned
so that resource counts are no longer calculated synchronously
as a part of building the CapabilityStatement response. With
this change, counts are calculated in the background and cached
which can yield significant performance improvements on
hevaily loaded servers.
</action>
<action type="fix">
Fix a significant performance regression in 3.3.0 when validating DSTU3 content using the
InstanceValidator. From 3.3.0 onward, StructureDefinitions are converted to FHIR R4
content on the fly in order to reduct duplication in the codebase. These conversions
happened upon every validation however, instead of only happening once which adversely
affected performance. A cache has been added.
</action>
<action type="add" issue="903">
Fix a bug in the DSTU2 QuestionnaireResponseValidator which prevented validation
on groups with only one question. Thanks David Gileadi for the pull request!
</action>
<action type="add" issue="709">
The <![CDATA[<code>ConceptMap</code>]]> operation <![CDATA[<code>$translate</code>]]> has been
implemented.
</action>
<action type="add" issue="927">
HAPI-FHIR_CLI now includes two new commands: one for importing and populating a
<![CDATA[<code>ConceptMap</code>]]> resource from a CSV; and one for exporting a
<![CDATA[<code>ConceptMap</code>]]> resource to a CSV.
</action>
<action type="add">
Operation methods on a plain server may now use parameters
of type String (i.e. plain Java strings), and any FHIR primitive
datatype will be automatically coerced into a String.
</action>
<action type="add">
The HAPI FHIR CLI now supports importing an IGPack file as an import
to the validation process.
</action>
<action type="add">
When two threads attempt to update the same resource at the same time, previously
an unspecified error was thrown by the JPA server. An HTTP 409
(Conflict) with an informative error message is now thrown.
</action>
<action type="fix">
A bug in the JPA server's DSTU2 transaction processing routine caused it
to occasionally consume two database connections, which could lead to deadlocks
under heavy load. This has been fixed.
</action>
<action type="fix">
AuthorizationInterceptor sometimes incorrectly identified an operation
invocation at the type level as being at the instance level if the method
indicated that the IdParam parameter was optional. This has been fixed.
</action>
<action type="add">
StructureDefinitions for the FHIR standard extensions have been added to the
hapi-fhir-validation-resources-XXXX modules. Thanks to Patrick Werner for the
pull request! These have also been added to the list of definitions uploaded
by the CLI "upload-definitions" command.
</action>
<action type="fix">
A workaround for an invalid search parameter path in the R4 consent
resource has been implemented. This path was preventing some Consent
resources from successfully being uploaded to the JPA server. Thanks to
Anthony Sute for identifying this.
</action>
<action type="fix" issue="937">
A hard-to-understand validation message was fixed in the validator when
validating against profiles that declare some elements as mustSupport
but have others used but not declared as mustSupport. Thanks to Patrick
Werner for the PR!
</action>
<action type="add" issue="926">
The HAPI FHIR CLI is now available for installation on OSX using the
(really excellent) Homebrew package manager thanks to an effort by
John Grimes to get it added. Thanks John!
</action>
<action type="add" issue="953">
When the REST Server experiences an expected error (such as a NullPointerException)
in a resource provider class, a simple message of "Failed to call access method" is
returned to the user. This has been enhanced to also include the message from
the underlying exception.
</action>
<action type="fix" issue="836">
A bug in the plain server was fixed that prevented some includes from
correctly causing their targets to be included in the response bundle.
Thanks to GitHub user @RuthAlk for the pull request!
</action>
<action type="add" issue="857">
DateRangeParameter was enhanced to support convenient method chanining, and
the parameter validation was improved to only change state after validating
that parameters were valid. Thanks to Gaetano Gallo for the pull request!
</action>
<action type="fix" issue="867">
The HumanName DSTU3+ datatype had convenience methods for testing
whether the name has a specific given name or not, but these methods
did not work. Thanks to Jason Owen for reporting and providing a test
case!
</action>
<action type="fix" issue="874">
An issue was corrected in the validator where Questionnaire references that
used contained resources caused an unexpected crash. Thanks to
Heinz-Dieter Conradi for the pull request!
</action>
<action type="add" issue="875">
An issue in the narrative generator template for the CodeableConcept
datatype was corrected. Thanks to @RuthAlk for the pull request!
</action>
<action type="add">
The JPA server automatic reindexing process has been tweaked so that it no
longer runs once per minute (this was a heavy strain on large databases)
but will instead run once an hour unless triggered for some reason. In addition,
the number of threads allocated to reindexing may now be adjusted via a
setting in the DaoConfig.
</action>
<action type="fix">
AuthorizationInterceptor did not correctly grant access to resources
by compartment when the reference on the target resource that pointed
to the compartment owner was defined using a resource object (ResourceReference#setResource)
instead of a reference (ResourceReference#setReference).
</action>
<action type="add" issue="880">
Several tests were added to ensure accurate validation of QuestionnaireResponse
resources. Thanks to Heinz-Dieter Conradi for the pull request!
</action>
<action type="add" issue="886">
A NullPointerException when validating some QuestionnaireResponse reousrces
was fixed in the validator. Thanks to Heinz-Dieter Conradi for the pull request!
</action>
<action type="add" issue="892">
QuestionnaireResponse answers of type "text" may now be validated by the
FhirInstanceValidator. Thanks to Heinz-Dieter Conradi for the pull request!
</action>
<action type="fix">
The REST server has been modified so that the
<![CDATA[<code>Location</code>]]>
header is no longer returned by the server on read or update responses.
This header was returned in the past, but this header is actually
inappropriate for any response that is not a create operation.
The
<![CDATA[<code>Content-Location</code>]]>
will still be returned, and will hold the same contents.
</action>
<action type="fix">
The Postgres sample JPA project was fixed to use the current version
of HAPI FHIR (it was previously stuck on 2.2). Thanks to
Kai Liu for the pull request!
</action>
</release>
<release version="3.3.0" date="2018-03-29">
<action type="add">
This release corrects an inefficiency in the JPA Server, but requires a schema
change in order to update. Prior to this version of HAPI FHIR, a CLOB column
containing the complete resource body was stored in two
tables: HFJ_RESOURCE and HFJ_RES_VER. Because the same content was stored in two
places, the database consumed more space than is needed to.
<![CDATA[<br/><br/>]]>
In order to reduce this duplication, the
<![CDATA[<code>RES_TEXT</code> and <code>RES_ENCODING</code>]]>
columns have been
<![CDATA[<b>dropped</b>]]>
from the
<![CDATA[<code>HFJ_RESOURCE]]>
table, and the
<![CDATA[<code>RES_TEXT</code> and <code>RES_ENCODING</code>]]>
columns have been
<![CDATA[<b>made NULLABLE</b>]]>
on the
<![CDATA[<code>HFJ_RES_VER]]>
table.
<![CDATA[<br/><br/>]]>
The following migration script may be used to apply these changes to
your database. Naturally you should back your database up prior to
making this change.
<![CDATA[
<pre>ALTER TABLE hfj_resource DROP COLUMN res_text;
ALTER TABLE hfj_resource DROP COLUMN res_encoding;
ALTER TABLE hfj_res_ver ALTER COLUMN res_encoding DROP NOT NULL;
ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL;</pre>
]]>
</action>
<action type="fix">
The validation module has been refactored to use the R4 (currently maintained)
validator even for DSTU3 validation. This is done by using an automatic
converter which converts StructureDefinition/ValueSet/CodeSystem resources
which are used as inputs to the validator. This change should fix a number
of known issues with the validator, as they have been fixed in R4 but
not in DSTU3. This also makes our validator much more maintainable
since it is now one codebase.
</action>
<action type="add">
The version of a few dependencies have been bumped to the
latest versions (dependent HAPI modules listed in brackets):
<![CDATA[
<ul>
<li>Hibernate (JPA): 5.2.10.Final -&gt; 5.2.12.Final</li>
<li>Spring (JPA): 5.0.0 -&gt; 5.0.3</li>
<li>Thymeleaf (Web Tespage Overlay): 3.0.7.RELEASE -&gt; 3.0.9.RELEASE</li>
</ul>
]]>
</action>
<action type="add" issue="871">
A number of HAPI FHIR modules have been converted so that they now work
as OSGi modules. Unlike the previous OSGi module, which was a mega-JAR
with all of HAPI FHIR in it, this is simply the appropriate
OSGi manifest inside the existing JARs. Thanks to John Poth
for the Pull Request!
<![CDATA[
<br/><br/>
Note that this does not cover all modules in the project. Current support includes:
<ul>
<li>HAPI-FHIR structures DSTU2, HL7ORGDSTU2, DSTU2.1, DSTU3, R4</li>
<li>HAPI-FHIR Resource validation DSTU2, HL7ORGDSTU2, DSTU2.1, DSTU3, R4</li>
<li>Apache Karaf features for all the above</li>
<li> Integration Tests</li>
</ul>
Remaining work includes:
<ul>
<li>HAPI-FHIR Server support</li>
<li> HAPI-FHIR narrative support. This might be tricky as Thymeleaf doesn't support OSGi.</li>
</ul>
]]>
</action>
<action type="fix">
Fix a crash in the JSON parser when parsing extensions on repeatable
elements (e.g. Patient.address.line) where there is an extension on the
first repetition but not on subsequent repetitions of the
repeatable primitive. Thanks to Igor Sirkovich for providing a
test case!
</action>
<action type="fix" issue="832">
Fix an issue where the JPA server crashed while attempting to normalize string values
containing Korean text. Thanks to GitHub user @JoonggeonLee for reporting!
</action>
<action type="fix">
An issue was solved where it was possible for server interceptors
to have both processingCompletedNormally and handleException called
if the stream.close() method threw an exception. Thanks to Carlos
Eduardo Lara Augusto for investigating!
</action>
<action type="remove" issue="831">
The <![CDATA[<code>@TagListParam</code>]]> annotation has been removed. This
annotation had no use after DSTU1 but never got deleted and was misleading. Thanks
to Angelo Kastroulis for reporting!
</action>
<action type="add">
A new method overload has been added to IServerInterceptor:
<![CDATA[
<code>outgoingResponse(RequestDetails, ResponseDetails, HttpServletRequest, HttpServletResponse)
]]>. This new method allows an interceptor to completely replace
the resource being returned with a different resource instance, or
to modify the HTTP Status Code being returned. All other "outgoingResponse"
methods have been deprecated and are recommended to be migrated
to the new method. This new method (with its RequestDetails and ResponseDetails
parameters) should be flexible enough to
accommodate future needs which means that this should be the last
time we have to change it.
</action>
<action type="fix" issue="838">
The HAPI-FHIR-CLI now explicitly includes JAXB dependencies in its combined JAR
file. These were not neccesary prior to Java 9, but the JDK (mercifully) does
not include JAXB in the default classpath as of Java 9. This means that
it is possible to perform Schematron validation on Java 9. Thanks to
John Grimes for reporting and suggesting a fix!
</action>
<action type="add">
An experimental interceptor called VersionedApiConverterInterceptor has been added,
which automaticaly converts response payloads to a client-specified version
according to transforms built into FHIR.
</action>
<action type="fix" issue="822">
Searches which were embedded in a Bundle as a transaction or batch operation did
not respect any chained method parameters (e.g. MedicationRequest?medication.code=123).
Thanks to @manjusampath for reporting!
</action>
<action type="fix">
A few fixes went into the build which should now allow HAPI FHIR
to build correctly on JDK 9.0. Currently building is supported on
JDK 8.x and 9.x only.
</action>
<action type="fix" issue="837">
Client requests with an
<![CDATA[<code>Accept</code>]]>
header value of
<![CDATA[<code>application/json</code>]]>
will now be served with the non-legacy content type of
<![CDATA[<code>application/fhir+json</code>]]>
instead of the legacy
<![CDATA[<code>application/json+fhir</code>]]>.
Thanks to John Grimes for reporting!
</action>
<action type="fix">
Fixed a regression in server where a count parameter in the form
<![CDATA[<code>@Count IntegerType theCount</code>]]>
caused an exception if the client made a request with
no count parameter included. Thanks to Viviana Sanz for reporting!
</action>
<action type="fix">
A bug in the JPA server was fixed where a Subscription incorrectly created
without a status or with invalid criteria would cause a crash during
startup.
</action>
<action type="add">
ResponseHighlightingInterceptor now properly parses _format
parameters that include additional content (e.g.
<![CDATA[<code>_format=html/json;fhirVersion=1.0</code>]]>)
</action>
<action type="add">
Stale search deleting routine on JPA server has been adjusted
to delete one search per transaction instead of batching 1000
searches per transaction. This should make the deletion logic
more tolerant of deleting very large search result sets.
</action>
<action type="add">
Avoid refreshing the search parameter cache from an incoming client
request thread, which caused unneccesary delays for clients.
</action>
<action type="fix">
An occasional crash in the JPA was fixed when using unique search
parameters and updating a resource to no longer match
one of these search parameters.
</action>
<action type="fix">
Avoid an endless loop of reindexing in JPA if a SearchParameter is
created which indexed the SearchParameter resource itself
</action>
<action type="add" issue="854">
JPA server now performs temporary/placeholder ID substitution processing on elements in
resources which are of type "URI" in addition to the current substitution for
elements of type "Reference". Thanks to GitHub user @t4deon for supplying
a testcase!
</action>
<action type="fix">
Deleting a resource from the testpage overlay resulted in an error page after
clicking "delete", even though the delete succeeded.
</action>
<action type="remove">
A number of info level log lines have been reduced to debug level in the JPA server, in
order to reduce contention during heavy loads and reduce the amount of noise
in log files overall. A typical server should now see far less logging coming
from HAPI, at least at the INFO level.
</action>
<action type="fix" issue="863">
JPA server now correctly indexes custom search parameters which
have multiple base resource types. Previously, the indexing could
cause resources of the wrong type to be returned in a search
if a parameter being used also matched that type. Thanks
to Dave Carlson for reporting!
</action>
<action type="add">
A new IResourceProvider implementation called
<![CDATA[
<code>HashMapResourceProvider</code>
]]>
has been added. This is a complete resource provider
implementation that uses a HashMap as a backing store. This class
is probably of limited use in real production systems, but it
cam be useful for tests or for static servers with small amounts
of data.
</action>
<action type="fix" issue="872">
An issue in the JPA server was corrected where searching using
URI search parameters would sometimes not include the resource type in the
criteria. This meant, for example, that a search for
<![CDATA[<code>ValueSet?url=http://foo</code>]]> would also
match any CodeSystem resource that happened to also have
that URL as the value for the "url" search parameter. Thanks
to Josh Mandel for reporting and supplying a test case!
</action>
<action type="add" issue="868">
DateParam class now has equals() and hashCode() implementations. Thanks
to Gaetano Gallo for the pull request!
</action>
<action type="fix" issue="814">
Fix a bug where under certain circumstances, duplicate contained resources
could be output by the parser's encode methods. Thanks to
Frank Tao for supplying a test case!
</action>
<action type="add">
The client LoggingInterceptor now includes the number of
milliseconds spent performing each call that is logged.
</action>
<action type="add" issue="786">
ReferenceParam has been enhanced to properly return the resource type to
user code in a server via the ReferenceType#getResourceType() method
if the client has specified a reference parameter with
a resource type. Thanks to @CarthageKing for the pull request!
</action>
<action type="add" issue="776">
An entry has been added to ResourceMetadataKeyEnum which allows extensions
to be placed in the resource metadata section in DSTU2 resource (this is
possible already in DSTU3+ resources as Meta is a normal model type, but
the older structures worked a bit differently. Thanks to GitHub user
sjanic for the contribution!
</action>
<action type="add" issue="791">
An example project has een contributed which shows how to use the CQL
framework in a server with HAPI FHIR JPA. Thanks to Chris Schuler
for the pull request!
</action>
<action type="add" issue="798">
A new module has been contributed called hapi-fhir-jpaserver-elasticsearch
which adds support for Elasticsearch instead of raw Lucene for fulltext
indexing. Testing help on this would be appreciated! Thanks to
Jiajing Liang for the pull request!
</action>
<action type="fix" issue="800">
JAX-RS server now supports R4 and DSTU2_1 FHIR versions, which were
previously missing. Thanks to Clayton Bodendein for the pull
request!
</action>
<action type="fix" issue="806">
AuthorizationInterceptor did not correctly handle authorization against
against a compartment where the compartment owner was specified
as a list of IDs. Thanks to Jiajing Liang for the pull request!
</action>
<action type="add" issue="812">
REST HOOK subscriptions in the JPA server now support having
an empty/missing Subscription.channel.payload value, which
is supported according to the FHIR specification. Thanks
to Jeff Chung for the pull request!
</action>
<action type="fix">
JPA Server Operation Interceptor create/update methods will now no
longer be fired if the create/update operation being performed
is a no-op (e.g. a conditional create that did not need to perform
any action, or an update where the contents didn't actually change)
</action>
<action type="fix" issue="879">
JPA server sometimes updated resources even though the client
supplied an update with no actual changes in it, due to
changes in the metadata section being considered content
changes. Thanks to Kyle Meadows for the pull request!
</action>
<action type="add" issue="817">
A new example project has been added called hapi-fhir-jpaserver-dynamic,
which uses application/environment properties to configure which version
of FHIR the server supports and other configuration. Thanks to
Anoush Mouradian for the pull request!
</action>
<action type="add" issue="581">
A new example project showing the use of JAX-RS Server Side Events has
been added. Thanks to Jens Kristian Villadsen for the pull request!
</action>
<action type="remove" issue="864">
An unneccesary reference to the Javassist library has been
removed from the build. Thanks to Łukasz Dywicki for the
pull request!
</action>
<action type="add" issue="819">
Support has been added to the JPA server for the :not modifier. Thanks
to Łukasz Dywicki for the pull request!
</action>
<action type="add" issue="877">
Suport for the :contains string search parameter modifier has been added to
the JPA server. Thanks to Anthony Sute for the pull request!
</action>
<action type="fix">
All instances of DefaultProfileValidationSupport (i.e. one for
each version of FHIR) have been fixed so that they explicitly
close any InputStreams they open in order to read the built-in
profile resources. Leaving these open caused resource starvation
in some cases under heavy load.
</action>
</release>
<release version="3.2.0" date="2018-01-13">
<action type="add">
Support for custom search parameters has been backported in the JPA server
from DSTU3 back to DSTU2. As of this release of HAPI, full support for custom
search parameters exists in all supported versions of FHIR.
</action>
<action type="add">
A new set of methods have been added to
<![CDATA[<code>IServerOperationInterceptor</code>]]>
called
<![CDATA[<code>resourcePreCreate</code>]]>,
<![CDATA[<code>resourcePreUpdate</code>]]>, and
<![CDATA[<code>resourcePreDelete</code>]]>. These
methods are called within the database transaction
(just as the existing methods were) but are invoked
prior to the contents being saved to the database. This
can be useful in order to allow interceptors to
change payload contents being saved.
</action>
<action type="remove">
A few redundant and no longer useful methods have been marked as
deprecated in
<![CDATA[<code>IServerInterceptor</code>]]>. If you have implemented
custom interceptors you are recommended to migrate to the recommended
methods.
</action>
<action type="add">
A new method has been added to RequestDetails called
<![CDATA[<code>setRequestContents()]]> which can be used
by interceptors to modify the request body before it
is parsed by the server.
</action>
<action type="fix">
Fix a crash in JPA server when performing a recursive
<![CDATA[<code>_include</code>]]> which doesn't actually find any matches.
</action>
<action type="fix" issue="796">
When encoding URL parameter values, HAPI FHIR would incorrectly escape
a space (" ") as a plus ("+") insetad of as "%20" as required by
RFC 3986. This affects client calls, as well as URLs generated by
the server (e.g. REST HOOK calls). Thanks to James Daily for reporting!
</action>
<action type="fix">
Searching in JPA server using a combination of _content and _id parameters
failed. Thanks to Jeff Weyer for reporting!
</action>
<action type="add">
A new configuration option has been added to DaoConfig which allows newly created
resources to be assigned a UUID by the server instead of a sequential ID
</action>
<action type="fix">
An unneccesary column called "MYHASHCODE" was added to the
HFJ_TAG_DEF table in the JPA server schema
</action>
<action type="fix">
A few log entries emitted by the JPA server suring every search have been reduced
from INFO to DEBUG in order to reduce log noise
</action>
<action type="fix" issue="810">
Fix an issue in JPA server where updating a resource sometimes caused date search indexes to
be incorrectly deleted. Thanks to Kyle Meadows for the pull request!
</action>
<action type="fix" issue="808">
Servers did not return an ETag if the version was provided on a
DSTU3/R4 structure in the getMeta() version field instead of in the
getIdElement() ID. Thanks to GitHub user @Chrisjobling for reporting!
</action>
<action type="fix">
A bug was fixed in the JPA server when performing a validate operation with a mode
of DELETE on a server with referential integrity disabled, the validate operation would delete
resource reference indexes as though the delete was actually happening, which negatively
affected searching for the resource being validated.
</action>
<action type="add">
The HAPI FHIR Server framework now has initial support for
multitenancy. At this time the support is limited to the server
framework (not the client, JPA, or JAX-RS frameworks). See
<![CDATA[
<a href="http://hapifhir.io/doc_rest_server.html">Server Documentation</a>
]]>
for more information.
</action>
</release>
<release version="3.1.0" date="2017-11-23">
<action type="add">
The version of a few dependencies have been bumped to the
latest versions (dependent HAPI modules listed in brackets):
<![CDATA[
<ul>
<li>Spring (JPA): 4.3.10 -&gt; 5.0.0</li>
<li>Jackson (JPA): 2.8.1 -&gt; 2.9.2</li>
</ul>
]]>
</action>
<action type="fix">
The Android client module has been restored to working order, and no longer
requires a special classifier or an XML parser to be present in order to
work. This means that the hapi-fhir-android library is much less likely
to cause conflicts with other libraries imported into an Android application
via Gradle.
<![CDATA[<br/><br/>]]>
See the
<![CDATA[<a href="http://hapifhir.io/doc_android.html">HAPI FHIR Android Documentation</a>]]>
for more information. As a part of this fix, all dependencies on
the StAX API have been removed in environments where StAX is not
present (such as Android). The client will now detect this case, and
explicitly request JSON payloads from servers, meaning that Android clients
no longer need to include two parser stacks
</action>
<action type="add">
A performance to the JPA server has been made which reduces the number
of writes to index tables when updating a resource with contents that
only make minor changes to the resource content. In many cases this can
noticeably improve update performance.
</action>
<action type="fix">
In FHIR DSTU3 the
<![CDATA[<code>ValueSet/$expand?identifier=foo</code>]]>
and
<![CDATA[<code>ValueSet/$validate-code?identifier=foo</code>]]>
parameters were changed to
<![CDATA[<code>ValueSet/$expand?url=foo</code>]]>
and
<![CDATA[<code>ValueSet/$validate-code?url=foo</code>]]>
respectively, but the JPA server had not caught up. The
JPA DSTU3 server has been adjusted to accept either "identifier"
or "url" (with "url" taking precedence), and the JPA R4 server
has been changed to only accept "url".
Thanks to Avinash Shanbhag for reporting!
</action>
<action type="fix" issue="744">
Fix an error in JPA server when using Derby Database, where search queries with
a search URL longer than 255 characters caused a mysterious failure. Thanks to
Chris Schuler and Bryn Rhodes for all of their help in reproducing this issue.
</action>
<action type="add">
JPA server now supports the use of the
<![CDATA[<code>Cache-Control</code>]]>
header in order to allow the client to selectively disable the
search result cache. This directive can also be used to disable result paging
and return results faster when only a small number of results is needed.
See the
<![CDATA[<a href="http://hapifhir.io/doc_jpa.html">JPA Page</a>]]>
for more information.
</action>
<action type="fix">
In certain cases in the JPA server, if multiple threads all attempted to
update the same resource simultaneously, the optimistic lock failure caused
a "gap" in the history numbers to occur. This would then cause a mysterious
failure when trying to update this resource further. This has been
resolved.
</action>
<action type="add">
JPA Server search/history results now set the ID of the returned Bundle to
the ID of the search, meaning that if a search returns results from the Query
cache, it will reuse the ID of the previously returned Bundle
</action>
<action type="fix">
Fix a NullPointerException when validating a Bundle (in DSTU3/R4) with no
<![CDATA[<code>Bundle.type</code>]]> value
</action>
<action type="add">
The JPA server transaction operation (DSTU3/R4) did not correctly process the
If-Match header when passed in via
<![CDATA[<code>Bundle.entry.request.ifMatch</code>]]> value
</action>
<action type="add">
In Apache client, remove a log message at WARN level when the response does not
specify a charset. This log line often showed up any time a server was not supplying
a response, making client logs quite noisy
</action>
<action type="add">
A new configuration item has been added to the JPA server DaoConfig
called
<![CDATA[<code>getCountSearchResultsUpTo()</code>]]>.
This setting governs how many search results the search
coordinator should try to find before returning an initial
search response to the user, which has an effect on whether
the
<![CDATA[<code>Bundle.total</code>]]>
field is always populated in search responses. This has now
been set to 20000 on out public server (fhirtest.uhn.ca)
so most search results should now include a total.
</action>
<action type="fix">
Remove a bunch of exceptions in the org.hl7.fhir.exception package from the
hapi-fhir-base module, as they were also duplicated in the
hapi-fhir-utilities module.
</action>
<action type="add">
The DSTU2 XhtmlDt type has been modified so that it no longer uses
the StAX XMLEvent type as its internal model, and instead simply uses
a String. New methods called "parse" and "encode" have been added
to HAPI FHIR's XmlUtil class, which can be used to convert
between a String and an XML representation. This should allow
HAPI FHIR to run in environments where StAX is not available, such
as Android phones.
</action>
<action type="add" issue="761">
Restored the
<![CDATA[<code>org.hl7.fhir.r4.model.codesystem.*</code>]]>
classes (which are Java Enums for the various FHIR codesystems).
These were accidentally removed in HAPI FHIR 3.0.0. Thanks to
GitHub user @CarthageKing for reporting!
</action>
<action type="fix">
The resource Profile Validator has been enhanced to not try to validate
bound fields where the binding strength is "example", and a crash was
resolved when validating QuestionnaireResponse answers with a type
of "choice" where the choice was bound to a ValueSet.
</action>
<action type="fix">
Remove the fake "Test" resource from DSTU2 structures. This was not
a real resource type, and caused conflicts with the .NET client. Thanks to
Vlad Ignatov for reporting!
</action>
<action type="fix" issue="720">
Parsing a DSTU3/R4 custom structure which contained a field of
a custom type caused a crash during parsing. Thanks to
GitHub user @mosaic-hgw for reporting!
</action>
<action type="add" issue="711">
Client logic for checking the version of the connected
server to ensure it is for the correct version of FHIR now
includes a check for R4 servers. Thanks to Clayton Bodendein
for the pull request, including a number of great tests!
</action>
<action type="add" issue="714">
JAX-RS client framework now supports the ability to
register your own JAX-RS Component Classes against the client,
as well as better documentation about thread safety. Thanks
to Sébastien Rivière for the pull request!
</action>
<action type="fix" issue="717">
Processing of the If-Modified-Since header on FHIR read operations was reversed,
returning a 304 when the resource had been modified recently. Thanks to
Michael Lawley for the pull request!
</action>
<action type="add">
Add <![CDATA[<code>Prefer</code> and <code>Cache-Control</code>]]> to the list of headers which are declared as
being acceptable for CORS requests in CorsInterceptor, CLI, and JPA Example.
Thanks to Patrick Werner for the pull request!
</action>
<action type="fix" issue="725">
DSTU2-hl7org and DSTU2.1 structures did not copy resource IDs when invoking
copyValues(). Thanks to Clayton Bodendein for the pull request!
</action>
<action type="fix" issue="734">
When encoding a Binary resource, the Binary.securityContext field
was not encoded correctly. Thanks to Malcolm McRoberts for the pull
request with fix and test case!
</action>
<action type="add">
Bundle resources did not have their version encoded when serializing
in FHIR resource (XML/JSON) format.
</action>
<action type="add">
The Binary resource endpoint now supports the <![CDATA[<code>X-Security-Context</code>]]> header when
reading or writing Binary contents using their native Content-Type (i.e exchanging
the raw binary with the server, as opposed to exchanging a FHIR resource).
</action>
<action type="fix">
When paging through multiple pages of search results, if the
client had requested a subset of resources to be returned using the
<![CDATA[<code>_elements</code>]]> parameter, the elements list
was lost after the first page of results.
In addition, elements will not remove elements from
search/history Bundles (i.e. elements from the Bundle itself, as opposed
to elements in the entry resources) unless the Bundle elements are
explicitly listed, e.g. <![CDATA[<code>_include=Bundle.total</code>]]>.
Thanks to @parisni for reporting!
</action>
<action type="add" issue="743">
Add support for Spring Boot for initializing a number of parts of the library,
as well as several examples.
See the
<![CDATA[<a href="https://github.com/jamesagnew/hapi-fhir/tree/master/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples">Spring Boot samples</a>]]>
for examples of how this works.
Thanks to Mathieu Ouellet for the contribution!
</action>
<action type="add" issue="747">
JPA server now has lucene index support moved to separate classes from the entity
classes in order to facilitate support for ElasticSearch. Thanks to Jiang Liang
for the pull request!
<![CDATA[
Note that any existing JPA projects will need to add an additional property in their Spring config called <code>hibernate.search.model_mapping</code>. See <a href="https://github.com/jamesagnew/hapi-fhir/blob/master/hapi-fhir-jpaserver-example/src/main/java/ca/uhn/fhir/jpa/demo/FhirServerConfig.java#L84">this line</a> in the example project.
]]>
</action>
<action type="add" issue="755">
A new client interceptor has been added called
AdditionalRequestHeadersInterceptor, which allows
a developer to add additional custom headers to a
client requests.
Thanks to Clayton Bodendein for the pull request!
</action>
<action type="fix">
An issue was fixed in JPA server where extensions on primitives which
are nestedt several layers deep are lost when resources are retrieved
</action>
<action type="fix" issue="756">
Conditional deletes in JPA server were incorrectly denied by AuthorizationInterceptor
if the delete was permitted via a compartment rule. Thanks to Alvin Leonard for the
pull request!
</action>
<action type="add" issue="767">
JAX-RS server module was not able to generate server CapabilityStatement for
some versions of FHIR (DSTU2_HL7ORG, DSTU2_1, or R4). Thanks to Clayton Bodendein for the Pull Request!
</action>
<action type="add" issue="769">
When a server method throws a DataFormatException, the error will now be converted into
an HTTP 400 instead of an HTTP 500 when returned to the client (and a stack
trace will now be returned to the client for JAX-RS server if configured to
do so). Thanks to Clayton Bodendein for the pull request!
</action>
<action type="fix" issue="770">
JAX-RS server conformance provider in the example module passed in the
server description, server name, and server version in the incorrect order.
Thanks to Clayton Bodendein for the pull request!
</action>
<action type="fix" issue="774">
The learn more links on the website home page had broken links. Thanks to
James Daily for the pull request to fix this!
</action>
<action type="add" issue="762">
Prevent a crash in AuthorizationInterceptor when processing transactions
if the interceptor has rules declared which allow resources to be read/written
by "any ID of a given type". Thanks to GitHub user @dconlan for the pull
request!
</action>
</release>
<release version="3.0.0" date="2017-09-27">
<action type="add">
Support for FHIR R4 (current working draft) has been <![CDATA[<b>added</b>]]>
(in a new module called <![CDATA[<code>hapi-fhir-structures-r4</code>]]>)
and
support for FHIR DSTU1 (<![CDATA[<code>hapi-fhir-structures-dstu</code>]]>)
has been <![CDATA[<b>removed</b>]]>. Removing support for the legacy
DSTU1 FHIR version was a difficult decision, but it allows us the
opportunitity to clean up the codebase quite a bit, and remove some
confusing legacy parts of the API (such as the legacy Atom Bundle class).
<![CDATA[<br/><br/>]]>
A new redesigned table of HAPI FHIR versions to FHIR version support has been
added to the <![CDATA[<a href="http://hapifhir.io/download.html">Download Page</a>]]>
</action>
<action type="add">
HAPI FHIR's modules have been restructured for more consistency and less coupling
between unrelated parts of the API.
<![CDATA[<br/><br/>]]>
A new complete list of HAPI FHIR modules has been added to the
<![CDATA[<a href="http://hapifhir.io/download.html">Download Page</a>]]>. Key changes
include:
<![CDATA[
<ul>
<li>
HAPI FHIR's <b>client</b> codebase has been moved out of <code>hapi-fhir-base</code>
and in to a new module called <code>hapi-fhir-client</code>. Client users now need
to explicitly add this JAR to their project (and non-client users now no longer
need to depend on it)
</li>
<li>
HAPI FHIR's <b>server</b> codebase has been moved out of <code>hapi-fhir-base</code>
and in to a new module called <code>hapi-fhir-server</code>. Server users now need
to explicitly add this JAR to their project (and non-server users now no longer
need to depend on it)
</li>
<li>
As a result of the client and server changes above, we no longer need to produce
a special Android JAR which contains the client, server (which added space but was
not used) and structures. There is now a normal module called <code>hapi-fhir-android</code>
which is added to your Android Gradle file along with whatever structures JARs you
wish to add. See the
<a href="https://github.com/hapifhir/hapi-fhir-android-integration-test">Android Integration Test</a>
to see a sample project using HAPI FHIR 3.0.0. <b>Note that this has been reported to
work by some people but others are having issues with it!</b> In order to avoid delaying
this release any further we are releasing now despite these issues. If you are an Android
guru and want to help iron things out please get in touch. If not, it might be a good
idea to stay on HAPI FHIR 2.5 until the next point release of the 3.x series.
</li>
<li>
A new JAR containing FHIR utilities called <code>hapi-fhir-utilities</code> has been
added. This JAR reflects the ongoing harmonization between HAPI FHIR and the FHIR
RI codebases and is generally required in order to use HAPI at this point (if you
are using a dependency manager such as Maven or Gradle it will be brought in to your
project automatically as a dependency)
</li>
</ul>
]]>
</action>
<action type="add">
In order to allow the reoganizations and decoupling above to happen, a number of important classes
and interfaces have been moved to new packages. A sample list of these changes is listed
below. When upgrading to 3.0.0 your project may well show a number of compile errors
related to missing classes. In most cases this can be resolved by simply removing the HAPI
imports from your classes and asking your IDE to "Organize Imports" once again. This is an
annoying change we do realize, but it is neccesary in order to allow the project to
continue to grow.
<![CDATA[
<ul>
<li>IGenericClient moved from package ca.uhn.fhir.rest.client to package ca.uhn.fhir.rest.client.api</li>
<li>IRestfulClient moved from package ca.uhn.fhir.rest.client to package ca.uhn.fhir.rest.client.api</li>
<li>AddProfileTagEnum moved from package ca.uhn.fhir.rest.server to package ca.uhn.fhir.context.api</li>
<li>IVersionSpecificBundleFactory moved from package ca.uhn.fhir.rest.server to package ca.uhn.fhir.context.api</li>
<li>BundleInclusionRule moved from package ca.uhn.fhir.rest.server to package ca.uhn.fhir.context.api</li>
<li>RestSearchParameterTypeEnum moved from package ca.uhn.fhir.rest.server to package ca.uhn.fhir.rest.api</li>
<li>EncodingEnum moved from package ca.uhn.fhir.rest.server to package ca.uhn.fhir.rest.api</li>
<li>Constants moved from package ca.uhn.fhir.rest.server to package ca.uhn.fhir.rest.api</li>
<li>IClientInterceptor moved from package ca.uhn.fhir.rest.client to package ca.uhn.fhir.rest.client.api</li>
<li>ITestingUiClientFactory moved from package ca.uhn.fhir.util to package ca.uhn.fhir.rest.server.util</li>
</ul>
]]>
</action>
<action type="add">
Because the Atom-based DSTU1 Bundle class has been removed from the library, users of the
HAPI FHIR client must now always include a Bundle return type in search calls. For example,
the following call would have worked previously:
<![CDATA[
<pre>
Bundle bundle = client.search().forResource(Patient.class)
.where(new TokenClientParam("gender").exactly().code("unknown"))
.prettyPrint()
.execute();
</pre>
]]>
This now needs an explicit returnBundle statement, as follows:
<![CDATA[
<pre>
Bundle bundle = client.search().forResource(Patient.class)
.where(new TokenClientParam("gender").exactly().code("unknown"))
.prettyPrint()
.returnBundle(Bundle.class)
.execute();
</pre>
]]>
</action>
<action type="add">
The version of a few dependencies have been bumped to the
latest versions (dependent HAPI modules listed in brackets):
<![CDATA[
<ul>
<li>Gson (JSON Parser): 2.8.0 -&gt; 2.8.1</li>
<li>Commons-lang3 (Everywhere): 3.5 -&gt; 3.6</li>
<!--<li>Saxon-HE (Validator): 9.5.1-5 -&gt; 9.8.0-3</li>-->
<li>Apache HttpClient (FHIR Client): 4.5.2 -&gt; 4.5.3</li>
<li>Apache HttpCore (FHIR Client): 4.4.5 -&gt; 4.4.6</li>
<li>Phloc Commons (Schematron Validator): 4.4.6 -&gt; 4.4.11</li>
<li>Hibernate (JPA): 5.2.9 -&gt; 5.2.10</li>
<li>Hibernate Search (JPA): 5.7.0 -&gt; 5.7.1</li>
<li>Spring (JPA): 4.3.7 -&gt; 4.3.10</li>
<li>Spring Data JPA (JPA): 1.10.4 -&gt; 1.11.6</li>
<li>Guava (JPA): 22.0 -&gt; 23.0</li>
<li>Thymeleaf (Testpage Overlay): 3.0.2 -&gt; 3.0.7</li>
<li>OkHttp (Android): 3.4.1 -&gt; 3.8.1</li>
</ul>
]]>
</action>
<action type="add">
JPA Subscription support has been refactored. A design contributed
by Jeff Chung for the REST Hook subscription module has been ported
so that Websocket subscriptions use it too. This design uses an
interceptor to scan resources as they are processed to test whether
they should be delivered to subscriptions, instead of using a
polling design.
<![CDATA[<br/><br/>]]>
In addition, this scanning has been reworked to happen in a separate
thread from the main storage thread, which should improve
performance and scalability of systems with multiple
subscriptions. Thanks to Jeff for all of his work on this!
</action>
<action type="fix">
hapi-fhir-client-okhttp project POM had dependencies on both
hapi-fhir-structures-dstu2 and hapi-fhir-structures-dstu3, which
meant that any project using ookhttp would import both structures
JARs. This has been removed.
</action>
<action type="add">
JPA server is now able to handle placeholder IDs (e.g. urn:uuid:00....000)
being used in Bundle.entry.request.url as a part of the conditional URL
within transactions.
</action>
<action type="fix">
Schematron validator now applies invariants to resources within a Bundle, not
just to the outer Bundle resource itself
</action>
<action type="fix">
Server and Client both still included Category header for resource tags even though
this feature was only present in FHIR DSTU1 and was removed from the specification in
FHIR DSTU2. The presence of these headers sometimes caused parsed resource instances
to contain duplicate tags
</action>
<action type="fix" issue="667">
When using the AuthorizationInterceptor with the JPA server, when a client is updating a resource
from A to B, the user now needs to have write permission for both A and B. This is particularly
important for cases where (for example) an Observation is being updated from having a subject of
Patient/A to Patient/B. If the user has write permission for Patient/B's compartment, this would
previously have been allowed even if the user did not have access to write to Patient/A's compartment.
Thanks to Eeva Turkka for reporting!
</action>
<action type="add">
IServerOperationInterceptor now has a new method
<![CDATA[<code>resourceUpdated(RequestDetails, IBaseResource, IBaseResource)</code>]]>
which replaces the previous
<![CDATA[<code>resourceUpdated(RequestDetails, IBaseResource)</code>]]>. This allows
interceptors to be notified of resource updates, but also see what the resource
looked like before the update. This change was made to support the change above, but
seems like a useful feature all around.
</action>
<action type="fix" issue="604">
Allow DateParam (used in servers) to handle values with MINUTE precision. Thanks to
Christian Ohr for the pull request!
</action>
<action type="fix">
Fix HTTP 500 error in JPA server if a numeric search parameter was supplied with no value, e.g.
<![CDATA[<code>GET /Observation?value-quantity=</code>]]>
</action>
<action type="add">
JPA server transaction processing now honours the Prefer header and includes
created and updated resource bodies in the response bundle if it is set
appropriately.
</action>
<action type="add">
Optimize queries in JPA server remove a few redundant select columns when performing
searches. This provides a slight speed increase in some cases.
</action>
<action type="add">
Add configuration to JPA server DaoConfig that allows a maximum
number of search results to be specified. Queries will never return
more than this number, which can be good for avoiding accidental
performance problems in situations where large queries should not be
needed
</action>
<action type="fix" issue="674">
Prevent duplicates in $everything query response in JPA server. Thanks to @vlad-ignatov
for reporting!
</action>
<action type="fix">
Fix issue in calling JPA server transactions programmatically where resources
are linked by object reference and not by ID where indexes were not correctly
generated. This should not affect most users.
</action>
<action type="fix" issue="678">
Fix issue in SubscriptionInterceptor that caused interceptor to only
actually notify listeners of the first 10 subscriptions. Thanks to Jeff Chung
for the pull request!
</action>
<action type="fix" issue="693">
Fix potential ConcurrentModificationException when adding subscriptions while
running under heavy load. Thanks to Jeff Chung for the pull request!
</action>
<action type="add">
JPA search now uses hibernate ScrollableResults instead of plain JPA List. This
should improve performance over large search results.
</action>
<action type="add">
JPA servers with no paging provider configured, or with a paging provider other than
DatabaseBackedPagingProvider will load all results in a single pass and keep them
in memory. Using this setup is not a good idea unless you know for sure that you
will never have very large queries since it means that all results will be loaded into
memory, but there are valid reasons to need this and it will perform better than
paging to the database in that case. This fix also resolves a NullPointerException
when performing an $everything search. Thanks to Kamal Othman for reporting!
</action>
<action type="fix">
Correct an issue in JPA server on Postgres where searches with a long search URL
were not able to be automatically purged from the database after they were scheduled
for deletion. Thanks to Ravi Kuchi for reporting!
</action>
<action type="add">
Add an optional and configurable hard limit on the total number of meta items
(tags, profiles, and security labels) on an individual resource. The default
is 1000.
</action>
<action type="add">
When executing a search (HTTP GET) as a nested operation in in a transaction or
batch operation, the search now returns a normal page of results with a link to
the next page, like any other search would. Previously the search would return
a small number of results with no paging performed, so this change brings transaction
and batch processing in line with other types of search.
</action>
<action type="add">
JPA server no longer returns an OperationOutcome resource as the first resource
in the Bundle for a response to a batch operation. This behaviour was previously
present, but was not specified in the FHIR specification so it caused confusion and
was inconsistent with behaviour in other servers.
</action>
<action type="fix">
Fix a regression in HAPI FHIR 2.5 JPA server where executing a search in a
transaction or batch operation caused an exception. Thanks to Ravi Kuchi for
reporting!
</action>
<action type="fix">
Correct an issue when processing transactions in JPA server where updates and
creates to resources with tags caused the tags to be created twice in the
database. These duplicates were utomatically filtered upon read so this issue
was not user-visible, but it coule occasionally lead to performance issues
if a resource containing multiple tags was updated many times via
transactions.
</action>
<action type="fix">
JPA server should not allow creation of resources that have a reference to
a resource ID that previously existed but is now deleted. Thanks to Artem
Sopin for reporting!
</action>
<action type="add">
JpaConformanceProvider now has a configuration setting to enable and
disable adding resource counts to the server metadata.
</action>
<action type="fix">
Avoid a deadlock in JPA server when the RequestValidatingInterceptor is being
used and a large number of resources are being created by clients at
the same time.
</action>
<action type="fix">
Testpage Overlay's transaction method did not work if the response
Bundle contained any entries that did not contain a resource (which
is often the case in more recent versions of HAPI). Thanks to Sujay R
for reporting!
</action>
<action type="fix">
When the server was returning a multi-page search result where the
client did not explicitly request an encoding via the _format
parameter, a _format parameter was incorrectly added to the paging
links in the response Bundle. This would often explicitly request
XML encoding because of the browser Accept header even though
this was not what the client wanted.
</action>
<action type="add" issue="651">
Enhancement to ResponseHighlighterInterceptor where links in the resource
body are now converted to actual clickable hyperlinks. Thanks to Eugene Lubarsky
for the pull request!
</action>
<action type="add">
BanUnsupportedHttpMethodsInterceptor has been modified so that it now allows
HTTP PATCH to proceed.
</action>
<action type="add" issue="651">
Enhancement to ResponseHighlighterInterceptor so that it now can be configured
to display the request headers and response headers, and individual lines
may be highlighted.
</action>
<action type="fix">
AuthorizationInterceptor did not permit PATCH operations to proceed even
if the user had write access for the resource being patched.
</action>
<action type="fix" issue="682">
Fix an issue in HapiWorkerContext where structure definitions are
not able to be retrieved if they are referred to by their
relative or logical ID. This affects profile tooling such as
StructureMapUtilities. Thanks to Travis Lukach for reporting and
providing a test case!
</action>
<action type="fix" issue="679">
Add link to DSTU3 JavaDocs from documentation index. Thanks
to Vadim Peretokin for the pull request!
</action>
<action type="fix" issue="680">
Fix a typo in the documentation. Thanks to Saren Currie
for the pull request!
</action>
<action type="add" issue="689">
Add a command line flag to the CLI tool to allow configuration of the
server search result cache timeout period. Thanks to Eugene Lubarsky
for the pull request!
</action>
<action type="fix" issue="683">
Correct an issue with the model classes for STU3 where any classes
containing the @ChildOrder annotation (basically the conformance
resources) will not correctly set the order if any of the
elements are a choice type (i.e. named "foo[x]"). Thanks to
GitHub user @CarthageKing for the pull request!
</action>
<action type="fix">
Fix potential deadlock in stale search deleting task in JPA server, as well
as potential deadlock when executing transactions containing nested
searches when operating under extremely heavy load.
</action>
<action type="add">
JPA server transaction operations now put OperationOutcome resources resulting
from actions in
<![CDATA[<code>Bundle.entry.response.outcome</code>]]>
instead of the previous
<![CDATA[<code>Bundle.entry.resource</code>]]>
</action>
<action type="fix" issue="696">
An issue was corrected where search parameters containing negative numbers
were sometimes treated as positive numbers when processing the search. Thanks
to Keith Boone for reporting and suggesting a fix!
</action>
<action type="fix" issue="699">
Fix an unfortunate typo in the custom structures documentation. Thanks to
Jason Owen for the PR!
</action>
<action type="fix" issue="686">
Correct an issue in the validator (DSTU3/R4) where elements were not always
correctly validated if the element contained only a profiled extension. Thanks
to Sébastien Rivière for the pull request!
</action>
<action type="add" issue="701">
Testing UI now has a dropdown for modifiers on token search. Thanks
to GitHub user @dconlan for the pull request!
</action>
<action type="add" issue="688">
When parsing an incomplete ID with the form <![CDATA[<code>http://my.org/Foo</code>]]> into
IdDt and IdType objects, the Foo portion will now be treated as the resource type.
Previously my.org was treated as the resource type and Foo was treated as the ID. Thanks
to GitHub user @CarthageKing for the pull request!
</action>
<action type="fix" issue="695">
Extensions on ID datatypes were not parsed or serialized correctly. Thanks to
Stephen Rivière for the pull request!
</action>
<action type="fix" issue="710">
Fix a bug in REST Hook Subscription interceptors which prevented subscriptions
from being activated. Thanks to Jeff Chung for the pull request!
</action>
<action type="fix" issue="708">
Fix broken links in usage pattern diagram on website. Thanks to
Pascal Brandt for the pull request!
</action>
<action type="fix" issue="706">
Fix incorrect FHIR Version Strings that were being outputted and verified in the
client for some versions of FHIR. Thanks to Clayton Bodendein for the
pull request!
</action>
<action type="add">
Add a new constructor to SimpleRequestHeaderInterceptor which allows a complete header
to be passed in (including name and value in one string)
</action>
<action type="add">
REST Hook subscriptions now honour the Subscription.channel.header field
</action>
<action type="add">
DSTU2 validator has been enhanced to do a better job handling
ValueSets with expansions pointing to other ValueSets
</action>
<action type="fix">
REST HOOK subscriptions now use HTTP PUT if there is a payload type
specified, regardless of whether the source event was a create or an
update
</action>
<action type="add" issue="712">
Add appropriate import statements for logging to JPA demo code. Thanks to
Rob Hausam for the pull request!
</action>
<action type="add" issue="700">
Add some browser performance logging to ResponseHighlightingInterceptor. Thanks
to Eugene Lubarsky for the pull request, and for convincing James not to
optimize something that did not need optimizing!
</action>
<action type="add">
A new config property has been added to the JPA seerver DaoConfig called "setAutoCreatePlaceholderReferenceTargets".
This property causes references to unknown resources in created/updated resources to have a placeholder
target resource automatically created.
</action>
<action type="add">
The server LoggingInterceptor has had a variable called
<![CDATA[<code>processingTimeMillis</code>]]> which logs the number
of milliseconds the server took to process a given request since
HAPI FHIR 2.5, but this was not documented. This variable has now been
documented as a part of the available features.
</action>
<action type="add">
A new experimental feature has been added to the JPA server which allows
you to define certain search parameter combinations as being resource keys,
so that a database constraint will prevent more than one resource from
having a matching pair
</action>
<action type="add">
When using the client LoggingInterceptor in non-verbose mode, the
log line showing the server's response HTTP status will now also include
the returned
<![CDATA[<code>Location</code>]]> header value as well
</action>
<action type="add">
A new flag has been add to the CLI upload-definitions command
"-e" which allows skipping particular resources
</action>
<action type="add">
An issue in JPA server has been corrected where if a CodeSystem
resource was deleted, it was not possible to create a new resource
with the same URI as the previous one
</action>
<action type="fix">
When uploading a Bundle resource to the server (as a collection or
document, not as a transaction) the ID was incorrectly stripped from
resources being saved within the Bundle. This has been corrected.
</action>
<action type="add">
Subscriptions in JPA server now support "email" delivery type through the
use of a new interceptor which handles that type
</action>
<action type="add">
JPA server can now be configured to not support
<![CDATA[<code>:missing</code>]]> modifiers, which
increases write performance since fewer indexes are written
</action>
<action type="add">
A new JPA configuration option has been added to the DaoConfig which allows
support for the <![CDATA[<code>:missing</code>]]> search parameter modifier
to be enabled or disabled, and sets the default to DISABLED.
<![CDATA[<br/><br/>]]>
Support for this parameter causes many more index rows to be inserted in the database,
which has a significant impact on write performance. A future HAPI update may allow these
rows to be written asynchronously in order to improve this.
</action>
</release>
<release version="2.5" date="2017-06-08">
<action type="fix">
<![CDATA[
This release includes significant performance enhancements for the
JPA server. Most importantly, the way that searches are performed
has been re-written to allow the server to perform better when
the database has a large number of results in it. The following
enhancements have been made:
<br/><br/>
<ul>
<li>
Searches with multiple search parameters of different
datatypes (e.g. find patients by name and date of birth)
were previously joined in Java code, now the join is
performed by the database which is faster
</li>
<li>
Searches which returned lots of results previously has all
results streamed into memory before anything was returned to
the client. This is particularly slow if you do a search for
(say) "get me all patients" since potentially thousands or
even millions of patients' IDs were loaded into memory
before anything gets returned to the client. HAPI FHIR
now has a multithreaded search coordinator which returns
results to the client as soon as they are available
</li>
<li>
Search results will be cached and reused (so that if a client
does two searches for "get me all patients matching FOO"
with the same FOO in short succession, we won't query the DB
again but will instead reuse the cached results). Note that
this can improve performance, but does mean that searches can
return slightly out of date results. Essentially what this means
is that the latest version of individual resources will always
be returned despite this cacheing, but newly created resources
that should match may not be returned until the cache
expires. By default this cache has been set to one minute,
which should be acceptable for most real-world usage, but
this can be changed or disabled entirely.
</li>
<li>
Updates which do not actually change the contents of the resource
can optionally be prevented from creating a new version
of the resource in the database
</li>
</ul>
<br/><br/>
Existing users should delete the
<code>HFJ_SEARCH</code>,
<code>HFJ_SEARCH_INCLUDE</code>,
and
<code>HFJ_SEARCH_RESULT</code>
tables from your database before upgrading, as the structure of these tables
has changed and old search results can not be reused.
]]>
</action>
<action type="fix" issue="590">
AuthorizationInterceptor did not correctly handle paging requests
(e.g. requests for the second page of results for a search operation).
Thanks to Eeva Turkka for reporting!
</action>
<action type="add">
Add configuration property to DSTU3 FhirInstanceValidator to
allow client code to change unknown extension handling behaviour.
</action>
<action type="fix" issue="630">
Fix concurrency issues in FhirContext that were causing issues when
starting a context up on Android. Thanks to GitHub issue @Jaypeg85 for
the pull request!
</action>
<action type="fix">
Fix an issue in the JPA server if a resource has been previously
saved containing vocabulary that is no longer valid. This only really
happened if you were using a non-final version of FHIR (e.g. using DSTU3
before it was finalized) but if you were in this situation, upgrading HAPI
could cause you to have old codes that no longer exist in your database. This
fix prevents these from blocking you from accesing those resources.
</action>
<action type="add">
CLI now defaults to DSTU3 mode if no FHIR version is specified
</action>
<action type="add">
Server and annotation-client @History annotation now allows DSTU3+ resource
types in the type= property
</action>
<action type="fix" issue="563">
JSON Parser gave a very unhelpful error message (Unknown attribute 'value' found during parse)
when a scalar value was found in a spot where an object is expected. This has been corrected to
include much more information. Thanks to GitHub user @jasminas for reporting!
</action>
<action type="add">
DaoConfig#setInterceptors() has been un-deprecated. It was previously deprecated as
we thought it was not useful, but uses have been identified so it turns out this method
will live after all. Interceptors registered to this method will now be treated
appropriately if they implement IServerOperationInterceptor too.
</action>
<action type="fix">
JPA server did not correctly support searching on a custom search parameter whose
path pointed to an extension, where the client used a chained value.
</action>
<action type="fix">
Fix issue where the JSON parser sometimes did not encode DSTU3 extensions on the root of a
resource which have a value of type reference.
</action>
<action type="add">
Server now respects the If-Modified-Since header and will return an HTTP 304 if appropriate
for read operations.
</action>
<action type="fix">
JPA server did not correctly process :missing qualifier on date parameters
</action>
<action type="fix" issue="633">
AppacheHttpClient did not always respect the charset in the response
Content-Type header. Thanks to Gijsbert van den Brink for the pull request!
</action>
<action type="fix" issue="636">
Fix XhtmlParser to correctly handle hexadecimal escaped literals. Thanks to
Gijsbert van den Brink for the Pull Request!
</action>
<action type="add">
JPA server now has configurable properties that allow referential integrity
to be disabled for both writes and deletes. This is useful in some cases
where data integrity is not wanted or not possible. It can also be useful
if you want to delete large amounts of interconnected data quickly.
<![CDATA[<br/><br/>]]>
A corresponding flag has been added to the CLI tool as well.
</action>
<action type="fix">
JPA server did not correctly support searching on a custom search parameter whose
path pointed to an extension, where the client used a chained value.
</action>
<action type="fix">
Fix dependency on commons-codec 1.4 in hapi-fhir-structures-dstu3, which was
preventing this library from being used on Android because Android includes
an older version of commons-codec.
</action>
<action type="fix">
JPA server failed to index search parameters on paths containing a decimal
data type
</action>
<action type="fix">
Validator incorrectly rejected references where only an identifier was populated
</action>
<action type="fix" issue="649">
Make error handler in the client more tolerant of errors where no response has
been received by the client when the error happens. Thanks to GitHub
user maclema for the pull request!
</action>
<action type="add">
Add a check in JPA server that prevents completely blank tags, profiles, and security labels
from being saved to the database. These were filtered out anyhow when the
result was returned back to the client but they were persisted which
just wasted space.
</action>
<action type="fix" issue="664">
Loading the build-in profile structures (StructureDefinition, ValueSet, etc) is now done in
a synchronized block in order to prevent multiple loads happening if the server processes
multiple validations in parallel threads right after startup. Previously a heavy load could
cause the server to run out of memory and lock up. Thanks to Karl M Davis
for analysis and help fixing this!
</action>
<action type="fix" issue="652">
Fix bad ValueSet URL in DeviceRequest profile definition for STU3 which
was preventing the CLI from uploading definitions correctly. Thanks to
Joel Schneider for the Pull Request!
</action>
<action type="add" issue="656">
Improve handling in JPA server when doing code:above and code:below
searches to use a disjunction of AND and IN in order to avoid failures
under certain conditions. Thanks to Michael Lawley for the pul request!
</action>
<action type="fix" issue="660">
Fix an error where the JPA server sometimes failed occasional requests
with a weird NullPointerException when running under very large concurrent
loads. Thanks to Karl M. Davis for reporting, investigating, and ultimately
finding a solution!
</action>
</release>
<release version="2.4" date="2017-04-19">
<action type="add">
This release brings the DSTU3 structures up to FHIR R3 (FHIR 3.0.1) definitions. Note that
there are very few changes between the DSTU3 structures in HAPI FHIR 2.3 and
the ones in HAPI FHIR 2.4 since the basis for the DSTU3 structures in HAPI FHIR
2.3 was the R3 QA FHIR version (1.9.0) but this is the first release of
HAPI FHIR to support the final/complete R3 release.
</action>
<action type="add">
Bump the version of a few dependencies to the
latest versions (dependent HAPI modules listed in brackets):
<![CDATA[
<ul>
<li>Hibernate (JPA): 5.2.7 -&gt; 5.2.9</li>
<li>Hibernate Search (JPA): 5.5.7.CR1 -&gt; 5.2.7.Final</li>
<li>Hibernate Validator (JPA): 5.3.4 -&gt; 5.4.1</li>
<li>Spring (JPA): 4.3.6 -&gt; 4.3.7</li>
<li>Gson (Core): 2.7 -&gt; 2.8.0</li>
<li>Guava (JPA): 19.0 -&gt; 21.0</li>
<li>SLF4j (Core): 1.7.21 -&gt; 1.7.25</li>
<li>Logback (Core): 1.1.7 -&gt; 1.2.2</li>
</ul>
]]>
</action>
<action type="add" issue="602">
hapi-fhir-jpaserver-example now includes the
<![CDATA[<code>Prefer</code>]]> header in the list of
CORS headers. Thanks to GitHub user @elnin0815 for
the pull request!
</action>
<action type="add">
AuthorizationInterceptor can now allow make read or write
authorization decisions on a resource by instance ID
</action>
<action type="fix" issue="208">
Remove SupportingDocumentation resource from DSTU2 structures. This isn't
actually a resource in FHIR DSTU2 and its inclusion causes errors on clients
that don't understand what it is. Thanks to Travis Cummings and Michele Mottini for pointing this out.
</action>
<action type="fix" issue="607">
Web testing UI displayed an error when a transaction was pasted into the UI
for a DSTU2 server. Thanks to Suresh Kumar for reporting!
</action>
<action type="add">
DaoConfig#setAllowInlineMatchUrlReferences() now defaults to
<![CDATA[<code>true</code>]]> since inline conditional references
are now a part of the FHIR specification. Thanks to Jan Dědek for
pointing this out!
</action>
<action type="add" issue="609">
hapi-fhir-jpaserver-base now exposes a
<![CDATA[<code>FhirInstanceValidator</code> bean named <code>"myInstanceValidatorDstu2"</code>]]>
for DSTU2. A similar bean for DSTU3 was previously implemented.
</action>
<action type="add" issue="453">
hapi-fhir-jpaserver-example project now defaults to STU3 mode instead of
the previous DSTU2. Thanks to Joel Schneider for the pull request!
</action>
<action type="add" issue="534">
JPA server now has a setting on the DaoConfig to force it to treat
certain reference URLs or reference URL patterns as logical URLs instead
of literal ones, meaning that the server will not try to resolve these
URLs. Thanks to Eeva Turkka for the suggestion!
</action>
<action type="add">
Add a utility method to JPA server:
<![CDATA[<code>IFhirResourceDao#removeTag(IIdType, TagTypeEnum, String, String)</code>]]>. This allows client code to remove tags
from a resource without having a servlet request object in context.
</action>
<action type="fix">
JPA server was unable to process custom search parameters where
the path pointed to an extension containing a reference. Thanks
to Ravi Kuchi for reporting!
</action>
<action type="fix" issue="623">
Servers in DSTU2.1 mode were incorrectly using the legacy mimetypes instead
of the new STU3 ones. Thanks to Michael Lawley for the pull request!
</action>
<action type="add" issue="624">
Add an option to ParserOptions that specifies that when parsing a bundle, the
ID found in the Bundle.entry.fullUrl should not override the ID found
in the Resource.id field. Technically these fields must always supply the
same ID in order for a server to be considered conformant, but this option allows
you to deal with servers which are behaving badly. Thanks to
GitHub user CarthageKing for the pul request!
</action>
<action type="fix" issue="617">
Remove unneccesary whitespace in the text areas on the testing
web UI. Thanks to GitHub user @elnin0815 for the pull request!
</action>
<action type="add" issue="613">
In JAX-RS server it is now possible to change the server exception handler
at runtime without a server restart.
Thanks to Sebastien Riviere for the
pull request!
</action>
<action type="fix" issue="610">
Fix a potential race condition when the FhirContext is being accessed by many threads
at the same time right as it is initializing. Thanks to Ben Spencer for the
pull request!
</action>
</release>
<release version="2.3" date="2017-03-18">
<action type="add">
Bump the version of a few dependencies to the
latest versions (dependent HAPI modules listed in brackets):
<![CDATA[
<ul>
<li>Hibernate (JPA): 5.1.0 -&gt; 5.2.7</li>
<li>Hibernate Search (JPA): 5.5.4 -&gtp; 5.7.0.CR1</li>
<li>Hibernate Validator (JPA): 5.2.4 -&gtp; 5.3.4</li>
<li>Spring (JPA): 4.3.1 -&gt; 4.3.6</li>
</ul>
]]>
</action>
<action type="add">
The JPA server now supports custom search parameters in DSTU3
mode. This allows users to create search parameters which contain
custom paths, or even override and disable existing search
parameters.
</action>
<action type="fix">
CLI example uploader couldn't find STU3 examples after CI server
was moved to build.fhir.org
</action>
<action type="fix">
Fix issue in JPA subscription module that prevented purging stale
subscriptions when many were present on Postgres
</action>
<action type="fix" issue="532">
Server interceptor methods were being called twice unnecessarily
by the JPA server, and the DaoConfig interceptor registration
framework was not actually useful. Thanks to GitHub user
@mattiuusitalo for reporting!
</action>
<action type="fix" issue="503">
AuthorizationInterceptor on JPA server did not correctly
apply rules on deleting resources in a specific compartment
because the resource metadata was stripped by the JPA server
before the interceptor could see it. Thanks to
Eeva Turkka for reporting!
</action>
<action type="fix" issue="519">
JPA server exported CapabilityStatement includes
double entries for the _id parameter and uses the
wrong type (string instead of token). Thanks to
Robert Lichtenberger for reporting!
</action>
<action type="add" issue="504">
Custom resource types which extend Binary must not
have declared extensions since this is invalid in
FHIR (and HAPI would just ignore them anyhow). Thanks
to Thomas S Berg for reporting!
</action>
<action type="add">
Standard HAPI zip/tar distributions did not include the project
sources and JavaDoc JARs. Thanks to Keith Boone for pointing
this out!
</action>
<action type="fix">
Server AuthorizationInterceptor always rejects history operation
at the type level even if rules should allow it.
</action>
<action type="fix">
JPA server terminology service was not correctly validating or expanding codes
in SNOMED CT or LOINC code systems. Thanks to David Hay for reporting!
</action>
<action type="fix" issue="539">
Attempting to search for an invalid resource type (e.g. GET base/FooResource) should
return an HTTP 404 and not a 400, per the HTTP spec. Thanks to
GitHub user @CarthageKing for the pull request!
</action>
<action type="fix" issue="544">
When parsing a Bundle containing placeholder fullUrls and references
(e.g. "urn:uuid:0000-0000") the resource reference targets did not get
populated with the given resources. Note that as a part of this
change, <![CDATA[<code>IdType</code> and <code>IdDt</code>]]> have been modified
so that when parsing a placeholder ID, the complete placeholder including the
"urn:uuid:" or "urn:oid:" prefix will be placed into the ID part. Previously,
the prefix was treated as the base URL, which led to strange behaviour
like the placeholder being treated as a real IDs. Thanks to GitHub
user @jodue for reporting!
</action>
<action type="add">
Declared extensions with multiple type() options listed in the @Child
annotation caused a crash on startup. Now this is supported.
</action>
<action type="add">
STU3 XHTML parser for narrative choked if the narrative contained
an <![CDATA[<code>&amp;rsquot;</code>]]> entity string.
</action>
<action type="fix" issue="538">
When parsing a quantity parameter on the server with a
value and units but no system (e.g.
<![CDATA[<code>GET [base]/Observation?value=5.4||mg</code>]]>)
the unit was incorrectly treated as the system. Thanks to
@CarthageKing for the pull request!
</action>
<action type="533">
Correct a typo in the JPA ValueSet ResourceProvider which prevented
successful operation under Spring 4.3. Thanks to
Robbert van Waveren for the pull request!
</action>
<action type="remove">
Deprecate the method
<![CDATA[<code>ICompositeElement#getAllPopulatedChildElementsOfType(Class)</code>]]>
as it is no longer used by HAPI and is just an annoying step
in creating custom structures. Thanks to Allan Bro Hansen
for pointing this out.
</action>
<action type="fix" issue="547">
CapturingInterceptor did not buffer the response meaning
that in many circumstances it did not actually capture
the response. Thanks to Jenny Syed of Cerner for
the pull request and contribution!
</action>
<action type="fix" issue="548">
Clean up dependencies and remove Eclipse project files from git. Thanks to
@sekaijin for the pull request!
</action>
<action type="fix">
When performing a conditional create in a transaction in JPA server,
if a resource already existed matching the conditional expression, the
server did not change the version of the resource but did update the body
with the passed in body. Thanks to Artem Sopin for reporting and providing a test
case for this!
</action>
<action type="fix">
Client revincludes did not include the :recurse modifier. Thanks to
Jenny Meinsma for pointing this out on Zulip!
</action>
<action type="add">
JPA server did not return an OperationOutcome in the response for
a normal delete operation.
</action>
<action type="fix">
Fix an issue in JPA server where _history results were kept in memory instead
of being spooled to the database as they should be. Note that as a part of this fix
a new method was added to
<![CDATA[<code>IBundleProvider</code> called <code>getUuid()</code>]]>. This
method may return <![CDATA[<code>null</code>]]> in any current cases.
</action>
<action type="fix">
Expanding a ValueSet in JPA server did not correctly apply
<![CDATA[<code>?filter=</code>]]> parameter when the ValueSet
being expanded had codes included explicitly (i.e. not by
is-a relationship). Thanks to David Hay for reporting!
</action>
<action type="fix">
JPA validator incorrectly returned an HTTP 400 instead of an HTTP 422 when
the resource ID was not present and required, or vice versa. Thanks to
Brian Postlethwaite for reporting!
</action>
<action type="fix">
When using an annotation based client, a ClassCastException would
occur under certain circumstances when the response contained
contained resources
</action>
<action type="fix">
JPA server interceptor methods for create/update/delete provided
the wrong version ID to the interceptors
</action>
<action type="add">
A post-processing hook for subclasses of BaseValidatingInterceptor is now available.
</action>
<action type="add" issue="585">
AuthorizationInterceptor can now authorize (allow/deny) extended operations
on instances and types by wildcard (on any type, or on any instance)
</action>
<action type="add" issue="595">
When RequestValidatingInterceptor is used, the validation results
are now populated into the OperationOutcome produced by
create and update operations
</action>
<action type="add" issue="542">
Add support for the $process-message operation to fluent client.
Thanks to Hugo Soares for the pull request!
</action>
<action type="add" issue="543">
Parser can now be configured when encoding to use a specific
base URL for extensions. Thanks to Sebastien Riviere for the
pull request!
</action>
<action type="fix" issue="568">
Correct the resource paths for the DSTU2.1 validation resources,
allowing the validator to correctly work against those structures.
Thanks to Michael Lawley for the pull request!
</action>
<action type="fix" issue="551">
XML Parser failed to parse large field values (greater than 512 Kb)
on certain platforms where the StAX parser was overridden. Thanks to
GitHub user @Jodue for the pull request!
</action>
<action type="add" issue="575">
Remove an unneccesary database flush when saving large code systems to
the JPA database, improving performance of this operation. Thanks to
Joel Schneider for the pull request and analysis!
</action>
<action type="add">
A new post-processing hook for subclasses of BaseValidatingInterceptor is now
available. The hook exposes the request details on validation failure prior to throwing an
UnprocessableEntityException.
</action>
</release>
<release version="2.2" date="2016-12-20">
<action type="add">
Bump the version of a few dependencies to the
latest versions (dependent HAPI modules listed in brackets):
<![CDATA[
<ul>
<!--<li>spring (JPA): 4.3.1 -&gt; 4.3.4</li>-->
<li>Derby (CLI): 10.12.1.1 -&gt; 10.13.1.1</li>
<li>Jetty (CLI): 9.3.10.v20160621 -&gt; 9.3.14.v20161028</li>
<li>JAnsi (CLI): 1.13 -&gt; 1.14</li>
<li>Phloc Commons (SCH Validator): 4.4.5 -&gt; 4.4.6</li>
</ul>
]]>
</action>
<action type="fix">
Fix issue in AuthorizationIntetceptor where
transactions are blocked even when they
should not be
</action>
<action type="fix">
Fix regression in HAPI FHIR 2.1 JPA
server where some search parameters on
metadata resources did not appear
(e.g. "StructureDefinition.url"). Thanks
to David Hay for reporting!
</action>
<action type="add">
Add ability to JPA server for disabling stale search
expiry. This is useful if you are deploying the server
to a cluster.
</action>
<action type="fix" issue="495">
RestfulServer with no explicitly set FhirContext
fails to detect the presents of DSTU3 structures. Thanks
to GitHub user @vijayt27 for reporting!
</action>
<action type="add">
As the
<![CDATA[<a href="https://github.com/eBay/cors-filter">eBay CORS interceptor</a>]]>
project
has gone dormant, we have introduced a new
HAPI server interceptor which can be used to implement CORS support
instead of using the previously recommended Servlet Filter. All server
examples as well as the CLI have been switched to use this new interceptor.
See the
<![CDATA[<a href="./doc_cors.html">CORS Documentation</a>]]>
for more information.
</action>
<action type="fix" issue="480">
Make the parser configurable so that when
parsing an invalid empty value (e.g.
<![CDATA[<code>{"status":""}</code>]]>) the
parser will either throw a meaningful exception
or log a warning depending on the configured
error handler.
</action>
<action type="fix" issue="276">
Fix issue when serializing resources that have
contained resources which are referred to
from multiple places. Sometimes when serializing
these resources the contained resource section
would contain duplicates. Thanks to Hugo Soares
and Stefan Evinance for reporting and providing
a test case!
</action>
<action type="add" issue="518">
Allow client to gracefully handle running in DSTU3 mode
but with a structures JAR that does not contain a
CapabilityStatement resource. Thanks to Michael Lawley
for the pull request!
</action>
<action type="fix">
Fix a crash in JPA server when searching using an _include if _include targets are
external references (and therefore can't be loaded
by the server). Thanks to Hannes Ulrich for reporting!
</action>
<action type="fix">
HAPI FHIR CLI failed to delete a file when uploading
example resources while running under Windows.
</action>
<action type="fix" issue="521">
Server should reject update if the resource body
does not contain an ID, or the ID does not match
the request URL. Thanks to Jim Steel for reporting!
</action>
<action type="fix" issue="500">
Web Testing UI's next and previous buttons for paging
through paged results did not work after the migration
to using Thymeleaf 3. Thanks to GitHub user @gsureshkumar
for reporting!
</action>
<action type="add" issue="525">
When parsing invalid enum values in STU3,
report errors through the parserErrorHandler,
not by throwing an exception. Thanks to
Michael Lawley for the pull request!
</action>
<action type="add" issue="516">
When parsing DSTU3 resources with enumerated
types that contain invalid values, the parser will now
invoke the parserErrorHandler. For example, when parsing
<![CDATA[
<code>{"resourceType":"Patient", "gender":"foo"}</code>
]]>
the previous behaviour was to throw an InvalidArgumentException.
Now, the parserErrorHandler is invoked. In addition, thw
LenientErrorHandler has been modified so that this one case
will result in a DataFormatException. This has the effect
that servers which receive an invalid enum velue will return
an HTTP 400 instead of an HTTP 500. Thanks to Jim
Steel for reporting!
</action>
<action type="add" issue="520">
DSTU3 context now pulls the FHIR version from the actual
model classes. Thanks to Michael Lawley for the pull request!
</action>
<action type="add">
Enhancements to the tinder-plugin's generic template features
of the <![CDATA[<i>generate-multi-files</i> and <i>generate-single-file</i>
Maven goals as well as the Ant <i>hapi-tinder</i> task.
<ul>
<li>Provides the full Tinder data model by adding composites, valuesets, and profiles to resourcesw.</li>
<li>Supports generating files for resources, composites, valuesets, and profiles</li>
<li>Supports Velocimacro files outside the tinder-plugin JAR</li>
<li>Provides filename prefix as well as suffix properties</li>
<li>Can specify any of the Velocity configuration parameters such as
<i>macro.provide.scope.control</i> which allows safe macro recursion</li>
<li>Templates can now drill down into the referenced children for a ResourceBlockCopy</li>
<li>Normalization of properties across all three generic tasks</li>
</ul>
]]>
</action>
<action type="fix" issue="523">
Fix ordering of validator property handling when an element
has a name that is similar to a shorter name[x] style name.
Thanks to CarthageKing for the pull request!
</action>
<action type="add" issue="510">
Add a docker configuration to the hapi-fhir-jpaservr-example
module. Thanks to Gijsbert van den Brink for the pull request!
</action>
<action type="add" issue="507">
Add utility constructors to MoneyDt. Thanks to James Ren for the
contribution!
</action>
<action type="fix" issue="528">
AuthorizationInterceptor was failing to allow read requests to pass
when a rule authorized those resources by compartment. Thanks to
GitHub user @mattiuusitalo for reporting and supplying
a test case!
</action>
<action type="fix">
Correct a typo in client
<![CDATA[<code>IHttpRequest</code>]]> class: "bufferEntitity" should be "bufferEntity".
</action>
<action type="add">
ErrorHandler is now called (resulting in a warning by default, but can also be an exception) when arsing JSON if
the resource ID is not a JSON string, or an object is found where an array is expected (e.g. repeating field). Thanks
to Jenni Syed of Cerner for providing a test case!
</action>
<action type="fix">
Fix Web Testing UI to be able to handle STU3 servers which
return CapabilityStatement instead of the previously used
"Conformance" resource
</action>
<action type="fix">
CLI example uploader couldn't find STU3 examples after CI server
was moved to build.fhir.org
</action>
<action type="fix">
Fix issue in JPA subscription module that prevented purging stale
subscriptions when many were present on Postgres
</action>
<action type="fix" issue="532">
Server interceptor methods were being called twice unnecessarily
by the JPA server, and the DaoConfig interceptor registration
framework was not actually useful. Thanks to GitHub user
@mattiuusitalo for reporting!
</action>
<action type="fix" issue="503">
AuthorizationInterceptor on JPA server did not correctly
apply rules on deleting resources in a specific compartment
because the resource metadata was stripped by the JPA server
before the interceptor could see it. Thanks to
Eeva Turkka for reporting!
</action>
<action type="fix" issue="519">
JPA server exported CapabilityStatement includes
double entries for the _id parameter and uses the
wrong type (string instead of token). Thanks to
Robert Lichtenberger for reporting!
</action>
<action type="add" issue="504">
Custom resource types which extend Binary must not
have declared extensions since this is invalid in
FHIR (and HAPI would just ignore them anyhow). Thanks
to Thomas S Berg for reporting!
</action>
<action type="add">
Standard HAPI zip/tar distributions did not include the project
sources and JavaDoc JARs. Thanks to Keith Boone for pointing
this out!
</action>
<action type="fix">
Server AuthorizationInterceptor always rejects history operation
at the type level even if rules should allow it.
</action>
<action type="fix">
JPA server terminology service was not correctly validating or expanding codes
in SNOMED CT or LOINC code systems. Thanks to David Hay for reporting!
</action>
<action type="fix" issue="539">
Attempting to search for an invalid resource type (e.g. GET base/FooResource) should
return an HTTP 404 and not a 400, per the HTTP spec. Thanks to
GitHub user @CarthageKing for the pull request!
</action>
<action type="fix" issue="544">
When parsing a Bundle containing placeholder fullUrls and references
(e.g. "urn:uuid:0000-0000") the resource reference targets did not get
populated with the given resources. Note that as a part of this
change, <![CDATA[<code>IdType</code> and <code>IdDt</code>]]> have been modified
so that when parsing a placeholder ID, the complete placeholder including the
"urn:uuid:" or "urn:oid:" prefix will be placed into the ID part. Previously,
the prefix was treated as the base URL, which led to strange behaviour
like the placeholder being treated as a real IDs. Thanks to GitHub
user @jodue for reporting!
</action>
<action type="add">
Declared extensions with multiple type() options listed in the @Child
annotation caused a crash on startup. Now this is supported.
</action>
<action type="add">
STU3 XHTML parser for narrative choked if the narrative contained
an <![CDATA[<code>&amp;rsquot;</code>]]> entity string.
</action>
<action type="fix" issue="538">
When parsing a quantity parameter on the server with a
value and units but no system (e.g.
<![CDATA[<code>GET [base]/Observation?value=5.4||mg</code>]]>)
the unit was incorrectly treated as the system. Thanks to
@CarthageKing for the pull request!
</action>
<action type="533">
Correct a typo in the JPA ValueSet ResourceProvider which prevented
successful operation under Spring 4.3. Thanks to
Robbert van Waveren for the pull request!
</action>
<action type="remove">
Deprecate the method
<![CDATA[<code>ICompositeElement#getAllPopulatedChildElementsOfType(Class)</code>]]>
as it is no longer used by HAPI and is just an annoying step
in creating custom structures. Thanks to Allan Bro Hansen
for pointing this out.
</action>
<action type="fix" issue="547">
CapturingInterceptor did not buffer the response meaning
that in many circumstances it did not actually capture
the response. Thanks to Jenny Syed of Cerner for
the pull request and contribution!
</action>
</release>
<release version="2.1" date="2016-11-11">
<action type="add">
STU3 structure definitions have been updated to the
STU3 latest definitions (1.7.0 - SVN 10129). In
particular, this version supports the new CapabilityStatement
resource which replaces the previous Conformance
resource (in order to reduce upgrade pain, both resource
types are included in this version of HAPI)
</action>
<action type="add">
Bump the version of a few dependencies to the
latest versions (dependent HAPI modules listed in brackets):
<![CDATA[
<ul>
<li>spring-data-orm (JPA): 1.10.2 -&gt; 1.10.4</li>
</ul>
]]>
</action>
<action type="fix">
Fix a fairly significant issue in JPA Server when using the <![CDATA[<code>DatabaseBackedPagingProvider</code>]]>: When paging over the results
of a search / $everything operation, under certain circumstances resources may be missing from the last page of results
that is returned. Thanks to David Hay for reporting!
</action>
<action type="add">
Client, Server, and JPA server now support experimental support
for
<![CDATA[HTTP PATCH]]>
using the XML Patch and JSON Patch syntax as explored during the
September 2016 Baltimore Connectathon. See
<![CDATA[<a href="http://wiki.hl7.org/index.php?title=201609_PATCH_Connectathon_Track_Proposal">this wiki page</a>]]>
for a description of the syntax.
<![CDATA[<br/>]]>
Thanks to Pater Girard for all of his help during the connectathon
in implementing this feature!
</action>
<action type="add">
Android library now uses OkHttp client by default instead
of Apache HttpClient. This should lead to much simpler
support for Android in the future.
</action>
<action type="add">
Both client and server now use the new STU3 mime types by default
if running in STU3 mode (in other words, using an STU3
FhirContext).
</action>
<action type="fix">
In server, when returning a list of resources, the server sometimes failed to add
<![CDATA[<code>_include</code>]]> resources to the response bundle if they were
referred to by a contained reosurce. Thanks to Neal Acharya for reporting!
</action>
<action type="fix">
Fix regression in web testing UI where "prev" and "next" buttons don't work
when showing a result bundle
</action>
<action type="fix">
JPA server should not attempt to resolve built-in FHIR StructureDefinitions from the
database (this causes a significant performance hit when validating)
</action>
<action type="fix">
BanUnsupportedHttpMethodsInterceptor was erroring out when a client
attempts HTTP HEAD requests
</action>
<action type="fix">
Conditional URLs in JPA server (e.g. for delete or update) did not support the
<![CDATA[<code>_has</code>]]> parameter
</action>
<action type="add" issue="440">
Remove Maven dependency on Saxon library, as it is not actually used. Thanks
to Lem Edmondson for the suggestion!
</action>
<action type="fix" issue="444">
Times before 1970 with fractional milliseconds were parsed incorrectly. Thanks
to GitHub user @CarthageKing for reporting!
</action>
<action type="fix" issue="448">
Prevent crash in parser when parsing resource
with multiple profile declarations when
default type for profile is used. Thanks to
Filip Domazet for the pull request!
</action>
<action type="fix" issue="445">
STU3 servers were adding the old MimeType
strings to the
<![CDATA[<code>Conformance.format</code>]]>
part of the generated server conformance
statement
</action>
<action type="fix" issue="446">
When performing an update using the client on a resource that
contains other resources (e.g. Bundle update), all child resources in the
parent bundle were incorrectly given the ID of the parent. Thanks
to Filip Domazet for reporting!
</action>
<action type="add">
STU clients now use an Accept header which
indicates support for both the old MimeTypes
(e.g. <![CDATA[<code>application/xml+fhir</code>]]>)
and the new MimeTypes
(e.g. <![CDATA[<code>application/fhir+xml</code>]]>)
</action>
<action type="fix">
JPA server now sends correct
<![CDATA[<code>HTTP 409 Version Conflict</code>]]>
when a
DELETE fails because of constraint issues, instead of
<![CDATA[<code>HTTP 400 Invalid Request</code>]]>
</action>
<action type="fix">
Server history operation did not populate the Bundle.entry.request.url
field, which is required in order for the bundle to pass validation.
Thanks to Richard Ettema for spotting this!
</action>
<action type="add">
Add a new method to the server interceptor framework which will be
called after all other processing is complete (useful for performance
tracking). The server LoggingInterceptor has been switched to using this
method which means that log lines will be created when processing is finished,
instead of when it started.
</action>
<action type="fix">
STU3 clients were not sending the new mimetype values in the
<![CDATA[<code>Content-Type</code>]]> header. Thanks to
Claude Nanjo for pointing this out!
</action>
<action type="fix">
JAX-RS server was not able to handle the new mime types defined
in STU3
</action>
<action type="fix">
JPA server did not handle custom types when being called
programatically (I.e. not through HTTP interface). Thanks to
Anthony Mei for pointing this out!
</action>
<action type="fix">
CLI was not correctly able to upload DSTU2 examples to any server
</action>
<action type="fix">
STU3 validator has been upgrated to include fixes made since the
1.6.0 ballot
</action>
<action type="fix">
Prevent JPA server from creating a bunch of
FhirContext objects for versions of FHIR that
aren't actually being used
</action>
<action type="fix" issue="443">
XhtmlNode.equalsDeep() contained a bug which caused resources
containing a narrative to always return
<![CDATA[<code>false</code>]]> for STU3
<![CDATA[<code>Resource#equalsDeep()</code>]]>. Thanks to
GitHub user @XcrigX for reporting!
</action>
<action type="fix" issue="441">
JPA server did not correctly process searches for chained parameters
where the chain passed across a field that was a choice between a
reference and a non-reference type (e.g.
<![CDATA[<code>MedicationAdministration.medication[x]</code>]]>.
Thanks to GitHub user @Crudelus for reporting!
</action>
<action type="fix" issue="414">
Handle parsing an extension without a URL more gracefully. In HAPI FHIR 2.0 this caused
a NullPointerException to be thrown. Now it will trigger a warning, or throw a
DataFormatException if the StrictErrorHandler is configured on the parser.
</action>
<action type="fix">
Calling a HAPI server URL with a chain on a parameter that shouldn't accept
chains (e.g.
<![CDATA[<code>GET [base]/Patient?name.foo=smith</code>]]>)
did not return an error and instead just ignored the chained part
and treated the parameter as though it did not have the chain. This
led to confusing and potentially unsafe behaviour. This has been
corrected to return an error to the client. Thanks to
Kevin Tallevi for finding this!
</action>
<action type="fix" issue="411">
Fix #411 - Searching by <![CDATA[<code>POST [base]/_search</code>]]> with urlencoded parameters doesn't work correctly if
interceptors are accessing the parameters and there is are also
parameters on the URL. Thanks to Jim Steel for reporting!
</action>
<action type="add">
Fluent client can now return types other than Parameters
when invoking operations.
</action>
<action type="fix">
JPA server shouldn't report a totalCount in Bundle of "-1" when
there are no results
</action>
<action type="fix" issue="454">
JPA server was not correctly normalizing strings with non-latin characters
(e.g. Chinese chars). Thanks to GitHub user @YinAqu for reporting and providing
some great analysis of the issue!
</action>
<action type="add">
Add a new method to ReferenceClientParam which allows you to
pass in a number of IDs by a collection of Strings. Thanks to
Thomas Andersen for the pul request!
</action>
<action type="fix" issue="327">
When encoding a resource in JSON where the resource has
an extension with a value where the value is a reference to a
contained resource, the reference value (e.g. "#1") did not
get serialized. Thanks to GitHub user @fw060 for reporting!
</action>
<action type="fix" issue="464">
ResponseHighlighterInterceptor now pretty-prints responses
by default unless the user has explicitly requested
a non-pretty-printed response (ie.
using <![CDATA[<code>?_pretty=false</code>]]>. Thanks to
Allan Brohansen and Jens Villadsen for the suggestion!
</action>
<action type="add" issue="469">
Add a new JSON library abstraction layer to the JSON parser.
This contribution shouldn't have any end-user impact but does
make it easier to use the JSON parser to generate custom structures
for other purposes, and should allow us to support RDF more
easily at some point. Thanks to Bill Denton for the pull
request and the contribution!
</action>
<action type="add" issue="455">
DSTU1 Bundle encoder did not include the Bundle entry author in
the generated bundle. Thanks to Hannes Venter for the pull
request and contribution!
</action>
<action type="fix">
Remove unused field (myIsContained) from ResourceTable
in JPA server.
</action>
<action type="add">
AuthorizationInterceptor is now a bit more aggressive
at blocking read operations, stopping them on the
way in if there is no way they will be accepted
to the resource check on the way out. In addition
it can now be configured to allow/deny operation
invocations at the instance level on any
instance of a given type
</action>
<action type="fix" issue="472">
STU3 servers were incorrectly returning the
<![CDATA[<code>Content-Location</code>]]>
header instead of the
<![CDATA[<code>Content</code>]]>
header. The former has been removed from the
FHIR specification in STU3, but the
latter got removed in HAPI's code base.
Thanks to Jim Steel for reporting!
</action>
<action type="fix">
Correct several documentation issues. Thanks to Vadim Peretokin
for the pull requests!
</action>
<action type="add">
Remove an unneccesary database flush
from JPA persistence operations
</action>
<action type="add" issue="470">
Add method to fluent client to allow OR search across several
profiles. Thanks to Thomas Andersen for the pull request!
</action>
</release>
<release version="2.0" date="2016-08-30">
<action type="fix">
JSON parsing in HAPI FHIR has been switched from using JSR353 (javax.json) to
using Google Gson. For this reason we are bumping the major release number to
2.0. Theoretically this should not affect projects in any major way, but Gson
does have subtle differences. Two differences which popped up a fair bit in
our own testing:
<![CDATA[
<ul>
<ul>
A space is placed after the : in keys, e.g. what was previously
encoded as <code>"resourceType":"Patient"</code> is now encoded
as <code>"resourceType": "Patient"</code> (this broke a number of
our unit tests with hardcoded resource definitions)
</ul>
<ul>
Trailing content after a valid json resource is rejected by
Gson (it was ignored by the Glassfish parser we were previously
using even though it was invalid)
</ul>
</ul>
]]>
</action>
<action type="add">
STU3 structure definitions have been updated to the
STU3 ballot candidate versions (1.6.0 - SVN 9663)
</action>
<action type="add">
Both client and server now support the new Content Types decided in
<![CDATA[<a href="http://gforge.hl7.org/gf/project/fhir/tracker/?action=TrackerItemEdit&tracker_id=677&tracker_item_id=10199">FHIR #10199</a>]]>.
<![CDATA[<br/><br/>]]>
This means that the server now supports
<![CDATA[<code>application/fhir+xml</code> and <code>application/fhir+json</code>]]>
in addition to the older style
<![CDATA[<code>application/xml+fhir</code> and <code>application/json+fhir</code>]]>.
In order to facilitate migration by implementors, the old style remains the default
for now, but the server will respond using the new style if the request contains it. The
client now uses an <![CDATA[<code>Accept</code>]]> header value which requests both
styles with a preference given to the new style when running in DSTU3 mode.
<![CDATA[<br/><br/>]]>
As a part of this change, the server has also been enhanced so that if a request
contains a Content-Type header but no Accept header, the response will prefer the
encoding specified by the Content-Type header.
</action>
<action type="add">
Bump the version of a few dependencies to the
latest versions (dependent HAPI modules listed in brackets):
<![CDATA[
<ul>
<li>Logback (used in sample projects): 1.1.5 -&gt; 1.1.7</li>
<li>Phloc Commons (used by schematron validator): 4.4.4 -&gt; 4.4.5</li>
<li>Commons-IO: 2.4 -&gt; 2.5</li>
<li>Apache HTTPClient: 4.5.1 -&gt; 4.5.2</li>
<li>Apache HTTPCore: 4.4.4 -&gt; 4.4.5</li>
<li>Jersey (JAX-RS tests): 2.22.2 -&gt; 2.23.1</li>
<li>Spring (JPA, Web Tester): 4.3.0 -&gt; 4.3.1</li>
<!--<li>Hibernate ORM (JPA): 5.1.0 -&gt; 5.2.1</li>-->
<li>Hibernate Search (JPA): 5.5.2 -&gt; 5.5.4</li>
<li>Thymeleaf (Narrative Generator / Web Tester): 2.1.4 -&gt;3.0.1</li>
</ul>
]]>
</action>
<action type="fix">
Fix issue in DSTU1 Bundle parsing where unexpected elements in the bundle resulted in a failure
to parse.
</action>
<action type="fix">
DSTU2 QuestionnaireResponse validator failed with an exception if the
QuestionnaireResponse contained certain groups with no content
</action>
<action type="add" issue="150">
Fluent client should ignore parameter values which are null instead of including
them as <![CDATA[<code>?foo=null</code>]]>
</action>
<action type="fix">
When using <![CDATA[<code>_elements</code>]]> parameter on server, the server was not
automatically adding the <![CDATA[<code>SUBSETTED</code>]]> tag as it should
</action>
<action type="fix">
JPA server should now automatically detect
if Hibernate Search (Lucene) is configured to be
disabled and will not attempt to use it. This
prevents a crash for some operations.
</action>
<action type="add">
A new server interceptor "BanUnsupprtedHttpMethodsInterceptor" has been added
which causes the server to return an HTTP 405 if an unsupported HTTP
verb is received from the client
</action>
<action type="fix" issue="404">
Fix an issue where resource IDs were not correctly set when using
DSTU2 HL7org structures with the JAX-RS module. Thanks to Carlo Mion
for the pull request!
</action>
<action type="fix">
hapi-fhir-testpage-overlay project contained an unneccesary
dependency on hapi-fhir-jpaserver-base module, which resulted in
projects using the overlay having a large number of unnneded
JARs included
</action>
<action type="add" issue="403">
It is not possible to configure both the parser and the context to
preserve versions in resource references (default behaviour is to
strip versions from references). Thanks to GitHub user @cknaap
for the suggestion!
</action>
<action type="fix" issue="409">
<![CDATA[<code>Tag#setCode(String)</code>]]> did not actually set the code it was supposed to
set. Thanks to Tim Tschampel for reporting!
</action>
<action type="fix" issue="401">
JPA server's <![CDATA[<code>/Bundle</code>]]> endpoint cleared
the <![CDATA[<code>Bundle.entry.fullUrl</code>]]> field on stored
bundles, resulting in invalid content being saved. Thanks to Mirjam
Baltus for reporting!
</action>
<action type="fix">
JPA server now returns HTTP 200 instead of HTTP 404 for
conditional deletes which did not find any matches,
per FHIR-I decision.
</action>
<action type="fix">
Client that declares explicitly that it is searching/reading/etc for
a custom type did not automatically parse into that type.
</action>
<action type="add" issue="406">
Allow servers to specify the authentication realm of their choosing when
throwing an AuthenticationException. Thanks to GitHub user @allanbrohansen
for the suggestion!
</action>
<action type="add" issue="416">
Add a new client implementation which uses the
<![CDATA[<a href="http://square.github.io/okhttp/">OkHttp</a>]]>
library as the HTTP client implementation (instead of Apache HttpClient).
This is particularly useful for Android (where HttpClient is a pain) but
could also be useful in other places too.
Thanks to Matt Clarke of Orion Health for the contribution!
</action>
<action type="fix">
Fix a regression when parsing resources that have contained
resources, where the reference in the outer resource which
links to the contained resource sometimes did does not get
populated with the actual target resource instance. Thanks to
Neal Acharya for reporting!
</action>
<action type="add">
hapi-fhir-cli upload-terminology command now has an argument
"-b FOO" that lets you add an authorization header in the form
<![CDATA[<code>Authorization: Bearer FOO</code>]]>
</action>
<action type="fix" issue="423">
Parser failed to successfully encode a custom resource
if it contained custom fields that also used custom
types. Thanks to GitHub user @sjanic for reporting!
</action>
<action type="add">
Inprove handling of _text and _content searches in JPA server to do better
matching on partial strings
</action>
<action type="add">
Servers in STU3 mode will now ignore any ID or VersionID found in the
resource body provided by the client when processing FHIR
<![CDATA[<code>update</code>]]> operations. This change has been made
because the FHIR specification now requires servers to ignore
these values. Note that as a result of this change, resources passed
to <![CDATA[<code>@Update</code>]]> methods will always have
<![CDATA[<code>null</code>]]> ID
</action>
<action type="add">
Add new methods to
<![CDATA[<code>AuthorizationInterceptor</code>]]>
which allow user code to declare support for conditional
create, update, and delete.
</action>
<action type="fix">
When encoding a resource with a reference to another resource
that has a placeholder ID (e.g. urn:uuid:foo), the urn prefix
was incorrectly stripped from the reference.
</action>
<action type="fix">
Servers for STU3 (or newer) will no longer include a
<![CDATA[<code>Location:</code>]]> header on responses for
<![CDATA[<code>read</code>]]> operations. This header was
required in earlier versions of FHIR but has been removed
from the specification.
</action>
<action type="fix" issue="428">
Fix NullPointerException when encoding an extension containing CodeableConcept
with log level set to TRACE. Thanks to Bill Denton for the report!
</action>
<action type="add">
Add two new methods to the parser error handler that let users trap
invalid contained resources with no ID, as well as references to contained
resource that do not exist.
</action>
<action type="add">
Improve performance when parsing resources containing contained resources
by eliminating a step where references were woven twice
</action>
<action type="fix" issue="426">
Parser failed to parse resources containing an extension with a value type of
"id". Thanks to Raphael Mäder for reporting!
</action>
<action type="fix">
When committing a transaction in JPA server
where the transaction contained placeholder IDs
for references between bundles, the placeholder
IDs were not substituted with viewing
resources using the _history operation
</action>
<action type="add">
HAPI root pom shouldn't include animal-sniffer plugin,
since that causes any projects which extend this to
be held to Java 6 compliance.
</action>
</release>
<release version="1.6" date="2016-07-07">
<action type="fix">
Performance has been improved for the initial FhirContext
object creation by avoiding a lot of unnecessary reflection. HAPI FHIR
1.5 had a regression compared to previous releases
and this has been corrected, but other improvements have been
made so that this release is faster than previous releases too.
<![CDATA[<br/><br/>]]>
In addition, a new "deferred scan" mode has been implemented for
even faster initialization on slower environments (e.g. Android).
See the <![CDATA[<a href="./doc_rest_client_http_config.html#performance">performance documentation</a>]]>
for more information.
<![CDATA[<br/><br/>]]>
The following shows our benchmarks for context initialization across several
versions of HAPI:
<![CDATA[
<ul>
<li>Version 1.4: <b>560ms</b></li>
<li>Version 1.5: <b>800ms</b></li>
<li>Version 1.6: <b>340ms</b></li>
<li>Version 1.6 (deferred mode): <b>240ms</b></li>
</ul>
]]>
</action>
<action type="add">
Bump the version of a few dependencies to the
latest versions (dependent HAPI modules listed in brackets):
<![CDATA[
<ul>
<li>Spring (JPA, Web Tester): 4.2.5 -&gt; 4.3.0</li>
<li>Spring-Data (JPA): 1.9.2 -&gt; 1.10.1</li>
<!--<li>Hibernate ORM (JPA): 5.1.0 -&gt; 5.2.0</li>-->
<li>Hibernate Search (JPA): 5.5.2 -&gt; 5.5.3</li>
<li>Jetty (CLI): 9.3.9 -&gt; 9.3.10</li>
</ul>
]]>
</action>
<action type="remove">
Remove some clases that were deprecated over a year ago and have
suitable replacements:
<![CDATA[
<ul>
<li>QualifiedDateParam has been removed, but DateParam may be used instead</li>
<li>PathSpecification has been removedm but Include may be used instead</li>
</ul>
]]>
</action>
<action type="fix" issue="345">
ResponseValidatingInterceptor threw an InternalErrorException (HTTP 500) for operations
that do not return any content (e.g. delete). Thanks to Mohammad Jafari for reporting!
</action>
<action type="fix" issue="342">
REST server now throws an HTTP 400 instead of an HTTP 500 if an operation which takes
a FHIR resource in the request body (e.g. create, update) contains invalid content that
the parser is unable to parse. Thanks to Jim Steel for the suggestion!
</action>
<action type="add">
Deprecate fluent client search operations without an explicit declaration of the
bundle type being used. This also means that in a client
<![CDATA[<code>.search()</code>]]>
operation, the
<![CDATA[<code>.returnBundle(Bundle.class)</code>]]>
needs to be the last statement before
<![CDATA[<code>.execute()</code>]]>
</action>
<action type="add" issue="346">
Server now respects the parameter <![CDATA[<code>_format=application/xml+fhir"</code>]]>
which is technically invalid since the + should be escaped, but is likely to be used. Also,
a parameter of <![CDATA[<code>_format=html</code>]]> can now be used, which
forces SyntaxHighlightingInterceptor to use HTML even
if the headers wouldn't otherwise trigger it.
Thanks to Jim Steel for reporting!
</action>
<action type="fix">
Improve performance when parsing large bundles by fixing a loop over all of the
entries inthe bundle to stitch together cross-references, which was happening once
per entry instead of once overall. Thanks to Erick on the HAPI FHIR Google Group for
noticing that this was an issue!
</action>
<action type="remove">
JSON parser no longer allows the resource ID to be specified in an element called "_id"
(the correct one is "id"). Previously _id was allowed because some early FHIR examples
used that form, but this was never actually valid so it is now being removed.
</action>
<action type="add">
JPA server now allows "forced IDs" (ids containing non-numeric, client assigned IDs)
to use the same logical ID part on different resource types. E.g. A server may now have
both Patient/foo and Obervation/foo on the same server.<![CDATA[<br/><br/>]]>
Note that existing databases will need to modify index "IDX_FORCEDID" as
it is no longer unique, and perform a reindexing pass.
</action>
<action type="fix" issue="350">
When serializing/encoding custom types which replace exsting choice fields by
fixing the choice to a single type, the parser would forget that the
field was a choice and would use the wrong name (e.g. "abatement" instead of
"abatementDateType"). Thanks to Yaroslav Kovbas for reporting and
providing a unit test!
</action>
<action type="fix">
JPA server transactions sometimes created an incorrect resource reference
if a resource being saved contained references that had a display value but
not an actual reference. Thanks to David Hay for reporting!
</action>
<action type="add" issue="352">
When performing a REST Client create or update with
<![CDATA[<code>Prefer: return=representation</code>]]> set,
if the server does not honour the Prefer header, the client
will automatically fetch the resource before returning. Thanks
to Ewout Kramer for the idea!
</action>
<action type="add" issue="354">
DSTU3 structures now have
<![CDATA[<code>setFoo(List)</code>]]>
and
<![CDATA[<code>setGetFooFirstRep()</code>]]>
methods, bringing them back to parity with the HAPI
DSTU2 structures. Thanks to Rahul Somasunderam and
Claude Nanjo for the suggestions!
</action>
<action type="add">
JPA server has now been refactored to use the
new FluentPath search parameter definitions
for DSTU3 resources.
</action>
<action type="add">
RequestValidatingInterceptor and ResponseValidatingInterceptor
both have new method <![CDATA[<code>setIgnoreValidatorExceptions</code>]]>
which causes validator exceptions to be ignored, rather than causing
processing to be aborted.
</action>
<action type="add">
LoggingInterceptor on server has a new parameter
<![CDATA[<code>${requestBodyFhir}</code>]]> which logs the entire request body.
</action>
<action type="add" issue="355">
JAX-RS server module now supports DSTU3 resources (previously it only supported DSTU2). Thanks
to Phillip Warner for implementing this, and providing a pull request!
</action>
<action type="fix" issue="356">
Generated conformance statements for DSTU3 servers did not properly reference their
OperationDefinitions. Thanks
to Phillip Warner for implementing this, and providing a pull request!
</action>
<action type="fix" issue="359">
Properly handle null arrays when parsing JSON resources. Thanks to Subhro for
fixing this and providing a pull request!
</action>
<action type="fix">
STU3 validator failed to validate codes where the
code was a child code within the code system that contained it
(i.e. not a top level code). Thanks to Jon
Zammit for reporting!
</action>
<action type="fix" issue="361">
Restore the setType method in the DSTU1 Bundle
class, as it was accidentally commented out. Thanks
to GitHub user @Virdulys for the pull request!
</action>
<action type="add">
JPA server now supports composite search parameters
where the type of the composite parameter is
a quantity (e.g. Observation:component-code-component-value-quantity)
</action>
<action type="remove">
Remove the Remittance resource from DSTU2
structures, as it is not a real resource and
was causing issues with interoperability
with the .NET client.
</action>
<action type="fix">
CLI tool cache feature (-c) for upload-example task sometimes failed
to write cache file and exited with an exception.
</action>
<action type="fix">
Fix error message in web testing UI when loading pages in a search
result for STU3 endpoints.
</action>
<action type="fix">
When encoding JSON resource, the parser will now always
ensure that XHTML narrative content has an
XHTML namespace declaration on the first
DIV tag. This was preventing validation for
some resources using the official validator
rules.
</action>
<action type="fix">
Server failed to invoke operations when the name
was escaped (%24execute instead of $execute).
Thanks to Michael Lawley for reporting!
</action>
<action type="fix">
JPA server transactions containing a bundle that has multiple entries
trying to delete the same resource caused a 500 internal error
</action>
<action type="fix">
JPA module failed to index search parameters that mapped to a Timing datatype,
e.g. CarePlan:activitydate
</action>
<action type="add">
Add a new option to the CLI run-server command called <![CDATA[<code>--lowmem</code>]]>.
This option disables some features (e.g. fulltext search) in order to allow the
server to start in memory-constrained environments (e.g Raspberry Pi)
</action>
<action type="add">
When updating a resource via an update operation on the server, if the ID of the
resource is not present in the resource body but is present on the URL, this will
now be treated as a warning instead of as a failure in order to be a bit more
tolerant of errors. If the ID is present in the body but does not agree with the
ID in the URL this remains an error.
</action>
<action type="fix">
Server / JPA server date range search params (e.g. Encounter:date) now treat
a single date with no comparator (or the eq comparator) as requiring that the
value be completely contained by the range specified. Thanks to Chris Moesel
for the suggestion.
</action>
<action type="fix">
In server, if a parameter was annotated with the <![CDATA[@Count]]> annotation, the
count would not appear in the self/prev/next links and would not actually be applied
to the search results by the server. Thanks to Jim Steele for letting us know!
</action>
<action type="fix">
Conditional update on server failed to process if the conditional URL did not have any
search parameters that did not start with an underscore. E.g. "Patient?_id=1" failed
even though this is a valid conditional reference.
</action>
<action type="add" issue="363">
JPA server can now be configured to allow external references (i.e. references that
point to resources on other servers). See
<![CDATA[<a href="./doc_jpa.html">JPA Documentation</a>]]> for information on
how to use this. Thanks to Naminder Soorma for the suggestion!
</action>
<action type="fix" issue="366">
When posting a resource to a server that contains an invalid value in a boolean field
(e.g. Patient with an active value of "1") the server should return an HTTP 400, not
an HTTP 500. Thanks to Jim Steel for reporting!
</action>
<action type="fix" issue="364">
Enable parsers to parse and serialize custom resources that contain custom datatypes.
An example has been added which shows how to do this
<![CDATA[<a href="./doc_custom_structures.html">here</a>]]>
</action>
<action type="fix">
JSON parser was incorrectly encoding resource language attribute in JSON as an
array instead of a string. Thanks to David Hay for reporting!
</action>
<action type="add" issue="367">
Sébastien Rivière contributed an excellent pull request which adds a
number of enhancements to JAX-RS module:
<![CDATA[
<ul>
<li>Enable the conditional update and delete</li>
<li>Creation of a bundle provider, and support of the @Transaction</li>
<li>Bug fix on the exceptions handling as some exceptions throw outside bean context were not intercept.</li>
<li>Add the possibility to have the stacktrace in the jaxrsException</li>
</ul>
]]>
</action>
<action type="fix" issue="369">
FhirTerser.cloneInto method failed to clone correctly if the source
had any extensions. Thanks to GitHub user @Virdulys for submitting and
providing a test case!
</action>
<action type="add">
Update DSTU2 InstanceValidator to latest version from upstream
</action>
<action type="fix">
Web Testing UI was not able to correctly post an STU3 transaction
</action>
<action type="fix">
DateTime parser incorrectly parsed times where more than 3 digits of
precision were provided on the seconds after the decimal point
</action>
<action type="add">
Improve error messages when the $validate operation is called but no resource
is actually supplied to validate
</action>
<action type="remove">
DSTU2+ servers no longer return the Category header, as this has been
removed from the FHIR specification (and tags are now available in the
resource body so the header was duplication/wasted bandwidth)
</action>
<action type="fix" issue="374">
Create and Update operations in server did not
include ETag or Last-Modified headers even though
the spec says they should. Thanks to Jim Steel for
reporting!
</action>
<action type="fix" issue="371">
Update STU3 client and server to use the new sort parameter style (param1,-param2,param). Thanks to GitHub user @euz1e4r for
reporting!
</action>
<action type="fix">
QuantityClientParam#withUnit(String) put the unit into the system part of the
parameter value
</action>
<action type="fix">
Fluent client searches with date parameters were not correctly using
new prefix style (e.g. gt) instead of old one (e.g. &gt;)
</action>
<action type="fix" issue="370">
Some built-in v3 code systems for STU3 resources were missing
certain codes, which caused false failures when validating
resources. Thanks to GitHub user @Xoude for reporting!
</action>
<action type="fix" issue="365">
Some methods on DSTU2 model structures have JavaDocs that
incorrectly claim that the method will not return null when
in fact it can. Thanks to Rick Riemer for reporting!
</action>
<action type="add">
ResponseHighlightingInterceptor has been modified based on consensus
on Zulip with Grahame that requests that have a parameter of
<![CDATA[<code>_format=json</code>]]> or
<![CDATA[<code>_format=xml</code>]]> will output raw FHIR content
instead of HTML highlighting the content as they previously did.
HTML content can now be forced via the (previously existing)
<![CDATA[<code>_format=html</code>]]> or via the two newly added
values
<![CDATA[<code>_format=html/json</code>]]> and
<![CDATA[<code>_format=html/xml</code>]]>. Because of this
change, the custom
<![CDATA[<code>_raw=true</code>]]> mode has been deprecated and
will be removed at some point.
</action>
<action type="fix" issue="267">
Operation definitions (e.g. for $everything operation) in the generated
server conformance statement should not include the $ prefix in the operation
name or code. Thanks to Dion McMurtrie for reporting!
</action>
<action type="fix" issue="378">
Server generated OperationDefinition resources did not validate
due to some missing elements (kind, status, etc.).
Thanks to
Michael Lawley for reporting!
</action>
<action type="fix" issue="379">
Operations that are defined on multiple resource provider types with
the same name (e.g. "$everything") are now automatically exposed by the server
as separate OperationDefinition resources per resource type. Thanks to
Michael Lawley for reporting!
</action>
<action type="fix" issue="380">
OperationDefinition resources generated automatically by the server for operations
that are defined within resource/plain providers incorrectly stated that
the maximum cardinality was "*" for non-collection types with no explicit
maximum stated, which is not the behaviour that the JavaDoc on the
<![CDATA[@OperationParam]]> annotation describes. Thanks to Michael Lawley
for reporting!
</action>
<action type="fix">
Server parameters annotated with
<![CDATA[<code>@Since</code>]]>
or
<![CDATA[<code>@Count</code>]]>
which are of a FHIR type such as IntegerDt or DateTimeType will
now be set to null if the client's URL does not
contain this parameter. Previously they would be populated
with an empty instance of the FHIR type, which was inconsistent with
the way other server parameters worked.
</action>
<action type="add">
Server now supports the _at parameter (including multiple repetitions)
for history operation
</action>
<!--
This one actually doesn't seem possible without using a deprecated servlet API
<action type="fix">
When throwing UnclassifiedServerException in server methods, the HTTP response
status line contained the response code specified in the exception, but not the
response message
</action>
-->
<action type="add">
AuthorizationInterceptor can now allow or deny requests to extended
operations (e.g. $everything)
</action>
<action type="fix">
DecimalType used BigDecimal constructor instead of valueOf method to
create a BigDecimal from a double, resulting in weird floating point
conversions. Thanks to Craig McClendon for reporting!
</action>
<action type="fix" issue="394">
Remove the depdendency on a method from commons-lang3 3.3 which was
causing issues on some Android phones which come with an older version
of this library bundled. Thanks to Paolo Perliti for reporting!
</action>
<action type="fix">
Parser is now better able to handle encoding fields which have been
populated with a class that extends the expected class
</action>
<action type="fix">
When declaring a child with
<![CDATA[<code>order=Child.REPLACE_PARENT</code>]]>
the serialized form still put the element at the
end of the resource instead of in the correct
order
</action>
<action type="fix">
Fix STU3 JPA resource providers to allow validate operation
at instance level
</action>
</release>
<release version="1.5" date="2016-04-20">
<action type="fix" issue="339">
Security Fix: XML parser was vulnerable to XXE (XML External Entity)
processing, which could result in local files on disk being disclosed.
See <![CDATA[<a href="https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing">this page</a>]]>
for more information.
Thanks to Jim Steel for reporting!
</action>
<action type="add">
Bump the version of a few dependencies to the
latest versions (dependent HAPI modules listed in brackets):
<![CDATA[
<ul>
<li>Hibernate (JPA, Web Tester): 5.0.7 -&gt; 5.1.0</li>
<li>Spring (JPA, Web Tester): 4.2.4 -&gt; 4.2.5</li>
<li>SLF4j (All): 1.7.14 -&gt; 1.7.21</li>
</ul>
]]>
</action>
<action type="add">
Support comments when parsing and encoding both JSON and XML. Comments are retrieved
and added to the newly created methods
IBase#getFormatCommentsPre() and
IBase#getFormatCommentsPost()
</action>
<action type="add" issue="293">
Added options to the CLI upload-examples command which allow it to cache
the downloaded content file, or use an arbitrary one. Thanks to Adam Carbone
for the pull request!
</action>
<action type="fix">
REST search parameters with a prefix/comparator had not been updated to use
the DSTU2 style prefixes (gt2011-01-10) instead of the DSTU1 style prefixes
(&gt;2011-01-01). The client has been updated so that it uses the new prefixes
if the client has a DSTU2+ context. The server has been updated so that it now
supports both styles.
<![CDATA[<br/><br/>]]>
As a part of this change, a new enum called
<![CDATA[<a href="./apidocs/ca/uhn/fhir/rest/param/ParamPrefixEnum.html">ParamPrefixEnum</a>]]>
has been introduced. This enum replaces the old
<![CDATA[<a href="./apidocs/ca/uhn/fhir/model/dstu/valueset/QuantityCompararatorEnum.html">QuantityCompararatorEnum</a>]]>
which has a typo in its name and can not represent several new prefixes added since
DSTU1.
</action>
<action type="add">
JPA server number and quantity search params now follow the rules for the
use of precision in search terms outlined in the
<![CDATA[<a href="https://www.hl7.org/fhir/search.html">search page</a>]]> of the
FHIR specification. For example, previously a 1% tolerance was applied for
all searches (10% for approximate search). Now, a tolerance which respects the
precision of the search term is used (but still 10% for approximate search).
</action>
<action type="fix" issue="291">
Fix a failure starting the REST server if a method returns an untyped List, which
among other things prevented resource provider added to the server
as CDI beans in a JBoss enviroment. Thanks to GitHub user fw060 (Fei) for
reporting and figuring out exactly why this wasn't working!
</action>
<action type="add">
JPA server now supports :above and :below qualifiers on URI search params
</action>
<action type="add">
Add optional support (disabled by default for now) to JPA server to support
inline references containing search URLs. These URLs will be resolved when
a resource is being created/updated and replaced with the single matching
resource. This is being used as a part of the May 2016 Connectathon for
a testing scenario.
</action>
<action type="add">
The server no longer adds a
<![CDATA[<code>WWW-Authenticate</code>]]>
header to the response if any resource provider code throws an
<![CDATA[<code>AuthenticationException</code>]]>. This header is
used for interactive authentication, which isn't generally
appropriate for FHIR. We added code to add this header a long time
ago for testing purposes and it never got removed. Please let us
know if you need the ability to add this header automatically. Thanks
to Lars Kristian Roland for pointing this out.
</action>
<action type="fix">
In the client, the create/update operations on a Binary resource
(which use the raw binary's content type as opposed to the FHIR
content type) were not including any request headers (Content-Type,
User-Agent, etc.) Thanks to Peter Van Houte of Agfa Healthcare for
reporting!
</action>
<action type="fix">
Handling of Binary resources containing embedded FHIR resources for
create/update/etc operations has been corrected per the FHIR rules
outlined at
<![CDATA[<a href="http://hl7.org/fhir/binary.html">Binary Resource</a>]]>
in both the client and server.
<![CDATA[<br/><br/>]]>
Essentially, if the Binary contains something
that isn't FHIR (e.g. an image with an image content-type) the
client will send the raw data with the image content type to the server. The
server will place the content type and raw data into a Binary resource instance
and pass those to the resource provider. This part was already correct previous
to 1.5.
<![CDATA[<br/><br/>]]>
On the other hand, if the Binary contains a FHIR content type, the Binary
is now sent by the client to the server as a Binary resource with a FHIR content-type,
and the embedded FHIR content is contained in the appropriate fields. The server
will pass this &quot;outer&quot; Binary resource to the resource provider code.
</action>
<action type="add">
The RequestDetails and ActionRequestDetails objects which are passed to
server interceptor methods and may also be used as server provider method
arguments now has a new method
<![CDATA[
<code>Map&lt;String, String&gt; getUserData()</code>
]]>
which can be used to pass data and objects between interceptor methods to
to providers. This can be useful, for instance, if an authorization
interceptor wants to pass the logged in user's details to other parts
of the server.
</action>
<action type="fix" issue="297">
<![CDATA[When <code>IServerInterceptor#incomingRequestPreHandled()</code> is called
for a <code>@Validate</code> method, the resource was not populated in the
<code>ActionRequestDetails</code> argument. Thanks to Ravi Kuchi for reporting!
]]>
</action>
<action type="fix" issue="298">
<![CDATA[
Request to server at <code>[baseUrl]/metadata</code> with an HTTP method
other than GET (e.g. POST, PUT) should result in an HTTP 405. Thanks to
Michael Lawley for reporting!
]]>
</action>
<action type="fix" issue="302">
Fix a server exception when trying to automatically add the profile tag
to a resource which already has one or more profiles set. Thanks to
Magnus Vinther for reporting!
</action>
<action type="fix" issue="296">
QuantityParam parameters being used in the RESTful server were ignoring
the
<![CDATA[<code>:missing</code>]]>
qualifier. Thanks to Alexander Takacs for reporting!
</action>
<action type="fix" issue="299">
Annotation client failed with an exception if the response contained
extensions on fields in the resonse Bundle (e.g. Bundle.entry.search).
Thanks to GitHub user am202 for reporting!
</action>
<action type="fix" issue="274">
Primitive elements with no value but an extension were sometimes not
encoded correctly in XML, and sometimes not parsed correctly in JSON.
Thanks to Bill de Beaubien for reporting!
</action>
<action type="fix" issue="280">
The Web Testing UI has long had an issue where if you click on a button which
navigates to a new page (e.g. search, read, etc) and then click the back button
to return to the original page, the button you clicked remains disabled and can't
be clicked again (on Firefox and Safari). This is now fixed. Unfortunately the fix means that the
buttom will no longer show a "loading" spinner, but there doesn't seem to
be another way of fixing this. Thanks to Mark Scrimshire for reporting!
</action>
<action type="fix">
Extensions found while parsing an object that doesn't support extensions are now
reported using the IParserErrorHandler framework in the same way that
other similar errors are handled. This allows the parser to be more lenient
when needed.
</action>
<action type="add" issue="304">
Improve error message if incorrect type is placed in a list field in the data model. Java
uses generics to prevent this at compile time, but if someone is in an environment without
generics this helps improve the error message at runtime. Thanks to Hugo Soares for
suggesting.
</action>
<action type="fix" issue="308">
Prevent an unneeded warning when parsing a resource containing
a declared extension. Thanks to Matt Blanchette for reporting!
</action>
<action type="fix">
Web Tester UI did not invoke VRead even if a version ID was specified. Thanks
to Poseidon for reporting!
</action>
<action type="add">
Per discussion on the FHIR implementer chat, the JPA server no
longer includes _revinclude matches in the Bundle.total count, or the
page size limit.
</action>
<action type="add">
JPA server now persists search results to the database in a new table where they
can be temporaily preserved. This makes the JPA server much more scalable, since it
no longer needs to store large lists of pages in memory between search invocations.
<![CDATA[<br/><br/>]]>
Old searches are deleted after an hour by default, but this can be changed
via a setting in the DaoConfig.
</action>
<action type="add">
JPA servers' resource version history mechanism
has been adjusted so that the history table
keeps a record of all versions including the
current version. This has the very helpful
side effect that history no longer needs to be
paged into memory as a complete set. Previously
history had a hard limit of only being able to
page the most recent 20000 entries. Now it has
no limit.
</action>
<action type="fix">
JPA server returned the wrong Bundle.type value (COLLECTION, should be SEARCHSET)
for $everything operation responses. Thanks to Sonali Somase for reporting!
</action>
<action type="fix" issue="305">
REST and JPA server should reject update requests where the resource body does not
contain an ID, or contains an ID which does not match the URL. Previously these
were accepted (the URL ID was trusted) which is incorrect according to the
FHIR specification. Thanks to GitHub user ametke for reporting!
<![CDATA[<br/><br/>]]>
As a part of this change, server error messages were also improved for
requests where the URL does not contain an ID but needs to (e.g. for
an update) or contains an ID but shouldn't (e.g. for a create)
</action>
<action type="fix">
When fields of type BoundCodeDt (e.g. Patient.gender)
are serialized and deserialized using Java's native
object serialization, the enum binder was not
serialized too. This meant that values for the
field in the deserialized object could not be
modified. Thanks to Thomas Andersen for reporting!
</action>
<action type="fix" issue="313">
REST Server responded to HTTP OPTIONS requests with
any URI as being a request for the server's
Conformance statement. This is incorrect, as only
a request for <![CDATA[<code>OPTIONS [base url]</code>]]> should be treated as such. Thanks to Michael Lawley for reporting!
</action>
<action type="fix">
REST annotation style client was not able to handle extended operations
($foo) where the response from the server was a raw resource instead
of a Parameters resource. Thanks to Andrew Michael Martin for reporting!
</action>
<action type="add">
JPA server applies _lastUpdated filter inline with other searches wherever possible
instead of applying this filter as a second query against the results of the
first query. This should improve performance when searching against large
datasets.
</action>
<action type="add">
Parsers have new method
<![CDATA[<code>setDontEncodeElements</code>]]>
which can be used to force the parser to not encode certain elements
in a resource when serializing. For example this can be used to omit
sensitive data or skip the resource metadata.
</action>
<action type="add">
JPA server database design has been adjusted
so that different tables use different sequences
to generate their indexes, resulting in more sequential
resource IDs being assigned by the server
</action>
<action type="fix">
Server now correctly serves up Binary resources
using their native content type (instead of as a
FHIR resource) if the request contains an accept
header containing "application/xml" as some browsers
do.
</action>
<action type="add">