-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
changes.xml
5094 lines (5093 loc) · 236 KB
/
changes.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?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.4.0" date="TBD">
<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.12.Final -> 5.2.16.Final</li>
<li>Javassist (JPA): 3.20.0-GA -> 3.22.0-GA</li>
</ul>
]]>
</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">
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>
</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 -> 5.2.12.Final</li>
<li>Spring (JPA): 5.0.0 -> 5.0.3</li>
<li>Thymeleaf (Web Tespage Overlay): 3.0.7.RELEASE -> 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 -> 5.0.0</li>
<li>Jackson (JPA): 2.8.1 -> 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 `X-Security-Context` 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 -> 2.8.1</li>
<li>Commons-lang3 (Everywhere): 3.5 -> 3.6</li>
<!--<li>Saxon-HE (Validator): 9.5.1-5 -> 9.8.0-3</li>-->
<li>Apache HttpClient (FHIR Client): 4.5.2 -> 4.5.3</li>
<li>Apache HttpCore (FHIR Client): 4.4.5 -> 4.4.6</li>
<li>Phloc Commons (Schematron Validator): 4.4.6 -> 4.4.11</li>
<li>Hibernate (JPA): 5.2.9 -> 5.2.10</li>
<li>Hibernate Search (JPA): 5.7.0 -> 5.7.1</li>
<li>Spring (JPA): 4.3.7 -> 4.3.10</li>
<li>Spring Data JPA (JPA): 1.10.4 -> 1.11.6</li>
<li>Guava (JPA): 22.0 -> 23.0</li>
<li>Thymeleaf (Testpage Overlay): 3.0.2 -> 3.0.7</li>
<li>OkHttp (Android): 3.4.1 -> 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">