From b7f165019d9009e8a70f9ccc1f33d89d1f4d8891 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 7 Feb 2017 07:00:51 -0500 Subject: [PATCH] Tweak re-indexing --- .../uhn/fhir/rest/client/GenericClient.java | 6 +- .../ca/uhn/fhir/rest/server/Constants.java | 13 +- .../rest/client/GenericClientDstu3Test.java | 155 ++++++++++-------- src/changes/changes.xml | 4 + 4 files changed, 103 insertions(+), 75 deletions(-) diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/client/GenericClient.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/client/GenericClient.java index 94067c7824a..511ff147aad 100644 --- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/client/GenericClient.java +++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/client/GenericClient.java @@ -1889,7 +1889,11 @@ public class GenericClient extends BaseClient implements IGenericClient { } for (Include next : myRevInclude) { - addParam(params, Constants.PARAM_REVINCLUDE, next.getValue()); + if (next.isRecurse()) { + addParam(params, Constants.PARAM_REVINCLUDE_RECURSE, next.getValue()); + } else { + addParam(params, Constants.PARAM_REVINCLUDE, next.getValue()); + } } if (myContext.getVersion().getVersion().isNewerThan(FhirVersionEnum.DSTU2)) { diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/server/Constants.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/server/Constants.java index 2589b6c088a..2080cf3342d 100644 --- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/server/Constants.java +++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/server/Constants.java @@ -40,11 +40,13 @@ public class Constants { public static final String CT_HTML = "text/html"; public static final String CT_HTML_WITH_UTF8 = "text/html" + CHARSET_UTF8_CTSUFFIX; public static final String CT_JSON = "application/json"; + public static final String CT_JSON_PATCH = "application/json-patch+json"; public static final String CT_OCTET_STREAM = "application/octet-stream"; public static final String CT_TEXT = "text/plain"; public static final String CT_TEXT_WITH_UTF8 = CT_TEXT + CHARSET_UTF8_CTSUFFIX; public static final String CT_X_FORM_URLENCODED = "application/x-www-form-urlencoded"; public static final String CT_XML = "application/xml"; + public static final String CT_XML_PATCH = "application/xml-patch+xml"; public static final String ENCODING_GZIP = "gzip"; public static final String EXTOP_VALIDATE = "$validate"; public static final String EXTOP_VALIDATE_MODE = "mode"; @@ -61,10 +63,10 @@ public class Constants { public static final String FORMATS_HTML_XML = "html/xml"; public static final String HEADER_ACCEPT = "Accept"; public static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding"; + public static final String HEADER_ACCEPT_VALUE_JSON_NON_LEGACY = CT_FHIR_JSON_NEW + ";q=1.0, " + CT_FHIR_JSON + ";q=0.9"; + public static final String HEADER_ACCEPT_VALUE_XML_NON_LEGACY = CT_FHIR_XML_NEW + ";q=1.0, " + CT_FHIR_XML + ";q=0.9"; public static final String HEADER_ACCEPT_VALUE_XML_OR_JSON_LEGACY = CT_FHIR_XML + ";q=1.0, " + CT_FHIR_JSON + ";q=1.0"; public static final String HEADER_ACCEPT_VALUE_XML_OR_JSON_NON_LEGACY = CT_FHIR_XML_NEW + ";q=1.0, " + CT_FHIR_JSON_NEW + ";q=1.0, " + HEADER_ACCEPT_VALUE_XML_OR_JSON_LEGACY.replace("1.0", "0.9"); - public static final String HEADER_ACCEPT_VALUE_XML_NON_LEGACY = CT_FHIR_XML_NEW + ";q=1.0, " + CT_FHIR_XML + ";q=0.9"; - public static final String HEADER_ACCEPT_VALUE_JSON_NON_LEGACY = CT_FHIR_JSON_NEW + ";q=1.0, " + CT_FHIR_JSON + ";q=0.9"; public static final String HEADER_ALLOW = "Allow"; public static final String HEADER_AUTHORIZATION = "Authorization"; public static final String HEADER_AUTHORIZATION_VALPREFIX_BASIC = "Basic "; @@ -127,10 +129,12 @@ public class Constants { public static final String PARAM_PAGINGACTION = "_getpages"; public static final String PARAM_PAGINGOFFSET = "_getpagesoffset"; public static final String PARAM_PRETTY = "_pretty"; + public static final String PARAM_PRETTY_VALUE_FALSE = "false"; public static final String PARAM_PRETTY_VALUE_TRUE = "true"; public static final String PARAM_PROFILE = "_profile"; public static final String PARAM_QUERY = "_query"; public static final String PARAM_REVINCLUDE = "_revinclude"; + public static final String PARAM_REVINCLUDE_RECURSE = PARAM_REVINCLUDE+PARAM_INCLUDE_QUALIFIER_RECURSE; public static final String PARAM_SEARCH = "_search"; public static final String PARAM_SECURITY = "_security"; public static final String PARAM_SINCE = "_since"; @@ -156,11 +160,11 @@ public class Constants { public static final int STATUS_HTTP_401_CLIENT_UNAUTHORIZED = 401; public static final int STATUS_HTTP_403_FORBIDDEN = 403; public static final int STATUS_HTTP_404_NOT_FOUND = 404; + public static final int STATUS_HTTP_405_METHOD_NOT_ALLOWED = 405; public static final int STATUS_HTTP_409_CONFLICT = 409; public static final int STATUS_HTTP_410_GONE = 410; public static final int STATUS_HTTP_412_PRECONDITION_FAILED = 412; - public static final int STATUS_HTTP_422_UNPROCESSABLE_ENTITY = 422; public static final int STATUS_HTTP_500_INTERNAL_ERROR = 500; public static final int STATUS_HTTP_501_NOT_IMPLEMENTED = 501; @@ -168,9 +172,6 @@ public class Constants { public static final String TAG_SUBSETTED_SYSTEM = "http://hl7.org/fhir/v3/ObservationValue"; public static final String URL_TOKEN_HISTORY = "_history"; public static final String URL_TOKEN_METADATA = "metadata"; - public static final String CT_JSON_PATCH = "application/json-patch+json"; - public static final String CT_XML_PATCH = "application/xml-patch+xml"; - public static final String PARAM_PRETTY_VALUE_FALSE = "false"; static { CHARSET_UTF8 = Charset.forName(CHARSET_NAME_UTF8); diff --git a/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/client/GenericClientDstu3Test.java b/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/client/GenericClientDstu3Test.java index 81702080fb3..35ef9907a45 100644 --- a/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/client/GenericClientDstu3Test.java +++ b/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/client/GenericClientDstu3Test.java @@ -98,7 +98,7 @@ public class GenericClientDstu3Test { byte[] body = IOUtils.toByteArray(((HttpEntityEnclosingRequestBase) capt.getAllValues().get(0)).getEntity().getContent()); return body; } - + private String extractBodyAsString(ArgumentCaptor capt) throws IOException { String body = IOUtils.toString(((HttpEntityEnclosingRequestBase) capt.getAllValues().get(0)).getEntity().getContent(), "UTF-8"); return body; @@ -120,6 +120,26 @@ public class GenericClientDstu3Test { return capt; } + @Test + public void testRevIncludeRecursive() throws ClientProtocolException, IOException { + ArgumentCaptor capt = prepareClientForSearchResponse(); + + IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir"); + int idx = 0; + + client.search() + .forResource(EpisodeOfCare.class) + .where(EpisodeOfCare.PATIENT.hasId("123")) + .revInclude(Encounter.INCLUDE_EPISODEOFCARE) + .revInclude(Observation.INCLUDE_ENCOUNTER.asRecursive()) + .returnBundle(Bundle.class) + .execute(); + + assertEquals("http://example.com/fhir/EpisodeOfCare?patient=123&_revinclude=Encounter%3Aepisodeofcare&_revinclude%3Arecurse=Observation%3Aencounter", capt.getAllValues().get(idx).getURI().toString()); + idx++; + + } + @Test public void testPatchJsonByIdString() throws Exception { OperationOutcome conf = new OperationOutcome(); @@ -143,20 +163,21 @@ public class GenericClientDstu3Test { String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]"; MethodOutcome outcome = client - .patch() - .withBody(patch) - .withId("Patient/123") - .execute(); + .patch() + .withBody(patch) + .withId("Patient/123") + .execute(); assertEquals("http://example.com/fhir/Patient/123", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString())); assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod()); assertEquals(patch, extractBodyAsString(capt)); assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", "")); idx++; - + OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome(); assertThat(oo.getText().getDivAsString(), containsString("OK!")); } + @Test public void testPatchJsonByIdType() throws Exception { OperationOutcome conf = new OperationOutcome(); @@ -180,20 +201,21 @@ public class GenericClientDstu3Test { String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]"; MethodOutcome outcome = client - .patch() - .withBody(patch) - .withId(new IdType("http://localhost/fhir/Patient/123/_history/234")) - .execute(); + .patch() + .withBody(patch) + .withId(new IdType("http://localhost/fhir/Patient/123/_history/234")) + .execute(); assertEquals("http://example.com/fhir/Patient/123", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString())); assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod()); assertEquals(patch, extractBodyAsString(capt)); assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", "")); idx++; - + OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome(); assertThat(oo.getText().getDivAsString(), containsString("OK!")); } + @Test public void testPatchJsonByConditionalString() throws Exception { OperationOutcome conf = new OperationOutcome(); @@ -217,20 +239,21 @@ public class GenericClientDstu3Test { String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]"; MethodOutcome outcome = client - .patch() - .withBody(patch) - .conditionalByUrl("Patient?foo=bar") - .execute(); + .patch() + .withBody(patch) + .conditionalByUrl("Patient?foo=bar") + .execute(); assertEquals("http://example.com/fhir/Patient?foo=bar", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString())); assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod()); assertEquals(patch, extractBodyAsString(capt)); assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", "")); idx++; - + OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome(); assertThat(oo.getText().getDivAsString(), containsString("OK!")); } + @Test public void testPatchJsonByConditionalParam() throws Exception { OperationOutcome conf = new OperationOutcome(); @@ -254,21 +277,22 @@ public class GenericClientDstu3Test { String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]"; MethodOutcome outcome = client - .patch() - .withBody(patch) - .conditional("Patient").where(Patient.NAME.matches().value("TEST")) - .and(Patient.FAMILY.matches().value("TEST2")) - .execute(); + .patch() + .withBody(patch) + .conditional("Patient").where(Patient.NAME.matches().value("TEST")) + .and(Patient.FAMILY.matches().value("TEST2")) + .execute(); assertEquals("http://example.com/fhir/Patient?name=TEST&family=TEST2", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString())); assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod()); assertEquals(patch, extractBodyAsString(capt)); assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", "")); idx++; - + OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome(); assertThat(oo.getText().getDivAsString(), containsString("OK!")); } + @Test public void testPatchJsonByConditionalParamResourceType() throws Exception { OperationOutcome conf = new OperationOutcome(); @@ -292,21 +316,22 @@ public class GenericClientDstu3Test { String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]"; MethodOutcome outcome = client - .patch() - .withBody(patch) - .conditional(Patient.class).where(Patient.NAME.matches().value("TEST")) - .and(Patient.FAMILY.matches().value("TEST2")) - .execute(); + .patch() + .withBody(patch) + .conditional(Patient.class).where(Patient.NAME.matches().value("TEST")) + .and(Patient.FAMILY.matches().value("TEST2")) + .execute(); assertEquals("http://example.com/fhir/Patient?name=TEST&family=TEST2", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString())); assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod()); assertEquals(patch, extractBodyAsString(capt)); assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", "")); idx++; - + OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome(); assertThat(oo.getText().getDivAsString(), containsString("OK!")); } + @Test public void testPatchXmlByIdString() throws Exception { OperationOutcome conf = new OperationOutcome(); @@ -330,31 +355,31 @@ public class GenericClientDstu3Test { String patch = "false"; MethodOutcome outcome = client - .patch() - .withBody(patch) - .withId("Patient/123") - .execute(); + .patch() + .withBody(patch) + .withId("Patient/123") + .execute(); assertEquals("http://example.com/fhir/Patient/123", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString())); assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod()); assertEquals(patch, extractBodyAsString(capt)); assertEquals(Constants.CT_XML_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", "")); idx++; - + OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome(); assertThat(oo.getText().getDivAsString(), containsString("OK!")); } - + @Test public void testPatchInvalid() throws Exception { IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir"); try { client - .patch() - .withBody("AA") - .withId("Patient/123") - .execute(); + .patch() + .withBody("AA") + .withId("Patient/123") + .execute(); } catch (IllegalArgumentException e) { assertEquals("Unable to determine encoding of patch", e.getMessage()); } @@ -388,7 +413,7 @@ public class GenericClientDstu3Test { assertEquals("http://example.com/fhir/Device?_format=json", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString())); assertEquals("application/fhir+json;q=1.0, application/json+fhir;q=0.9", capt.getAllValues().get(idx).getFirstHeader(Constants.HEADER_ACCEPT).getValue()); idx++; - + //@formatter:off client.setEncoding(EncodingEnum.XML); client.search() @@ -399,7 +424,7 @@ public class GenericClientDstu3Test { assertEquals("http://example.com/fhir/Device?_format=xml", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString())); assertEquals("application/fhir+xml;q=1.0, application/xml+fhir;q=0.9", capt.getAllValues().get(idx).getFirstHeader(Constants.HEADER_ACCEPT).getValue()); idx++; - + } @Test @@ -480,9 +505,7 @@ public class GenericClientDstu3Test { assertArrayEquals(new byte[] { 0, 1, 2, 3, 4 }, ourCtx.newXmlParser().parseResource(Binary.class, extractBodyAsString(capt)).getContent()); } - - - + @SuppressWarnings("unchecked") @Test public void testClientFailures() throws Exception { @@ -592,7 +615,7 @@ public class GenericClientDstu3Test { assertEquals(myAnswerCount, capt.getAllValues().size()); assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(0).getURI().toASCIIString()); assertEquals(Constants.CT_FHIR_XML_NEW, capt.getAllValues().get(0).getFirstHeader("content-type").getValue().replaceAll(";.*", "")); - + assertEquals("http://foo.com/base/Patient/222/_history/3", capt.getAllValues().get(1).getURI().toASCIIString()); } @@ -1027,7 +1050,7 @@ public class GenericClientDstu3Test { assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(idx).getURI().toString()); idx++; - + //@formatter:off client .search() @@ -1053,22 +1076,22 @@ public class GenericClientDstu3Test { idx++; } - + @Test public void testPutDoesntForceAllIdsJson() throws Exception { IParser p = ourCtx.newJsonParser(); - + Patient patient = new Patient(); patient.setId("PATIENT1"); patient.addName().setFamily("PATIENT1"); - + Bundle bundle = new Bundle(); bundle.setId("BUNDLE1"); bundle.addEntry().setResource(patient); - + final String encoded = p.encodeResourceToString(bundle); assertEquals("{\"resourceType\":\"Bundle\",\"id\":\"BUNDLE1\",\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"PATIENT1\",\"name\":[{\"family\":\"PATIENT1\"}]}}]}", encoded); - + ArgumentCaptor capt = ArgumentCaptor.forClass(HttpUriRequest.class); when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse); when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK")); @@ -1251,7 +1274,7 @@ public class GenericClientDstu3Test { .returnBundle(Bundle.class) .execute(); //@formatter:on - assertEquals("http://example.com/fhir/Patient?birthdate=gt"+dateString, capt.getAllValues().get(idx).getURI().toString()); + assertEquals("http://example.com/fhir/Patient?birthdate=gt" + dateString, capt.getAllValues().get(idx).getURI().toString()); idx++; //@formatter:off @@ -1261,7 +1284,7 @@ public class GenericClientDstu3Test { .returnBundle(Bundle.class) .execute(); //@formatter:on - assertEquals("http://example.com/fhir/Patient?birthdate=gt"+dateString, capt.getAllValues().get(idx).getURI().toString()); + assertEquals("http://example.com/fhir/Patient?birthdate=gt" + dateString, capt.getAllValues().get(idx).getURI().toString()); idx++; //@formatter:off @@ -1271,7 +1294,7 @@ public class GenericClientDstu3Test { .returnBundle(Bundle.class) .execute(); //@formatter:on - assertEquals("http://example.com/fhir/Patient?birthdate=ge"+dateString, capt.getAllValues().get(idx).getURI().toString()); + assertEquals("http://example.com/fhir/Patient?birthdate=ge" + dateString, capt.getAllValues().get(idx).getURI().toString()); idx++; //@formatter:off @@ -1281,7 +1304,7 @@ public class GenericClientDstu3Test { .returnBundle(Bundle.class) .execute(); //@formatter:on - assertEquals("http://example.com/fhir/Patient?birthdate=lt"+dateString, capt.getAllValues().get(idx).getURI().toString()); + assertEquals("http://example.com/fhir/Patient?birthdate=lt" + dateString, capt.getAllValues().get(idx).getURI().toString()); idx++; //@formatter:off @@ -1291,7 +1314,7 @@ public class GenericClientDstu3Test { .returnBundle(Bundle.class) .execute(); //@formatter:on - assertEquals("http://example.com/fhir/Patient?birthdate=le"+dateString, capt.getAllValues().get(idx).getURI().toString()); + assertEquals("http://example.com/fhir/Patient?birthdate=le" + dateString, capt.getAllValues().get(idx).getURI().toString()); idx++; //@formatter:off @@ -1301,7 +1324,7 @@ public class GenericClientDstu3Test { .returnBundle(Bundle.class) .execute(); //@formatter:on - assertEquals("http://example.com/fhir/Patient?birthdate="+dateString, capt.getAllValues().get(idx).getURI().toString()); + assertEquals("http://example.com/fhir/Patient?birthdate=" + dateString, capt.getAllValues().get(idx).getURI().toString()); idx++; //@formatter:off @@ -1639,7 +1662,7 @@ public class GenericClientDstu3Test { int idx = 0; Collection values = Arrays.asList("VAL1", "VAL2", "VAL3A,B"); - + //@formatter:off client.search() .forResource("Patient") @@ -1743,7 +1766,6 @@ public class GenericClientDstu3Test { assertEquals("Unable to determing encoding of request (body does not appear to be valid XML or JSON)", e.getMessage()); } - } @Test @@ -2012,7 +2034,7 @@ public class GenericClientDstu3Test { MyPatientWithExtensions patient = new MyPatientWithExtensions(); patient.setId("123"); patient.getText().setDivAsString("OK!"); - + final String respString = p.encodeResourceToString(patient); ArgumentCaptor capt = ArgumentCaptor.forClass(HttpUriRequest.class); when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse); @@ -2028,7 +2050,7 @@ public class GenericClientDstu3Test { IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir"); MyPatientWithExtensions read = client.read().resource(MyPatientWithExtensions.class).withId(new IdType("1")).execute(); assertEquals("
OK!
", read.getText().getDivAsString()); - + // Ensure that we haven't overridden the default type for the name assertFalse(MyPatientWithExtensions.class.isAssignableFrom(Patient.class)); assertFalse(Patient.class.isAssignableFrom(MyPatientWithExtensions.class)); @@ -2037,7 +2059,7 @@ public class GenericClientDstu3Test { IParser parser = ourCtx.newXmlParser(); String encoded = parser.encodeResourceToString(pt); pt = (Patient) parser.parseResource(encoded); - + } @Test @@ -2045,13 +2067,12 @@ public class GenericClientDstu3Test { IParser p = ourCtx.newXmlParser(); Bundle b = new Bundle(); - + MyPatientWithExtensions patient = new MyPatientWithExtensions(); patient.setId("123"); patient.getText().setDivAsString("OK!"); b.addEntry().setResource(patient); - - + final String respString = p.encodeResourceToString(b); ArgumentCaptor capt = ArgumentCaptor.forClass(HttpUriRequest.class); when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse); @@ -2066,7 +2087,7 @@ public class GenericClientDstu3Test { IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir"); Bundle bundle = client.search().forResource(MyPatientWithExtensions.class).returnBundle(Bundle.class).execute(); - + assertEquals(1, bundle.getEntry().size()); assertEquals(MyPatientWithExtensions.class, bundle.getEntry().get(0).getResource().getClass()); } @@ -2082,8 +2103,6 @@ public class GenericClientDstu3Test { assertEquals(expectedUserAgent(), capt.getAllValues().get(0).getHeaders("User-Agent")[0].getValue()); } - - @AfterClass public static void afterClassClearContext() { TestUtil.clearAllStaticFieldsForUnitTest(); @@ -2093,5 +2112,5 @@ public class GenericClientDstu3Test { public static void beforeClass() { ourCtx = FhirContext.forDstu3(); } - + } diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 7b478705ada..65791e5e565 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -123,6 +123,10 @@ Clean up dependencies and remove Eclipse project files from git. Thanks to @sekaijin for the pull request! + + Client revincludes did not include the :recurse modifier. Thanks to + Jenny Meinsma for pointing this out on Zulip! +