diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 01abaebae5f..700b690e483 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 ./changes.xsd"> James Agnew HAPI FHIR Changelog @@ -23,7 +23,7 @@ version of 3.5.0. - Automatic ID generation for contained resources (in cases where the user hasn't manually specified an ID) + Automatic ID generation for contained resources (in cases where the user hasn't manually specified an ID) has been streamlined to generate more predictable IDs in some cases. @@ -96,19 +96,57 @@ if an unqualified ID is placed in the ID text box. This has been corrected. - AuthorizationInterceptor did not allow FHIR batch operations when the transaction() + AuthorizationInterceptor did not allow FHIR batch operations when the transaction() permission is granted. This has been corrected so that transaction() allows both batch and transaction requests to proceed. + + The AuthorizationInterceptor was previously not able to authorize the FHIR + batch operation. As of this version, when authorizing a transaction operation + (via the transaction() rule), both batch and transaction will be allowed. + + + The JPA server now automatically supplies several appropriate hibernate performance + settings as long as the JPA EntityManagerFactory was created using HAPI FHIR's + built-in method for creating it. +
]]> + Existing JPA projects should consider using + super.entityManagerFactory()]]> + as shown in + the example project]]> + if they are not already. +
+ + The FhirTerser getValues(...)]]> methods have been overloaded. The terser can now be + used to create a null-valued element where none exists. Additionally, the terser can now add a null-valued + extension where one or more such extensions already exist. These changes allow better population of FHIR + elements provided an arbitrary FHIR path. + + + The FhirTerser getValues(...)]]> methods were not properly handling modifier + extensions for verions of FHIR prior to DSTU3. This has been corrected. + + + When updating resources in the JPA server, a bug caused index table entries to be refreshed + sometimes even though the index value hadn't changed. This issue did not cause incorrect search + results but had an effect on write performance. This has been corrected. + + + The @Operation annotation used to declare operations on the Plain Server now + has a wildcard constant which may be used for the operation name. This allows + you to create a server that supports operations that are not known to the + server when it starts up. This is generally not advisable but can be useful + for some circumstances. + + + When using an @Operation method in the Plain Server, it is now possible + to use a parameter annotated with @ResourceParam to receive the Parameters + (or other) resource supplied by the client as the request body. + The JPA server version migrator tool now runs in a multithreaded way, allowing it to upgrade th database faster when migration tasks require data updates. - - A bug in the JPA server was fixed: When a resource was previously deleted, - a transaction could not be posted that both restored the deleted resource but - also contained references to the now-restored resource. - @@ -213,7 +251,7 @@ LOINC uploader has been updated to support the new LOINC filename - scheme introduced in LOINC 2.64. Thanks to Rob Hausam for the + scheme introduced in LOINC 2.64. Thanks to Rob Hausam for the pull request! @@ -234,22 +272,22 @@ create two resources with the same client-assigned ID. - The JPA server + The JPA server $expunge]]> - operation deleted components of an individual resource record in - separate database transactions, meaning that if an operation failed + 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. 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 + of a premature short circuit during deferred uploading. Thanks to Joel Schneider for the pull request! 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 + could cause an error about the incorrect FHIR version. Thanks to Rob Hausam for the pull request! @@ -316,7 +354,7 @@ Fixed a bug when creating a custom search parameter in the JPA - server: if the SearchParameter resource contained an invalid + server: if the SearchParameter resource contained an invalid expression, create/update operations for the given resource would fail with a cryptic error. SearchParameter expressions are now validated upon storage, and the SearchParameter will be rejected @@ -383,7 +421,7 @@ when it grows long. - A bug was fixed in JPA server searches: When performing a search with a _lastUpdate + A bug was fixed in JPA server searches: When performing a search with a _lastUpdate filter, the filter was applied to any _include values, which it should not have been. Thanks to Deepak Garg for reporting! @@ -413,7 +451,7 @@ implemented. Thanks to Patrick Werner for the Pull Request! - HAPI FHIR CLI commands that allow Basic Auth credentials or a Bearer Token may now use + HAPI FHIR CLI commands that allow Basic Auth credentials or a Bearer Token may now use a value of "PROMPT" to cause the CLI to prompt the user for credentials using an interactive prompt. @@ -551,7 +589,7 @@ alter table TRM_CODESYSTEM_VER drop constraint IDX_CSV_RESOURCEPID_AND_VER 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 + a local ID that already existed, making the resulting serialization invalid. This has been corrected. @@ -667,7 +705,7 @@ alter table TRM_CODESYSTEM_VER drop constraint IDX_CSV_RESOURCEPID_AND_VER Anthony Sute for identifying this. - A hard-to-understand validation message was fixed in the validator when + 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! @@ -689,7 +727,7 @@ alter table TRM_CODESYSTEM_VER drop constraint IDX_CSV_RESOURCEPID_AND_VER Thanks to GitHub user @RuthAlk for the pull request! - DateRangeParameter was enhanced to support convenient method chanining, and + 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! @@ -734,10 +772,10 @@ alter table TRM_CODESYSTEM_VER drop constraint IDX_CSV_RESOURCEPID_AND_VER FhirInstanceValidator. Thanks to Heinz-Dieter Conradi for the pull request! - The REST server has been modified so that the + The REST server has been modified so that the Location]]> 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 + This header was returned in the past, but this header is actually inappropriate for any response that is not a create operation. The Content-Location]]> @@ -898,12 +936,12 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; no count parameter included. Thanks to Viviana Sanz for reporting! - 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 + 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. - ResponseHighlightingInterceptor now properly parses _format + ResponseHighlightingInterceptor now properly parses _format parameters that include additional content (e.g. _format=html/json;fhirVersion=1.0]]>) @@ -914,7 +952,7 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; more tolerant of deleting very large search result sets. - Avoid refreshing the search parameter cache from an incoming client + Avoid refreshing the search parameter cache from an incoming client request thread, which caused unneccesary delays for clients. @@ -933,11 +971,11 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; a testcase! - Deleting a resource from the testpage overlay resulted in an error page after + Deleting a resource from the testpage overlay resulted in an error page after clicking "delete", even though the delete succeeded. - A number of info level log lines have been reduced to debug level in the JPA server, in + 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. @@ -983,7 +1021,7 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; milliseconds spent performing each call that is logged. - ReferenceParam has been enhanced to properly return the resource type to + 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! @@ -1007,7 +1045,7 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; Jiajing Liang for the pull request! - JAX-RS server now supports R4 and DSTU2_1 FHIR versions, which were + JAX-RS server now supports R4 and DSTU2_1 FHIR versions, which were previously missing. Thanks to Clayton Bodendein for the pull request! @@ -1030,7 +1068,7 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; JPA server sometimes updated resources even though the client - supplied an update with no actual changes in it, due to + 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! @@ -1046,11 +1084,11 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; An unneccesary reference to the Javassist library has been - removed from the build. Thanks to Łukasz Dywicki for the + removed from the build. Thanks to Łukasz Dywicki for the pull request! - Support has been added to the JPA server for the :not modifier. Thanks + Support has been added to the JPA server for the :not modifier. Thanks to Łukasz Dywicki for the pull request! @@ -1103,7 +1141,7 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; When encoding URL parameter values, HAPI FHIR would incorrectly escape - a space (" ") as a plus ("+") insetad of as "%20" as required by + 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! @@ -1124,7 +1162,7 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; from INFO to DEBUG in order to reduce log noise - Fix an issue in JPA server where updating a resource sometimes caused date search indexes to + 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! @@ -1168,8 +1206,8 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL;
]]> See the HAPI FHIR Android Documentation]]> - for more information. As a part of this fix, all dependencies on - the StAX API have been removed in environments where StAX is not + 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 @@ -1211,10 +1249,10 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; for more information.
- In certain cases in the JPA server, if multiple threads all attempted to + 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 + failure when trying to update this resource further. This has been resolved. @@ -1228,7 +1266,7 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; The JPA server transaction operation (DSTU3/R4) did not correctly process the - If-Match header when passed in via + If-Match header when passed in via Bundle.entry.request.ifMatch]]> value @@ -1242,7 +1280,7 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; getCountSearchResultsUpTo()]]>. 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 + search response to the user, which has an effect on whether the Bundle.total]]> field is always populated in search responses. This has now @@ -1264,7 +1302,7 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; as Android phones. - Restored the + Restored the org.hl7.fhir.r4.model.codesystem.*]]> classes (which are Java Enums for the various FHIR codesystems). These were accidentally removed in HAPI FHIR 3.0.0. Thanks to @@ -1283,7 +1321,7 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; Parsing a DSTU3/R4 custom structure which contained a field of - a custom type caused a crash during parsing. Thanks to + a custom type caused a crash during parsing. Thanks to GitHub user @mosaic-hgw for reporting! @@ -1304,12 +1342,13 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; Michael Lawley for the pull request! - Add Prefer and Cache-Control]]> to the list of headers which are declared as + Add Prefer and Cache-Control]]> 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! - DSTU2-hl7org and DSTU2.1 structures did not copy resource IDs when invoking + DSTU2-hl7org and DSTU2.1 structures did not copy resource IDs when invoking copyValues(). Thanks to Clayton Bodendein for the pull request! @@ -1327,7 +1366,7 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; the raw binary with the server, as opposed to exchanging a FHIR resource). - When paging through multiple pages of search results, if the + When paging through multiple pages of search results, if the client had requested a subset of resources to be returned using the _elements]]> parameter, the elements list was lost after the first page of results. @@ -1355,8 +1394,8 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; A new client interceptor has been added called - AdditionalRequestHeadersInterceptor, which allows - a developer to add additional custom headers to a + AdditionalRequestHeadersInterceptor, which allows + a developer to add additional custom headers to a client requests. Thanks to Clayton Bodendein for the pull request! @@ -1375,7 +1414,7 @@ ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL; 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 + 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! @@ -1523,25 +1562,25 @@ Bundle bundle = client.search().forResource(Patient.class) 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 + 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. + polling design.
]]> 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 + 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!
hapi-fhir-client-okhttp project POM had dependencies on both - hapi-fhir-structures-dstu2 and hapi-fhir-structures-dstu3, which + 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. 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 + being used in Bundle.entry.request.url as a part of the conditional URL within transactions. @@ -1556,14 +1595,14 @@ Bundle bundle = client.search().forResource(Patient.class) 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 + 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! - IServerOperationInterceptor now has a new method + IServerOperationInterceptor now has a new method resourceUpdated(RequestDetails, IBaseResource, IBaseResource)]]> which replaces the previous resourceUpdated(RequestDetails, IBaseResource)]]>. This allows @@ -1580,7 +1619,7 @@ Bundle bundle = client.search().forResource(Patient.class) GET /Observation?value-quantity=]]> - JPA server transaction processing now honours the Prefer header and includes + 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. @@ -1591,12 +1630,12 @@ Bundle bundle = client.search().forResource(Patient.class) 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 + more than this number, which can be good for avoiding accidental + performance problems in situations where large queries should not be needed - Prevent duplicates in $everything query response in JPA server. Thanks to @vlad-ignatov + Prevent duplicates in $everything query response in JPA server. Thanks to @vlad-ignatov for reporting! @@ -1619,7 +1658,7 @@ Bundle bundle = client.search().forResource(Patient.class) 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 + 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 @@ -1637,7 +1676,7 @@ Bundle bundle = client.search().forResource(Patient.class) is 1000. - When executing a search (HTTP GET) as a nested operation in in a transaction or + 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 @@ -1668,7 +1707,7 @@ Bundle bundle = client.search().forResource(Patient.class) Sopin for reporting! - JpaConformanceProvider now has a configuration setting to enable and + JpaConformanceProvider now has a configuration setting to enable and disable adding resource counts to the server metadata. @@ -1684,14 +1723,14 @@ Bundle bundle = client.search().forResource(Patient.class) When the server was returning a multi-page search result where the - client did not explicitly request an encoding via the _format + 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. - Enhancement to ResponseHighlighterInterceptor where links in the resource + Enhancement to ResponseHighlighterInterceptor where links in the resource body are now converted to actual clickable hyperlinks. Thanks to Eugene Lubarsky for the pull request! @@ -1710,7 +1749,7 @@ Bundle bundle = client.search().forResource(Patient.class) Fix an issue in HapiWorkerContext where structure definitions are - not able to be retrieved if they are referred to by their + 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! @@ -1729,7 +1768,7 @@ Bundle bundle = client.search().forResource(Patient.class) for the pull request! - Correct an issue with the model classes for STU3 where any classes + 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 @@ -1742,7 +1781,7 @@ Bundle bundle = client.search().forResource(Patient.class) JPA server transaction operations now put OperationOutcome resources resulting - from actions in + from actions in Bundle.entry.response.outcome]]> instead of the previous Bundle.entry.resource]]> @@ -1762,7 +1801,7 @@ Bundle bundle = client.search().forResource(Patient.class) to Sébastien Rivière for the pull request! - Testing UI now has a dropdown for modifiers on token search. Thanks + Testing UI now has a dropdown for modifiers on token search. Thanks to GitHub user @dconlan for the pull request! @@ -1784,7 +1823,7 @@ Bundle bundle = client.search().forResource(Patient.class) Pascal Brandt for the pull request! - Fix incorrect FHIR Version Strings that were being outputted and verified in the + 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! @@ -1810,11 +1849,12 @@ Bundle bundle = client.search().forResource(Patient.class) Add some browser performance logging to ResponseHighlightingInterceptor. Thanks - to Eugene Lubarsky for the pull request, and for convincing James not to + to Eugene Lubarsky for the pull request, and for convincing James not to optimize something that did not need optimizing! - A new config property has been added to the JPA seerver DaoConfig called "setAutoCreatePlaceholderReferenceTargets". + 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. @@ -1847,12 +1887,12 @@ Bundle bundle = client.search().forResource(Patient.class) with the same URI as the previous one - When uploading a Bundle resource to the server (as a collection or + 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. - Subscriptions in JPA server now support "email" delivery type through the + Subscriptions in JPA server now support "email" delivery type through the use of a new interceptor which handles that type @@ -1928,7 +1968,7 @@ Bundle bundle = client.search().forResource(Patient.class) AuthorizationInterceptor did not correctly handle paging requests - (e.g. requests for the second page of results for a search operation). + (e.g. requests for the second page of results for a search operation). Thanks to Eeva Turkka for reporting! @@ -1936,7 +1976,7 @@ Bundle bundle = client.search().forResource(Patient.class) allow client code to change unknown extension handling behaviour. - Fix concurrency issues in FhirContext that were causing issues when + 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! @@ -1956,8 +1996,8 @@ Bundle bundle = client.search().forResource(Patient.class) types in the type= property - 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 + 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! @@ -1971,7 +2011,7 @@ Bundle bundle = client.search().forResource(Patient.class) path pointed to an extension, where the client used a chained value. - Fix issue where the JSON parser sometimes did not encode DSTU3 extensions on the root of a + 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. @@ -2007,7 +2047,7 @@ Bundle bundle = client.search().forResource(Patient.class) an older version of commons-codec. - JPA server failed to index search parameters on paths containing a decimal + JPA server failed to index search parameters on paths containing a decimal data type @@ -2025,14 +2065,14 @@ Bundle bundle = client.search().forResource(Patient.class) just wasted space. - Loading the build-in profile structures (StructureDefinition, ValueSet, etc) is now done in + 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! - Fix bad ValueSet URL in DeviceRequest profile definition for STU3 which + 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! @@ -2053,7 +2093,7 @@ Bundle bundle = client.search().forResource(Patient.class) 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 + 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. @@ -2073,13 +2113,13 @@ Bundle bundle = client.search().forResource(Patient.class) ]]> - hapi-fhir-jpaserver-example now includes the - Prefer]]> header in the list of + hapi-fhir-jpaserver-example now includes the + Prefer]]> header in the list of CORS headers. Thanks to GitHub user @elnin0815 for the pull request! - AuthorizationInterceptor can now allow make read or write + AuthorizationInterceptor can now allow make read or write authorization decisions on a resource by instance ID @@ -2113,8 +2153,9 @@ Bundle bundle = client.search().forResource(Patient.class) URLs. Thanks to Eeva Turkka for the suggestion! - Add a utility method to JPA server: - IFhirResourceDao#removeTag(IIdType, TagTypeEnum, String, String)]]>. This allows client code to remove tags + Add a utility method to JPA server: + IFhirResourceDao#removeTag(IIdType, TagTypeEnum, String, String)]]>. This allows + client code to remove tags from a resource without having a servlet request object in context. @@ -2141,7 +2182,7 @@ Bundle bundle = client.search().forResource(Patient.class) 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 + Thanks to Sebastien Riviere for the pull request! @@ -2179,7 +2220,7 @@ Bundle bundle = client.search().forResource(Patient.class) Server interceptor methods were being called twice unnecessarily - by the JPA server, and the DaoConfig interceptor registration + by the JPA server, and the DaoConfig interceptor registration framework was not actually useful. Thanks to GitHub user @mattiuusitalo for reporting! @@ -2191,15 +2232,15 @@ Bundle bundle = client.search().forResource(Patient.class) Eeva Turkka for reporting! - JPA server exported CapabilityStatement includes + JPA server exported CapabilityStatement includes double entries for the _id parameter and uses the - wrong type (string instead of token). Thanks to + wrong type (string instead of token). Thanks to Robert Lichtenberger for reporting! 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 + have declared extensions since this is invalid in + FHIR (and HAPI would just ignore them anyhow). Thanks to Thomas S Berg for reporting! @@ -2208,16 +2249,16 @@ Bundle bundle = client.search().forResource(Patient.class) this out! - Server AuthorizationInterceptor always rejects history operation + Server AuthorizationInterceptor always rejects history operation at the type level even if rules should allow it. - JPA server terminology service was not correctly validating or expanding codes + JPA server terminology service was not correctly validating or expanding codes in SNOMED CT or LOINC code systems. Thanks to David Hay for reporting! - 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 + 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! @@ -2240,15 +2281,15 @@ Bundle bundle = client.search().forResource(Patient.class) an &rsquot;]]> entity string. - When parsing a quantity parameter on the server with a - value and units but no system (e.g. + When parsing a quantity parameter on the server with a + value and units but no system (e.g. GET [base]/Observation?value=5.4||mg]]>) the unit was incorrectly treated as the system. Thanks to @CarthageKing for the pull request! Correct a typo in the JPA ValueSet ResourceProvider which prevented - successful operation under Spring 4.3. Thanks to + successful operation under Spring 4.3. Thanks to Robbert van Waveren for the pull request! @@ -2269,8 +2310,8 @@ Bundle bundle = client.search().forResource(Patient.class) @sekaijin for the pull request! - When performing a conditional create in a transaction in JPA server, - if a resource already existed matching the conditional expression, the + 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! @@ -2286,23 +2327,23 @@ Bundle bundle = client.search().forResource(Patient.class) 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 + a new method was added to IBundleProvider called getUuid()]]>. This method may return null]]> in any current cases. - Expanding a ValueSet in JPA server did not correctly apply + Expanding a ValueSet in JPA server did not correctly apply ?filter=]]> parameter when the ValueSet - being expanded had codes included explicitly (i.e. not by + being expanded had codes included explicitly (i.e. not by is-a relationship). Thanks to David Hay for reporting! 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 + the resource ID was not present and required, or vice versa. Thanks to Brian Postlethwaite for reporting! - When using an annotation based client, a ClassCastException would + When using an annotation based client, a ClassCastException would occur under certain circumstances when the response contained contained resources @@ -2328,7 +2369,7 @@ Bundle bundle = client.search().forResource(Patient.class) Parser can now be configured when encoding to use a specific - base URL for extensions. Thanks to Sebastien Riviere for the + base URL for extensions. Thanks to Sebastien Riviere for the pull request! @@ -2366,13 +2407,13 @@ Bundle bundle = client.search().forResource(Patient.class) ]]> - + Fix issue in AuthorizationIntetceptor where transactions are blocked even when they should not be - Fix regression in HAPI FHIR 2.1 JPA + Fix regression in HAPI FHIR 2.1 JPA server where some search parameters on metadata resources did not appear (e.g. "StructureDefinition.url"). Thanks @@ -2389,7 +2430,7 @@ Bundle bundle = client.search().forResource(Patient.class) to GitHub user @vijayt27 for reporting! - As the + As the eBay CORS interceptor]]> project has gone dormant, we have introduced a new @@ -2446,7 +2487,7 @@ Bundle bundle = client.search().forResource(Patient.class) When parsing invalid enum values in STU3, report errors through the parserErrorHandler, - not by throwing an exception. Thanks to + not by throwing an exception. Thanks to Michael Lawley for the pull request! @@ -2463,7 +2504,7 @@ Bundle bundle = client.search().forResource(Patient.class) that servers which receive an invalid enum velue will return an HTTP 400 instead of an HTTP 500. Thanks to Jim Steel for reporting! - + DSTU3 context now pulls the FHIR version from the actual model classes. Thanks to Michael Lawley for the pull request! @@ -2483,11 +2524,11 @@ Bundle bundle = client.search().forResource(Patient.class)
  • Normalization of properties across all three generic tasks
  • ]]> -
    - - 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! + + + 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! Add a docker configuration to the hapi-fhir-jpaservr-example @@ -2504,12 +2545,14 @@ Bundle bundle = client.search().forResource(Patient.class) a test case! - Correct a typo in client + Correct a typo in client IHttpRequest]]> class: "bufferEntitity" should be "bufferEntity". - 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 + 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! @@ -2527,7 +2570,7 @@ Bundle bundle = client.search().forResource(Patient.class) Server interceptor methods were being called twice unnecessarily - by the JPA server, and the DaoConfig interceptor registration + by the JPA server, and the DaoConfig interceptor registration framework was not actually useful. Thanks to GitHub user @mattiuusitalo for reporting! @@ -2539,15 +2582,15 @@ Bundle bundle = client.search().forResource(Patient.class) Eeva Turkka for reporting!
    - JPA server exported CapabilityStatement includes + JPA server exported CapabilityStatement includes double entries for the _id parameter and uses the - wrong type (string instead of token). Thanks to + wrong type (string instead of token). Thanks to Robert Lichtenberger for reporting! 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 + have declared extensions since this is invalid in + FHIR (and HAPI would just ignore them anyhow). Thanks to Thomas S Berg for reporting! @@ -2556,16 +2599,16 @@ Bundle bundle = client.search().forResource(Patient.class) this out! - Server AuthorizationInterceptor always rejects history operation + Server AuthorizationInterceptor always rejects history operation at the type level even if rules should allow it. - JPA server terminology service was not correctly validating or expanding codes + JPA server terminology service was not correctly validating or expanding codes in SNOMED CT or LOINC code systems. Thanks to David Hay for reporting! - 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 + 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! @@ -2588,15 +2631,15 @@ Bundle bundle = client.search().forResource(Patient.class) an &rsquot;]]> entity string. - When parsing a quantity parameter on the server with a - value and units but no system (e.g. + When parsing a quantity parameter on the server with a + value and units but no system (e.g. GET [base]/Observation?value=5.4||mg]]>) the unit was incorrectly treated as the system. Thanks to @CarthageKing for the pull request! Correct a typo in the JPA ValueSet ResourceProvider which prevented - successful operation under Spring 4.3. Thanks to + successful operation under Spring 4.3. Thanks to Robbert van Waveren for the pull request! @@ -2615,8 +2658,8 @@ Bundle bundle = client.search().forResource(Patient.class)
    - STU3 structure definitions have been updated to the - STU3 latest definitions (1.7.0 - SVN 10129). In + 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 @@ -2632,18 +2675,20 @@ Bundle bundle = client.search().forResource(Patient.class) ]]> - Fix a fairly significant issue in JPA Server when using the DatabaseBackedPagingProvider]]>: When paging over the results - of a search / $everything operation, under certain circumstances resources may be missing from the last page of results + Fix a fairly significant issue in JPA Server when using the + DatabaseBackedPagingProvider]]>: 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! Client, Server, and JPA server now support experimental support - for + for using the XML Patch and JSON Patch syntax as explored during the - September 2016 Baltimore Connectathon. See + September 2016 Baltimore Connectathon. See this wiki page]]> - for a description of the syntax. + for a description of the syntax. ]]> Thanks to Pater Girard for all of his help during the connectathon in implementing this feature! @@ -2655,20 +2700,20 @@ Bundle bundle = client.search().forResource(Patient.class) Both client and server now use the new STU3 mime types by default - if running in STU3 mode (in other words, using an STU3 + if running in STU3 mode (in other words, using an STU3 FhirContext). In server, when returning a list of resources, the server sometimes failed to add _include]]> resources to the response bundle if they were - referred to by a contained reosurce. Thanks to Neal Acharya for reporting! + referred to by a contained reosurce. Thanks to Neal Acharya for reporting! Fix regression in web testing UI where "prev" and "next" buttons don't work when showing a result bundle - JPA server should not attempt to resolve built-in FHIR StructureDefinitions from the + JPA server should not attempt to resolve built-in FHIR StructureDefinitions from the database (this causes a significant performance hit when validating) @@ -2695,7 +2740,7 @@ Bundle bundle = client.search().forResource(Patient.class) STU3 servers were adding the old MimeType - strings to the + strings to the Conformance.format]]> part of the generated server conformance statement @@ -2707,23 +2752,23 @@ Bundle bundle = client.search().forResource(Patient.class) to Filip Domazet for reporting! - STU clients now use an Accept header which + STU clients now use an Accept header which indicates support for both the old MimeTypes (e.g. application/xml+fhir]]>) and the new MimeTypes (e.g. application/fhir+xml]]>) - JPA server now sends correct - HTTP 409 Version Conflict]]> - when a + JPA server now sends correct + HTTP 409 Version Conflict]]> + when a DELETE fails because of constraint issues, instead of - HTTP 400 Invalid Request]]> + HTTP 400 Invalid Request]]> 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! + Thanks to Richard Ettema for spotting this! Add a new method to the server interceptor framework which will be @@ -2761,20 +2806,20 @@ Bundle bundle = client.search().forResource(Patient.class) XhtmlNode.equalsDeep() contained a bug which caused resources containing a narrative to always return - false]]> for STU3 - Resource#equalsDeep()]]>. Thanks to + false]]> for STU3 + Resource#equalsDeep()]]>. Thanks to GitHub user @XcrigX for reporting! 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. - MedicationAdministration.medication[x]]]>. + reference and a non-reference type (e.g. + MedicationAdministration.medication[x]]]>. Thanks to GitHub user @Crudelus for reporting! 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 + a NullPointerException to be thrown. Now it will trigger a warning, or throw a DataFormatException if the StrictErrorHandler is configured on the parser. @@ -2788,7 +2833,8 @@ Bundle bundle = client.search().forResource(Patient.class) Kevin Tallevi for finding this! - Fix #411 - Searching by POST [base]/_search]]> with urlencoded parameters doesn't work correctly if + Fix #411 - Searching by POST [base]/_search]]> 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! @@ -2803,7 +2849,7 @@ Bundle bundle = client.search().forResource(Patient.class) 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! + some great analysis of the issue! Add a new method to ReferenceClientParam which allows you to @@ -2812,7 +2858,7 @@ Bundle bundle = client.search().forResource(Patient.class) When encoding a resource in JSON where the resource has - an extension with a value where the value is a reference to a + 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! @@ -2820,7 +2866,7 @@ Bundle bundle = client.search().forResource(Patient.class) ResponseHighlighterInterceptor now pretty-prints responses by default unless the user has explicitly requested a non-pretty-printed response (ie. - using ?_pretty=false]]>. Thanks to + using ?_pretty=false]]>. Thanks to Allan Brohansen and Jens Villadsen for the suggestion! @@ -2850,12 +2896,12 @@ Bundle bundle = client.search().forResource(Patient.class) instance of a given type - STU3 servers were incorrectly returning the + STU3 servers were incorrectly returning the Content-Location]]> header instead of the Content]]> - header. The former has been removed from the - FHIR specification in STU3, but the + 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! @@ -2896,20 +2942,21 @@ Bundle bundle = client.search().forResource(Patient.class) ]]> - STU3 structure definitions have been updated to the + STU3 structure definitions have been updated to the STU3 ballot candidate versions (1.6.0 - SVN 9663) Both client and server now support the new Content Types decided in - FHIR #10199]]>. + FHIR #10199]]> + .
    ]]> - This means that the server now supports + This means that the server now supports application/fhir+xml and application/fhir+json]]> in addition to the older style application/xml+fhir and application/json+fhir]]>. 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 Accept]]> header value which requests both + client now uses an Accept]]> header value which requests both styles with a preference given to the new style when running in DSTU3 mode.
    ]]> As a part of this change, the server has also been enhanced so that if a request @@ -2934,7 +2981,7 @@ Bundle bundle = client.search().forResource(Patient.class) ]]>
    - + Fix issue in DSTU1 Bundle parsing where unexpected elements in the bundle resulted in a failure to parse. @@ -2968,14 +3015,14 @@ Bundle bundle = client.search().forResource(Patient.class) for the pull request! - hapi-fhir-testpage-overlay project contained an unneccesary - dependency on hapi-fhir-jpaserver-base module, which resulted in + 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 It is not possible to configure both the parser and the context to - preserve versions in resource references (default behaviour is to + preserve versions in resource references (default behaviour is to strip versions from references). Thanks to GitHub user @cknaap for the suggestion! @@ -2984,7 +3031,7 @@ Bundle bundle = client.search().forResource(Patient.class) set. Thanks to Tim Tschampel for reporting! - JPA server's /Bundle]]> endpoint cleared + JPA server's /Bundle]]> endpoint cleared the Bundle.entry.fullUrl]]> field on stored bundles, resulting in invalid content being saved. Thanks to Mirjam Baltus for reporting! @@ -2999,12 +3046,12 @@ Bundle bundle = client.search().forResource(Patient.class) a custom type did not automatically parse into that type. - Allow servers to specify the authentication realm of their choosing when + Allow servers to specify the authentication realm of their choosing when throwing an AuthenticationException. Thanks to GitHub user @allanbrohansen for the suggestion! - Add a new client implementation which uses the + Add a new client implementation which uses the OkHttp]]> library as the HTTP client implementation (instead of Apache HttpClient). This is particularly useful for Android (where HttpClient is a pain) but @@ -3013,7 +3060,7 @@ Bundle bundle = client.search().forResource(Patient.class) Fix a regression when parsing resources that have contained - resources, where the reference in the outer resource which + 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! @@ -3038,14 +3085,14 @@ Bundle bundle = client.search().forResource(Patient.class) update]]> 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 @Update]]> methods will always have + to @Update]]> methods will always have null]]> ID - Add new methods to + Add new methods to AuthorizationInterceptor]]> which allow user code to declare support for conditional - create, update, and delete. + create, update, and delete. When encoding a resource with a reference to another resource @@ -3053,8 +3100,8 @@ Bundle bundle = client.search().forResource(Patient.class) was incorrectly stripped from the reference. - Servers for STU3 (or newer) will no longer include a - Location:]]> header on responses for + Servers for STU3 (or newer) will no longer include a + Location:]]> header on responses for read]]> operations. This header was required in earlier versions of FHIR but has been removed from the specification. @@ -3074,7 +3121,7 @@ Bundle bundle = client.search().forResource(Patient.class) Parser failed to parse resources containing an extension with a value type of - "id". Thanks to Raphael Mäder for reporting! + "id". Thanks to Raphael Mäder for reporting! When committing a transaction in JPA server @@ -3085,7 +3132,7 @@ Bundle bundle = client.search().forResource(Patient.class) HAPI root pom shouldn't include animal-sniffer plugin, - since that causes any projects which extend this to + since that causes any projects which extend this to be held to Java 6 compliance.
    @@ -3143,11 +3190,11 @@ Bundle bundle = client.search().forResource(Patient.class) 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! + the parser is unable to parse. Thanks to Jim Steel for the suggestion! Deprecate fluent client search operations without an explicit declaration of the - bundle type being used. This also means that in a client + bundle type being used. This also means that in a client .search()]]> operation, the .returnBundle(Bundle.class)]]> @@ -3157,7 +3204,7 @@ Bundle bundle = client.search().forResource(Patient.class) Server now respects the parameter _format=application/xml+fhir"]]> which is technically invalid since the + should be escaped, but is likely to be used. Also, - a parameter of _format=html]]> can now be used, which + a parameter of _format=html]]> 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! @@ -3185,7 +3232,7 @@ Bundle bundle = client.search().forResource(Patient.class) 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! + providing a unit test! JPA server transactions sometimes created an incorrect resource reference @@ -3197,16 +3244,16 @@ Bundle bundle = client.search().forResource(Patient.class) Prefer: return=representation]]> 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! + to Ewout Kramer for the idea! - DSTU3 structures now have + DSTU3 structures now have setFoo(List)]]> - and + and setGetFooFirstRep()]]> methods, bringing them back to parity with the HAPI DSTU2 structures. Thanks to Rahul Somasunderam and - Claude Nanjo for the suggestions! + Claude Nanjo for the suggestions! JPA server has now been refactored to use the @@ -3220,7 +3267,7 @@ Bundle bundle = client.search().forResource(Patient.class) processing to be aborted. - LoggingInterceptor on server has a new parameter + LoggingInterceptor on server has a new parameter ${requestBodyFhir}]]> which logs the entire request body. @@ -3268,7 +3315,7 @@ Bundle bundle = client.search().forResource(Patient.class) When encoding JSON resource, the parser will now always - ensure that XHTML narrative content has an + 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 @@ -3276,7 +3323,7 @@ Bundle bundle = client.search().forResource(Patient.class) Server failed to invoke operations when the name - was escaped (%24execute instead of $execute). + was escaped (%24execute instead of $execute). Thanks to Michael Lawley for reporting! @@ -3296,7 +3343,7 @@ Bundle bundle = client.search().forResource(Patient.class) 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 + 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. @@ -3317,9 +3364,9 @@ Bundle bundle = client.search().forResource(Patient.class) JPA server can now be configured to allow external references (i.e. references that - point to resources on other servers). See + point to resources on other servers). See JPA Documentation]]> for information on - how to use this. Thanks to Naminder Soorma for the suggestion! + how to use this. Thanks to Naminder Soorma for the suggestion! When posting a resource to a server that contains an invalid value in a boolean field @@ -3332,11 +3379,11 @@ Bundle bundle = client.search().forResource(Patient.class) here]]> - JSON parser was incorrectly encoding resource language attribute in JSON as an - array instead of a string. Thanks to David Hay for reporting! + JSON parser was incorrectly encoding resource language attribute in JSON as an + array instead of a string. Thanks to David Hay for reporting! - Sébastien Rivière contributed an excellent pull request which adds a + Sébastien Rivière contributed an excellent pull request which adds a number of enhancements to JAX-RS module: @@ -3348,12 +3395,12 @@ Bundle bundle = client.search().forResource(Patient.class) ]]> - FhirTerser.cloneInto method failed to clone correctly if the source + 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! - Update DSTU2 InstanceValidator to latest version from upstream + Update DSTU2 InstanceValidator to latest version from upstream Web Testing UI was not able to correctly post an STU3 transaction @@ -3378,7 +3425,8 @@ Bundle bundle = client.search().forResource(Patient.class) reporting! - Update STU3 client and server to use the new sort parameter style (param1,-param2,param). Thanks to GitHub user @euz1e4r for + Update STU3 client and server to use the new sort parameter style (param1,-param2,param). Thanks to GitHub + user @euz1e4r for reporting! @@ -3387,7 +3435,7 @@ Bundle bundle = client.search().forResource(Patient.class) Fluent client searches with date parameters were not correctly using - new prefix style (e.g. gt) instead of old one (e.g. >) + new prefix style (e.g. gt) instead of old one (e.g. >) Some built-in v3 code systems for STU3 resources were missing @@ -3404,7 +3452,7 @@ Bundle bundle = client.search().forResource(Patient.class) on Zulip with Grahame that requests that have a parameter of _format=json]]> or _format=xml]]> will output raw FHIR content - instead of HTML highlighting the content as they previously did. + instead of HTML highlighting the content as they previously did. HTML content can now be forced via the (previously existing) _format=html]]> or via the two newly added values @@ -3440,7 +3488,7 @@ Bundle bundle = client.search().forResource(Patient.class) for reporting! - Server parameters annotated with + Server parameters annotated with @Since]]> or @Count]]> @@ -3451,7 +3499,7 @@ Bundle bundle = client.search().forResource(Patient.class) the way other server parameters worked. - Server now supports the _at parameter (including multiple repetitions) + Server now supports the _at parameter (including multiple repetitions) for history operation Add server interceptor framework, and new interceptor for logging incoming - requests. + requests. Add server validation framework for validating resources against the FHIR schemas and schematrons Tester UI created double _format and _pretty param entries in searches. Thanks to Gered King of University - Health Network for reporting! + Health Network for reporting! Create method was incorrectly returning an HTTP 204 on sucessful completion, but - should be returning an HTTP 200 per the FHIR specification. Thanks to wanghaisheng - for reporting! + should be returning an HTTP 200 per the FHIR specification. Thanks to wanghaisheng + for reporting! FHIR Tester UI now correctly sends UTF-8 charset in responses so that message payloads containing @@ -5438,7 +5504,7 @@ Bundle bundle = client.search().forResource(Patient.class) Orion for reporting this! - Contained/included resource instances received by a client are now automatically + Contained/included resource instances received by a client are now automatically added to any ResourceReferenceDt instancea in other resources which reference them. @@ -5453,7 +5519,7 @@ Bundle bundle = client.search().forResource(Patient.class) so the resource language was difficult to access. - JSON Parser now gives a more friendly error message if it tries to parse JSON with invalid use + JSON Parser now gives a more friendly error message if it tries to parse JSON with invalid use of single quotes @@ -5479,11 +5545,11 @@ Bundle bundle = client.search().forResource(Patient.class) Date/time types did not correctly parse values in the format "yyyymmdd" (although the FHIR-defined format is "yyyy-mm-dd" anyhow, and this is correctly handled). Thanks to Jeffrey Ting of Systems Made Simple - for reporting! + for reporting! Server search method for an unnamed query gets called if the client requests a named query - with the same parameter list. Thanks to Neal Acharya of University Health Network for reporting! + with the same parameter list. Thanks to Neal Acharya of University Health Network for reporting! Category header (for tags) is correctly read in client for "read" operation @@ -5505,17 +5571,19 @@ Bundle bundle = client.search().forResource(Patient.class) Rename NotImpementedException to NotImplementedException (to correct typo) - Server setUseBrowserFriendlyContentType setting also respected for errors (e.g. OperationOutcome with 4xx/5xx status) + Server setUseBrowserFriendlyContentType setting also respected for errors (e.g. OperationOutcome with + 4xx/5xx status) Fix performance issue in date/time datatypes where pattern matchers were not static - Server now gives a more helpful error message if a @Read method has a search parameter (which is invalid, but + Server now gives a more helpful error message if a @Read method has a search parameter (which is invalid, + but previously lead to a very unhelpful error message). Thanks to Tahura Chaudhry of UHN for reporting! - Resource of type "List" failed to parse from a bundle correctly. Thanks to David Hay of Orion Health + Resource of type "List" failed to parse from a bundle correctly. Thanks to David Hay of Orion Health for reporting! @@ -5523,18 +5591,18 @@ Bundle bundle = client.search().forResource(Patient.class) If a server defines a method with parameter "_id", incoming search requests for that method may - get delegated to the wrong method. Thanks to Neal Acharya for reporting! + get delegated to the wrong method. Thanks to Neal Acharya for reporting! - SecurityEvent.Object structural element has been renamed to - SecurityEvent.ObjectElement to avoid conflicting names with the + SecurityEvent.Object structural element has been renamed to + SecurityEvent.ObjectElement to avoid conflicting names with the java Object class. Thanks to Laurie Macdougall-Sookraj of UHN for - reporting! + reporting! Text/narrative blocks that were created with a non-empty namespace prefix (e.g. <xhtml:div xmlns:xhtml="...">...</xhtml:div>) - failed to encode correctly (prefix was missing in encoded resource) + failed to encode correctly (prefix was missing in encoded resource) Resource references previously encoded their children (display and reference) @@ -5560,7 +5628,7 @@ Bundle bundle = client.search().forResource(Patient.class) (type)ClientParam, for example: StringClientParam, TokenClientParam, etc.
    ]]> All renamed classes have been retained and deprocated, so this change should not cause any issues - for existing applications but those applications should be refactored to use the + for existing applications but those applications should be refactored to use the new parameters when possible.
    @@ -5584,27 +5652,28 @@ Bundle bundle = client.search().forResource(Patient.class) for configurable logging, capturing requests and responses, and HTTP basic auth. - Transaction client invocations with XML encoding were using the wrong content type ("application/xml+fhir" instead + Transaction client invocations with XML encoding were using the wrong content type ("application/xml+fhir" + instead of the correct "application/atom+xml"). Thanks to David Hay of Orion Health for surfacing this one! Bundle entries now support a link type of "search". Thanks to David Hay for the suggestion! - If a client receives a non 2xx response (e.g. HTTP 500) and the response body is a text/plain message or - an OperationOutcome resource, include the message in the exception message so that it will be - more conveniently displayed in logs and other places. Thanks to Neal Acharya for the suggestion! + If a client receives a non 2xx response (e.g. HTTP 500) and the response body is a text/plain message or + an OperationOutcome resource, include the message in the exception message so that it will be + more conveniently displayed in logs and other places. Thanks to Neal Acharya for the suggestion! - Read invocations in the client now process the "Content-Location" header and use it to - populate the ID of the returned resource. Thanks to Neal Acharya for the suggestion! + Read invocations in the client now process the "Content-Location" header and use it to + populate the ID of the returned resource. Thanks to Neal Acharya for the suggestion! - Fix issue where vread invocations on server incorrectly get routed to instance history method if one is - defined. Thanks to Neal Acharya from UHN for surfacing this one! + Fix issue where vread invocations on server incorrectly get routed to instance history method if one is + defined. Thanks to Neal Acharya from UHN for surfacing this one! - Binary reads on a server not include the Content-Disposition header, to prevent HTML in binary + Binary reads on a server not include the Content-Disposition header, to prevent HTML in binary blobs from being used for nefarious purposes. See FHIR Tracker Bug 3298]]> for more information. @@ -5613,7 +5682,7 @@ Bundle bundle = client.search().forResource(Patient.class) Support has been added for using an HTTP proxy for outgoing requests. - Fix: Primitive extensions declared against custom resource types + Fix: Primitive extensions declared against custom resource types are encoded even if they have no value. Thanks to David Hay of Orion for reporting this! @@ -5622,16 +5691,16 @@ Bundle bundle = client.search().forResource(Patient.class) space (e.g. a WAR file with a space in the name) failed to work correctly. Thanks to David Hay of Orion for reporting this!
    - + - BREAKING CHANGE:]]>: IdDt has been modified so that it + BREAKING CHANGE:]]>: IdDt has been modified so that it contains a partial or complete resource identity. Previously it contained only the simple alphanumeric id of the resource (the part at the end of the "read" URL for that resource) but it can now contain a complete URL or even a partial URL (e.g. "Patient/123") and can optionally contain a version (e.g. "Patient/123/_history/456"). New methods have been added to this datatype which provide just the numeric portion. See the JavaDoc - for more information. + for more information. API CHANGE:]]>: Most elements in the HAPI FHIR model contain @@ -5663,7 +5732,8 @@ Bundle bundle = client.search().forResource(Patient.class) Support for Query resources fixed (in parser) - Nested contained resources (e.g. encoding a resource with a contained resource that itself contains a resource) + Nested contained resources (e.g. encoding a resource with a contained resource that itself contains a + resource) now parse and encode correctly, meaning that all contained resources are placed in the "contained" element of the root resource, and the parser looks in the root resource for all container levels when stitching contained resources back together. @@ -5681,26 +5751,27 @@ Bundle bundle = client.search().forResource(Patient.class) Don't fail on narrative blocks in JSON resources with only an XML declaration but no content (these are - produced by the Health Intersections server) + produced by the Health Intersections server) - Server now automatically compresses responses if the client indicates support + Server now automatically compresses responses if the client indicates support - Server failed to support optional parameters when type is String and :exact qualifier is used + Server failed to support optional parameters when type is String and :exact qualifier is used - Read method in client correctly populated resource ID in returned object + Read method in client correctly populated resource ID in returned object Support added for deleted-entry by/name, by/email, and comment from Tombstones spec - - - + + + - + - +