/
changes.xml
4447 lines (4445 loc) 路 205 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.1.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>Spring (JPA): 4.3.10 -> 5.0.0</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.
</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 representatio. 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>
</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">
Fix potential ConcurrentModificationException when adding subscriptions while
running under heavy load. Thanks to Jeff Chung for the pull request!
</action>
<action type="add">
JPA search now uses hibernate ScrollableResults instead of plain JPA List. This
should improve performance over large search results.
</action>
<action type="add">
JPA servers with no paging provider configured, or with a paging provider other than
DatabaseBackedPagingProvider will load all results in a single pass and keep them
in memory. Using this setup is not a good idea unless you know for sure that you
will never have very large queries since it means that all results will be loaded into
memory, but there are valid reasons to need this and it will perform better than
paging to the database in that case. This fix also resolves a NullPointerException
when performing an $everything search. Thanks to Kamal Othman for reporting!
</action>
<action type="fix">
Correct an issue in JPA server on Postgres where searches with a long search URL
were not able to be automatically purged from the database after they were scheduled
for deletion. Thanks to Ravi Kuchi for reporting!
</action>
<action type="add">
Add an optional and configurable hard limit on the total number of meta items
(tags, profiles, and security labels) on an individual resource. The default
is 1000.
</action>
<action type="add">
When executing a search (HTTP GET) as a nested operation in in a transaction or
batch operation, the search now returns a normal page of results with a link to
the next page, like any other search would. Previously the search would return
a small number of results with no paging performed, so this change brings transaction
and batch processing in line with other types of search.
</action>
<action type="add">
JPA server no longer returns an OperationOutcome resource as the first resource
in the Bundle for a response to a batch operation. This behaviour was previously
present, but was not specified in the FHIR specification so it caused confusion and
was inconsistent with behaviour in other servers.
</action>
<action type="fix">
Fix a regression in HAPI FHIR 2.5 JPA server where executing a search in a
transaction or batch operation caused an exception. Thanks to Ravi Kuchi for
reporting!
</action>
<action type="fix">
Correct an issue when processing transactions in JPA server where updates and
creates to resources with tags caused the tags to be created twice in the
database. These duplicates were utomatically filtered upon read so this issue
was not user-visible, but it coule occasionally lead to performance issues
if a resource containing multiple tags was updated many times via
transactions.
</action>
<action type="fix">
JPA server should not allow creation of resources that have a reference to
a resource ID that previously existed but is now deleted. Thanks to Artem
Sopin for reporting!
</action>
<action type="add">
JpaConformanceProvider now has a configuration setting to enable and
disable adding resource counts to the server metadata.
</action>
<action type="fix">
Avoid a deadlock in JPA server when the RequestValidatingInterceptor is being
used and a large number of resources are being created by clients at
the same time.
</action>
<action type="fix">
Testpage Overlay's transaction method did not work if the response
Bundle contained any entries that did not contain a resource (which
is often the case in more recent versions of HAPI). Thanks to Sujay R
for reporting!
</action>
<action type="fix">
When the server was returning a multi-page search result where the
client did not explicitly request an encoding via the _format
parameter, a _format parameter was incorrectly added to the paging
links in the response Bundle. This would often explicitly request
XML encoding because of the browser Accept header even though
this was not what the client wanted.
</action>
<action type="add" issue="651">
Enhancement to ResponseHighlighterInterceptor where links in the resource
body are now converted to actual clickable hyperlinks. Thanks to Eugene Lubarsky
for the pull request!
</action>
<action type="add">
BanUnsupportedHttpMethodsInterceptor has been modified so that it now allows
HTTP PATCH to proceed.
</action>
<action type="add" issue="651">
Enhancement to ResponseHighlighterInterceptor so that it now can be configured
to display the request headers and response headers, and individual lines
may be highlighted.
</action>
<action type="fix">
AuthorizationInterceptor did not permit PATCH operations to proceed even
if the user had write access for the resource being patched.
</action>
<action type="fix" issue="682">
Fix an issue in HapiWorkerContext where structure definitions are
not able to be retrieved if they are referred to by their
relative or logical ID. This affects profile tooling such as
StructureMapUtilities. Thanks to Travis Lukach for reporting and
providing a test case!
</action>
<action type="fix" issue="679">
Add link to DSTU3 JavaDocs from documentation index. Thanks
to Vadim Peretokin for the pull request!
</action>
<action type="fix" issue="680">
Fix a typo in the documentation. Thanks to Saren Currie
for the pull request!
</action>
<action type="add" issue="689">
Add a command line flag to the CLI tool to allow configuration of the
server search result cache timeout period. Thanks to Eugene Lubarsky
for the pull request!
</action>
<action type="fix" issue="683">
Correct an issue with the model classes for STU3 where any classes
containing the @ChildOrder annotation (basically the conformance
resources) will not correctly set the order if any of the
elements are a choice type (i.e. named "foo[x]"). Thanks to
GitHub user @CarthageKing for the pull request!
</action>
<action type="fix">
Fix potential deadlock in stale search deleting task in JPA server, as well
as potential deadlock when executing transactions containing nested
searches when operating under extremely heavy load.
</action>
<action type="add">
JPA server transaction operations now put OperationOutcome resources resulting
from actions in
<![CDATA[<code>Bundle.entry.response.outcome</code>]]>
instead of the previous
<![CDATA[<code>Bundle.entry.resource</code>]]>
</action>
<action type="fix" issue="696">
An issue was corrected where search parameters containing negative numbers
were sometimes treated as positive numbers when processing the search. Thanks
to Keith Boone for reporting and suggesting a fix!
</action>
<action type="fix" issue="699">
Fix an unfortunate typo in the custom structures documentation. Thanks to
Jason Owen for the PR!
</action>
<action type="fix" issue="686">
Correct an issue in the validator (DSTU3/R4) where elements were not always
correctly validated if the element contained only a profiled extension. Thanks
to S茅bastien Rivi猫re for the pull request!
</action>
<action type="add" issue="701">
Testing UI now has a dropdown for modifiers on token search. Thanks
to GitHub user @dconlan for the pull request!
</action>
<action type="add" issue="688">
When parsing an incomplete ID with the form <![CDATA[<code>http://my.org/Foo</code>]]> into
IdDt and IdType objects, the Foo portion will now be treated as the resource type.
Previously my.org was treated as the resource type and Foo was treated as the ID. Thanks
to GitHub user @CarthageKing for the pull request!
</action>
<action type="fix" issue="695">
Extensions on ID datatypes were not parsed or serialized correctly. Thanks to
Stephen Rivi猫re for the pull request!
</action>
<action type="fix" issue="710">
Fix a bug in REST Hook Subscription interceptors which prevented subscriptions
from being activated. Thanks to Jeff Chung for the pull request!
</action>
<action type="fix" issue="708">
Fix broken links in usage pattern diagram on website. Thanks to
Pascal Brandt for the pull request!
</action>
<action type="fix" issue="706">
Fix incorrect FHIR Version Strings that were being outputted and verified in the
client for some versions of FHIR. Thanks to Clayton Bodendein for the
pull request!
</action>
<action type="add">
Add a new constructor to SimpleRequestHeaderInterceptor which allows a complete header
to be passed in (including name and value in one string)
</action>
<action type="add">
REST Hook subscriptions now honour the Subscription.channel.header field
</action>
<action type="add">
DSTU2 validator has been enhanced to do a better job handling
ValueSets with expansions pointing to other ValueSets
</action>
<action type="fix">
REST HOOK subscriptions now use HTTP PUT if there is a payload type
specified, regardless of whether the source event was a create or an
update
</action>
<action type="add" issue="712">
Add appropriate import statements for logging to JPA demo code. Thanks to
Rob Hausam for the pull request!
</action>
<action type="add" issue="700">
Add some browser performance logging to ResponseHighlightingInterceptor. Thanks
to Eugene Lubarsky for the pull request, and for convincing James not to
optimize something that did not need optimizing!
</action>
<action type="add">
A new config property has been added to the JPA seerver DaoConfig called "setAutoCreatePlaceholderReferenceTargets".
This property causes references to unknown resources in created/updated resources to have a placeholder
target resource automatically created.
</action>
<action type="add">
The server LoggingInterceptor has had a variable called
<![CDATA[<code>processingTimeMillis</code>]]> which logs the number
of milliseconds the server took to process a given request since
HAPI FHIR 2.5, but this was not documented. This variable has now been
documented as a part of the available features.
</action>
<action type="add">
A new experimental feature has been added to the JPA server which allows
you to define certain search parameter combinations as being resource keys,
so that a database constraint will prevent more than one resource from
having a matching pair
</action>
<action type="add">
When using the client LoggingInterceptor in non-verbose mode, the
log line showing the server's response HTTP status will now also include
the returned
<![CDATA[<code>Location</code>]]> header value as well
</action>
<action type="add">
A new flag has been add to the CLI upload-definitions command
"-e" which allows skipping particular resources
</action>
<action type="add">
An issue in JPA server has been corrected where if a CodeSystem
resource was deleted, it was not possible to create a new resource
with the same URI as the previous one
</action>
<action type="fix">
When uploading a Bundle resource to the server (as a collection or
document, not as a transaction) the ID was incorrectly stripped from
resources being saved within the Bundle. This has been corrected.
</action>
<action type="add">
Subscriptions in JPA server now support "email" delivery type through the
use of a new interceptor which handles that type
</action>
<action type="add">
JPA server can now be configured to not support
<![CDATA[<code>:missing</code>]]> modifiers, which
increases write performance since fewer indexes are written
</action>
<action type="add">
A new JPA configuration option has been added to the DaoConfig which allows
support for the <![CDATA[<code>:missing</code>]]> search parameter modifier
to be enabled or disabled, and sets the default to DISABLED.
<![CDATA[<br/><br/>]]>
Support for this parameter causes many more index rows to be inserted in the database,
which has a significant impact on write performance. A future HAPI update may allow these
rows to be written asynchronously in order to improve this.
</action>
</release>
<release version="2.5" date="2017-06-08">
<action type="fix">
<![CDATA[
This release includes significant performance enhancements for the
JPA server. Most importantly, the way that searches are performed
has been re-written to allow the server to perform better when
the database has a large number of results in it. The following
enhancements have been made:
<br/><br/>
<ul>
<li>
Searches with multiple search parameters of different
datatypes (e.g. find patients by name and date of birth)
were previously joined in Java code, now the join is
performed by the database which is faster
</li>
<li>
Searches which returned lots of results previously has all
results streamed into memory before anything was returned to
the client. This is particularly slow if you do a search for
(say) "get me all patients" since potentially thousands or
even millions of patients' IDs were loaded into memory
before anything gets returned to the client. HAPI FHIR
now has a multithreaded search coordinator which returns
results to the client as soon as they are available
</li>
<li>
Search results will be cached and reused (so that if a client
does two searches for "get me all patients matching FOO"
with the same FOO in short succession, we won't query the DB
again but will instead reuse the cached results). Note that
this can improve performance, but does mean that searches can
return slightly out of date results. Essentially what this means
is that the latest version of individual resources will always
be returned despite this cacheing, but newly created resources
that should match may not be returned until the cache
expires. By default this cache has been set to one minute,
which should be acceptable for most real-world usage, but
this can be changed or disabled entirely.
</li>
<li>
Updates which do not actually change the contents of the resource
can optionally be prevented from creating a new version
of the resource in the database
</li>
</ul>
<br/><br/>
Existing users should delete the
<code>HFJ_SEARCH</code>,
<code>HFJ_SEARCH_INCLUDE</code>,
and
<code>HFJ_SEARCH_RESULT</code>
tables from your database before upgrading, as the structure of these tables
has changed and old search results can not be reused.
]]>
</action>
<action type="fix" issue="590">
AuthorizationInterceptor did not correctly handle paging requests
(e.g. requests for the second page of results for a search operation).
Thanks to Eeva Turkka for reporting!
</action>
<action type="add">
Add configuration property to DSTU3 FhirInstanceValidator to
allow client code to change unknown extension handling behaviour.
</action>
<action type="fix" issue="630">
Fix concurrency issues in FhirContext that were causing issues when
starting a context up on Android. Thanks to GitHub issue @Jaypeg85 for
the pull request!
</action>
<action type="fix">
Fix an issue in the JPA server if a resource has been previously
saved containing vocabulary that is no longer valid. This only really
happened if you were using a non-final version of FHIR (e.g. using DSTU3
before it was finalized) but if you were in this situation, upgrading HAPI
could cause you to have old codes that no longer exist in your database. This
fix prevents these from blocking you from accesing those resources.
</action>
<action type="add">
CLI now defaults to DSTU3 mode if no FHIR version is specified
</action>
<action type="add">
Server and annotation-client @History annotation now allows DSTU3+ resource
types in the type= property
</action>
<action type="fix" issue="563">
JSON Parser gave a very unhelpful error message (Unknown attribute 'value' found during parse)
when a scalar value was found in a spot where an object is expected. This has been corrected to
include much more information. Thanks to GitHub user @jasminas for reporting!
</action>
<action type="add">
DaoConfig#setInterceptors() has been un-deprecated. It was previously deprecated as
we thought it was not useful, but uses have been identified so it turns out this method
will live after all. Interceptors registered to this method will now be treated
appropriately if they implement IServerOperationInterceptor too.
</action>
<action type="fix">
JPA server did not correctly support searching on a custom search parameter whose
path pointed to an extension, where the client used a chained value.
</action>
<action type="fix">
Fix issue where the JSON parser sometimes did not encode DSTU3 extensions on the root of a
resource which have a value of type reference.
</action>
<action type="add">
Server now respects the If-Modified-Since header and will return an HTTP 304 if appropriate
for read operations.
</action>
<action type="fix">
JPA server did not correctly process :missing qualifier on date parameters
</action>
<action type="fix" issue="633">
AppacheHttpClient did not always respect the charset in the response
Content-Type header. Thanks to Gijsbert van den Brink for the pull request!
</action>
<action type="fix" issue="636">
Fix XhtmlParser to correctly handle hexadecimal escaped literals. Thanks to
Gijsbert van den Brink for the Pull Request!
</action>
<action type="add">
JPA server now has configurable properties that allow referential integrity
to be disabled for both writes and deletes. This is useful in some cases
where data integrity is not wanted or not possible. It can also be useful
if you want to delete large amounts of interconnected data quickly.
<![CDATA[<br/><br/>]]>
A corresponding flag has been added to the CLI tool as well.
</action>
<action type="fix">
JPA server did not correctly support searching on a custom search parameter whose
path pointed to an extension, where the client used a chained value.
</action>
<action type="fix">
Fix dependency on commons-codec 1.4 in hapi-fhir-structures-dstu3, which was
preventing this library from being used on Android because Android includes
an older version of commons-codec.
</action>
<action type="fix">
JPA server failed to index search parameters on paths containing a decimal
data type
</action>
<action type="fix">
Validator incorrectly rejected references where only an identifier was populated
</action>
<action type="fix" issue="649">
Make error handler in the client more tolerant of errors where no response has
been received by the client when the error happens. Thanks to GitHub
user maclema for the pull request!
</action>
<action type="add">
Add a check in JPA server that prevents completely blank tags, profiles, and security labels
from being saved to the database. These were filtered out anyhow when the
result was returned back to the client but they were persisted which
just wasted space.
</action>
<action type="fix" issue="664">
Loading the build-in profile structures (StructureDefinition, ValueSet, etc) is now done in
a synchronized block in order to prevent multiple loads happening if the server processes
multiple validations in parallel threads right after startup. Previously a heavy load could
cause the server to run out of memory and lock up. Thanks to Karl M Davis
for analysis and help fixing this!
</action>
<action type="fix" issue="652">
Fix bad ValueSet URL in DeviceRequest profile definition for STU3 which
was preventing the CLI from uploading definitions correctly. Thanks to
Joel Schneider for the Pull Request!
</action>
<action type="add" issue="656">
Improve handling in JPA server when doing code:above and code:below
searches to use a disjunction of AND and IN in order to avoid failures
under certain conditions. Thanks to Michael Lawley for the pul request!
</action>
<action type="fix" issue="660">
Fix an error where the JPA server sometimes failed occasional requests
with a weird NullPointerException when running under very large concurrent
loads. Thanks to Karl M. Davis for reporting, investigating, and ultimately
finding a solution!
</action>
</release>
<release version="2.4" date="2017-04-19">
<action type="add">
This release brings the DSTU3 structures up to FHIR R3 (FHIR 3.0.1) definitions. Note that
there are very few changes between the DSTU3 structures in HAPI FHIR 2.3 and
the ones in HAPI FHIR 2.4 since the basis for the DSTU3 structures in HAPI FHIR
2.3 was the R3 QA FHIR version (1.9.0) but this is the first release of
HAPI FHIR to support the final/complete R3 release.
</action>
<action type="add">
Bump the version of a few dependencies to the
latest versions (dependent HAPI modules listed in brackets):
<![CDATA[
<ul>
<li>Hibernate (JPA): 5.2.7 -> 5.2.9</li>
<li>Hibernate Search (JPA): 5.5.7.CR1 -> 5.2.7.Final</li>
<li>Hibernate Validator (JPA): 5.3.4 -> 5.4.1</li>
<li>Spring (JPA): 4.3.6 -> 4.3.7</li>
<li>Gson (Core): 2.7 -> 2.8.0</li>
<li>Guava (JPA): 19.0 -> 21.0</li>
<li>SLF4j (Core): 1.7.21 -> 1.7.25</li>
<li>Logback (Core): 1.1.7 -> 1.2.2</li>
</ul>
]]>
</action>
<action type="add" issue="602">
hapi-fhir-jpaserver-example now includes the
<![CDATA[<code>Prefer</code>]]> header in the list of
CORS headers. Thanks to GitHub user @elnin0815 for
the pull request!
</action>
<action type="add">
AuthorizationInterceptor can now allow make read or write
authorization decisions on a resource by instance ID
</action>
<action type="fix" issue="208">
Remove SupportingDocumentation resource from DSTU2 structures. This isn't
actually a resource in FHIR DSTU2 and its inclusion causes errors on clients
that don't understand what it is. Thanks to Travis Cummings and Michele Mottini for pointing this out.
</action>
<action type="fix" issue="607">
Web testing UI displayed an error when a transaction was pasted into the UI
for a DSTU2 server. Thanks to Suresh Kumar for reporting!
</action>
<action type="add">
DaoConfig#setAllowInlineMatchUrlReferences() now defaults to
<![CDATA[<code>true</code>]]> since inline conditional references
are now a part of the FHIR specification. Thanks to Jan D臎dek for
pointing this out!
</action>
<action type="add" issue="609">
hapi-fhir-jpaserver-base now exposes a
<![CDATA[<code>FhirInstanceValidator</code> bean named <code>"myInstanceValidatorDstu2"</code>]]>
for DSTU2. A similar bean for DSTU3 was previously implemented.
</action>
<action type="add" issue="453">
hapi-fhir-jpaserver-example project now defaults to STU3 mode instead of
the previous DSTU2. Thanks to Joel Schneider for the pull request!
</action>
<action type="add" issue="534">
JPA server now has a setting on the DaoConfig to force it to treat
certain reference URLs or reference URL patterns as logical URLs instead
of literal ones, meaning that the server will not try to resolve these
URLs. Thanks to Eeva Turkka for the suggestion!
</action>
<action type="add">
Add a utility method to JPA server:
<![CDATA[<code>IFhirResourceDao#removeTag(IIdType, TagTypeEnum, String, String)</code>]]>. This allows client code to remove tags
from a resource without having a servlet request object in context.
</action>
<action type="fix">
JPA server was unable to process custom search parameters where
the path pointed to an extension containing a reference. Thanks
to Ravi Kuchi for reporting!
</action>
<action type="fix" issue="623">
Servers in DSTU2.1 mode were incorrectly using the legacy mimetypes instead
of the new STU3 ones. Thanks to Michael Lawley for the pull request!
</action>
<action type="add" issue="624">
Add an option to ParserOptions that specifies that when parsing a bundle, the
ID found in the Bundle.entry.fullUrl should not override the ID found
in the Resource.id field. Technically these fields must always supply the
same ID in order for a server to be considered conformant, but this option allows
you to deal with servers which are behaving badly. Thanks to
GitHub user CarthageKing for the pul request!
</action>
<action type="fix" issue="617">
Remove unneccesary whitespace in the text areas on the testing
web UI. Thanks to GitHub user @elnin0815 for the pull request!
</action>
<action type="add" issue="613">
In JAX-RS server it is now possible to change the server exception handler
at runtime without a server restart.
Thanks to Sebastien Riviere for the
pull request!
</action>
<action type="fix" issue="610">
Fix a potential race condition when the FhirContext is being accessed by many threads
at the same time right as it is initializing. Thanks to Ben Spencer for the
pull request!
</action>
</release>
<release version="2.3" date="2017-03-18">
<action type="add">
Bump the version of a few dependencies to the
latest versions (dependent HAPI modules listed in brackets):
<![CDATA[
<ul>
<li>Hibernate (JPA): 5.1.0 -> 5.2.7</li>
<li>Hibernate Search (JPA): 5.5.4 ->p; 5.7.0.CR1</li>
<li>Hibernate Validator (JPA): 5.2.4 ->p; 5.3.4</li>
<li>Spring (JPA): 4.3.1 -> 4.3.6</li>
</ul>
]]>
</action>
<action type="add">
The JPA server now supports custom search parameters in DSTU3
mode. This allows users to create search parameters which contain
custom paths, or even override and disable existing search
parameters.
</action>
<action type="fix">
CLI example uploader couldn't find STU3 examples after CI server
was moved to build.fhir.org
</action>
<action type="fix">
Fix issue in JPA subscription module that prevented purging stale
subscriptions when many were present on Postgres
</action>
<action type="fix" issue="532">
Server interceptor methods were being called twice unnecessarily
by the JPA server, and the DaoConfig interceptor registration
framework was not actually useful. Thanks to GitHub user
@mattiuusitalo for reporting!
</action>
<action type="fix" issue="503">
AuthorizationInterceptor on JPA server did not correctly
apply rules on deleting resources in a specific compartment
because the resource metadata was stripped by the JPA server
before the interceptor could see it. Thanks to
Eeva Turkka for reporting!
</action>
<action type="fix" issue="519">
JPA server exported CapabilityStatement includes
double entries for the _id parameter and uses the
wrong type (string instead of token). Thanks to
Robert Lichtenberger for reporting!
</action>
<action type="add" issue="504">
Custom resource types which extend Binary must not
have declared extensions since this is invalid in
FHIR (and HAPI would just ignore them anyhow). Thanks
to Thomas S Berg for reporting!
</action>
<action type="add">
Standard HAPI zip/tar distributions did not include the project
sources and JavaDoc JARs. Thanks to Keith Boone for pointing
this out!
</action>
<action type="fix">
Server AuthorizationInterceptor always rejects history operation
at the type level even if rules should allow it.
</action>
<action type="fix">
JPA server terminology service was not correctly validating or expanding codes
in SNOMED CT or LOINC code systems. Thanks to David Hay for reporting!
</action>
<action type="fix" issue="539">
Attempting to search for an invalid resource type (e.g. GET base/FooResource) should
return an HTTP 404 and not a 400, per the HTTP spec. Thanks to
GitHub user @CarthageKing for the pull request!
</action>
<action type="fix" issue="544">
When parsing a Bundle containing placeholder fullUrls and references
(e.g. "urn:uuid:0000-0000") the resource reference targets did not get
populated with the given resources. Note that as a part of this
change, <![CDATA[<code>IdType</code> and <code>IdDt</code>]]> have been modified
so that when parsing a placeholder ID, the complete placeholder including the
"urn:uuid:" or "urn:oid:" prefix will be placed into the ID part. Previously,
the prefix was treated as the base URL, which led to strange behaviour
like the placeholder being treated as a real IDs. Thanks to GitHub
user @jodue for reporting!
</action>
<action type="add">
Declared extensions with multiple type() options listed in the @Child
annotation caused a crash on startup. Now this is supported.
</action>
<action type="add">
STU3 XHTML parser for narrative choked if the narrative contained
an <![CDATA[<code>&rsquot;</code>]]> entity string.
</action>
<action type="fix" issue="538">
When parsing a quantity parameter on the server with a
value and units but no system (e.g.
<![CDATA[<code>GET [base]/Observation?value=5.4||mg</code>]]>)
the unit was incorrectly treated as the system. Thanks to
@CarthageKing for the pull request!
</action>
<action type="533">
Correct a typo in the JPA ValueSet ResourceProvider which prevented
successful operation under Spring 4.3. Thanks to
Robbert van Waveren for the pull request!
</action>
<action type="remove">
Deprecate the method
<![CDATA[<code>ICompositeElement#getAllPopulatedChildElementsOfType(Class)</code>]]>
as it is no longer used by HAPI and is just an annoying step
in creating custom structures. Thanks to Allan Bro Hansen
for pointing this out.