Merge branch 'master' into ja_20200206_multitenancy

This commit is contained in:
jamesagnew 2020-04-20 11:07:10 -04:00
commit 95b77af570
12 changed files with 297 additions and 92 deletions

View File

@ -0,0 +1,35 @@
package ca.uhn.fhir.rest.api;
/*-
* #%L
* HAPI FHIR - Core Library
* %%
* Copyright (C) 2014 - 2020 University Health Network
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
/**
* Used by the client to indicate the cascade mode associated with a delete operation.
* <p>
* Note that this is a HAPI FHIR specific feature, and may not work on other platforms.
* </p>
*/
public enum DeleteCascadeModeEnum {
NONE,
DELETE
}

View File

@ -137,7 +137,7 @@ public class DateClientParam extends BaseClientParam implements IParam {
myPrefix = thePrefix; myPrefix = thePrefix;
this.previous = previous; this.previous = previous;
} }
public DateWithPrefix(ParamPrefixEnum thePrefix) { public DateWithPrefix(ParamPrefixEnum thePrefix) {
myPrefix = thePrefix; myPrefix = thePrefix;
} }
@ -176,13 +176,27 @@ public class DateClientParam extends BaseClientParam implements IParam {
dt.setPrecision(TemporalPrecisionEnum.SECOND); dt.setPrecision(TemporalPrecisionEnum.SECOND);
return constructCriterion(dt); return constructCriterion(dt);
} }
@Override
public IDateCriterion millis(Date theValue) {
DateTimeDt dt = new DateTimeDt(theValue);
dt.setPrecision(TemporalPrecisionEnum.MILLI);
return constructCriterion(dt);
}
@Override
public IDateCriterion millis(String theValue) {
DateTimeDt dt = new DateTimeDt(theValue);
dt.setPrecision(TemporalPrecisionEnum.MILLI);
return constructCriterion(dt);
}
private IDateCriterion constructCriterion(DateTimeDt dt) { private IDateCriterion constructCriterion(DateTimeDt dt) {
String valueAsString = dt.getValueAsString(); String valueAsString = dt.getValueAsString();
Criterion criterion = new Criterion(myPrefix, valueAsString); Criterion criterion = new Criterion(myPrefix, valueAsString);
if (previous != null) { if (previous != null) {
criterion.orCriterion = previous; criterion.orCriterion = previous;
} }
return criterion; return criterion;
} }
} }
@ -199,8 +213,12 @@ public class DateClientParam extends BaseClientParam implements IParam {
IDateCriterion second(String theValue); IDateCriterion second(String theValue);
IDateCriterion millis(Date theValue);
IDateCriterion millis(String theValue);
} }
public interface IDateCriterion extends ICriterion<DateClientParam> { public interface IDateCriterion extends ICriterion<DateClientParam> {
IDateSpecifier orAfter(); IDateSpecifier orAfter();

View File

@ -20,10 +20,14 @@ package ca.uhn.fhir.rest.gclient;
* #L% * #L%
*/ */
import ca.uhn.fhir.rest.api.DeleteCascadeModeEnum;
import org.hl7.fhir.instance.model.api.IBaseOperationOutcome; import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
public interface IDeleteTyped extends IClientExecutable<IDeleteTyped, IBaseOperationOutcome> { public interface IDeleteTyped extends IClientExecutable<IDeleteTyped, IBaseOperationOutcome> {
// nothing for now /**
* Delete cascade mode - Note that this is a HAPI FHIR specific feature and is not supported on all servers.
*/
IDeleteTyped cascade(DeleteCascadeModeEnum theDelete);
} }

View File

@ -610,20 +610,34 @@ public class GenericClient extends BaseClient implements IGenericClient {
private IIdType myId; private IIdType myId;
private String myResourceType; private String myResourceType;
private String mySearchUrl; private String mySearchUrl;
private DeleteCascadeModeEnum myCascadeMode;
@Override @Override
public IBaseOperationOutcome execute() { public IBaseOperationOutcome execute() {
Map<String, List<String>> additionalParams = new HashMap<>();
if (myCascadeMode != null) {
switch (myCascadeMode) {
case DELETE:
addParam(getParamMap(), Constants.PARAMETER_CASCADE_DELETE, Constants.CASCADE_DELETE);
break;
default:
case NONE:
break;
}
}
HttpDeleteClientInvocation invocation; HttpDeleteClientInvocation invocation;
if (myId != null) { if (myId != null) {
invocation = DeleteMethodBinding.createDeleteInvocation(getFhirContext(), myId); invocation = DeleteMethodBinding.createDeleteInvocation(getFhirContext(), myId, getParamMap());
} else if (myConditional) { } else if (myConditional) {
invocation = DeleteMethodBinding.createDeleteInvocation(getFhirContext(), myResourceType, getParamMap()); invocation = DeleteMethodBinding.createDeleteInvocation(getFhirContext(), myResourceType, getParamMap());
} else { } else {
invocation = DeleteMethodBinding.createDeleteInvocation(getFhirContext(), mySearchUrl); invocation = DeleteMethodBinding.createDeleteInvocation(getFhirContext(), mySearchUrl, getParamMap());
} }
OperationOutcomeResponseHandler binding = new OperationOutcomeResponseHandler(); OperationOutcomeResponseHandler binding = new OperationOutcomeResponseHandler();
Map<String, List<String>> params = new HashMap<String, List<String>>();
return invoke(params, binding, invocation); return invoke(additionalParams, binding, invocation);
} }
@Override @Override
@ -687,6 +701,11 @@ public class GenericClient extends BaseClient implements IGenericClient {
return this; return this;
} }
@Override
public IDeleteTyped cascade(DeleteCascadeModeEnum theDelete) {
myCascadeMode = theDelete;
return this;
}
} }
@SuppressWarnings({"rawtypes", "unchecked"}) @SuppressWarnings({"rawtypes", "unchecked"})

View File

@ -65,18 +65,18 @@ public class DeleteMethodBinding extends BaseOutcomeReturningMethodBindingWithRe
@Override @Override
public BaseHttpClientInvocation invokeClient(Object[] theArgs) throws InternalErrorException { public BaseHttpClientInvocation invokeClient(Object[] theArgs) throws InternalErrorException {
IIdType idDt = (IIdType) theArgs[getIdParameterIndex()]; IIdType id = (IIdType) theArgs[getIdParameterIndex()];
if (idDt == null) { if (id == null) {
throw new NullPointerException("ID can not be null"); throw new NullPointerException("ID can not be null");
} }
if (idDt.hasResourceType() == false) { if (id.hasResourceType() == false) {
idDt = idDt.withResourceType(getResourceName()); id = id.withResourceType(getResourceName());
} else if (getResourceName().equals(idDt.getResourceType()) == false) { } else if (getResourceName().equals(id.getResourceType()) == false) {
throw new InvalidRequestException("ID parameter has the wrong resource type, expected '" + getResourceName() + "', found: " + idDt.getResourceType()); throw new InvalidRequestException("ID parameter has the wrong resource type, expected '" + getResourceName() + "', found: " + id.getResourceType());
} }
HttpDeleteClientInvocation retVal = createDeleteInvocation(getContext(), idDt); HttpDeleteClientInvocation retVal = createDeleteInvocation(getContext(), id, Collections.emptyMap());
for (int idx = 0; idx < theArgs.length; idx++) { for (int idx = 0; idx < theArgs.length; idx++) {
IParameter nextParam = getParameters().get(idx); IParameter nextParam = getParameters().get(idx);
@ -86,9 +86,8 @@ public class DeleteMethodBinding extends BaseOutcomeReturningMethodBindingWithRe
return retVal; return retVal;
} }
public static HttpDeleteClientInvocation createDeleteInvocation(FhirContext theContext, IIdType theId) { public static HttpDeleteClientInvocation createDeleteInvocation(FhirContext theContext, IIdType theId, Map<String, List<String>> theAdditionalParams) {
HttpDeleteClientInvocation retVal = new HttpDeleteClientInvocation(theContext, theId); return new HttpDeleteClientInvocation(theContext, theId, theAdditionalParams);
return retVal;
} }
@ -97,13 +96,8 @@ public class DeleteMethodBinding extends BaseOutcomeReturningMethodBindingWithRe
return null; return null;
} }
public static HttpDeleteClientInvocation createDeleteInvocation(FhirContext theContext, String theSearchUrl) { public static HttpDeleteClientInvocation createDeleteInvocation(FhirContext theContext, String theSearchUrl, Map<String, List<String>> theParams) {
HttpDeleteClientInvocation retVal = new HttpDeleteClientInvocation(theContext, theSearchUrl); return new HttpDeleteClientInvocation(theContext, theSearchUrl, theParams);
return retVal;
}
public static HttpDeleteClientInvocation createDeleteInvocation(FhirContext theContext, String theResourceType, Map<String, List<String>> theParams) {
return new HttpDeleteClientInvocation(theContext, theResourceType, theParams);
} }
} }

View File

@ -36,19 +36,15 @@ public class HttpDeleteClientInvocation extends BaseHttpClientInvocation {
private String myUrlPath; private String myUrlPath;
private Map<String, List<String>> myParams; private Map<String, List<String>> myParams;
public HttpDeleteClientInvocation(FhirContext theContext, IIdType theId) { public HttpDeleteClientInvocation(FhirContext theContext, IIdType theId, Map<String, List<String>> theAdditionalParams) {
super(theContext); super(theContext);
myUrlPath = theId.toUnqualifiedVersionless().getValue(); myUrlPath = theId.toUnqualifiedVersionless().getValue();
myParams = theAdditionalParams;
} }
public HttpDeleteClientInvocation(FhirContext theContext, String theSearchUrl) { public HttpDeleteClientInvocation(FhirContext theContext, String theSearchUrl, Map<String, List<String>> theParams) {
super(theContext); super(theContext);
myUrlPath = theSearchUrl; myUrlPath = theSearchUrl;
}
public HttpDeleteClientInvocation(FhirContext theContext, String theResourceType, Map<String, List<String>> theParams) {
super(theContext);
myUrlPath = theResourceType;
myParams = theParams; myParams = theParams;
} }
@ -67,10 +63,4 @@ public class HttpDeleteClientInvocation extends BaseHttpClientInvocation {
return createHttpRequest(b.toString(), theEncoding, RequestTypeEnum.DELETE); return createHttpRequest(b.toString(), theEncoding, RequestTypeEnum.DELETE);
} }
@Override
protected IHttpRequest createHttpRequest(String theUrl, EncodingEnum theEncoding, RequestTypeEnum theRequestType) {
// TODO Auto-generated method stub
return super.createHttpRequest(theUrl, theEncoding, theRequestType);
}
} }

View File

@ -23,6 +23,7 @@ package ca.uhn.hapi.fhir.docs;
import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.PerformanceOptionsEnum; import ca.uhn.fhir.context.PerformanceOptionsEnum;
import ca.uhn.fhir.model.api.IResource; import ca.uhn.fhir.model.api.IResource;
import ca.uhn.fhir.rest.api.DeleteCascadeModeEnum;
import ca.uhn.fhir.rest.api.MethodOutcome; import ca.uhn.fhir.rest.api.MethodOutcome;
import ca.uhn.fhir.rest.api.SearchStyleEnum; import ca.uhn.fhir.rest.api.SearchStyleEnum;
import ca.uhn.fhir.rest.api.SummaryEnum; import ca.uhn.fhir.rest.api.SummaryEnum;
@ -262,6 +263,19 @@ public class GenericClientExample {
.execute(); .execute();
// END SNIPPET: deleteConditional // END SNIPPET: deleteConditional
} }
{
// START SNIPPET: deleteCascade
client.delete()
.resourceById(new IdType("Patient/123"))
.cascade(DeleteCascadeModeEnum.DELETE)
.execute();
client.delete()
.resourceConditionalByType("Patient")
.where(Patient.IDENTIFIER.exactly().systemAndIdentifier("system", "00001"))
.execute();
// END SNIPPET: deleteCascade
}
{ {
// START SNIPPET: search // START SNIPPET: search
Bundle response = client.search() Bundle response = client.search()

View File

@ -0,0 +1,5 @@
---
type: add
issue: 1798
title: New mthods have been added to DateClientParam allowing searching at MILLIS precision. Thanks to
David Gileadi for the pull request!

View File

@ -0,0 +1,4 @@
---
type: add
issue: 1804
title: Support for HAPI FHIR cascading deletes has been added to the Generic Client.

View File

@ -181,6 +181,14 @@ Conditional deletions are also possible, which is a form where instead of deleti
{{snippet:classpath:/ca/uhn/hapi/fhir/docs/GenericClientExample.java|deleteConditional}} {{snippet:classpath:/ca/uhn/hapi/fhir/docs/GenericClientExample.java|deleteConditional}}
``` ```
## Cascading Delete
The following snippet shows now to request a cascading delete. Note that this is a HAPI FHIR specific feature and is not supported on all servers.
```java
{{snippet:classpath:/ca/uhn/hapi/fhir/docs/GenericClientExample.java|deleteCascade}}
```
# Update - Instance # Update - Instance
Updating a resource is similar to creating one, except that an ID must be supplied since you are updating a previously existing resource instance. Updating a resource is similar to creating one, except that an ID must be supplied since you are updating a previously existing resource instance.

View File

@ -7,8 +7,13 @@ import ca.uhn.fhir.model.primitive.StringDt;
import ca.uhn.fhir.parser.CustomTypeR4Test; import ca.uhn.fhir.parser.CustomTypeR4Test;
import ca.uhn.fhir.parser.CustomTypeR4Test.MyCustomPatient; import ca.uhn.fhir.parser.CustomTypeR4Test.MyCustomPatient;
import ca.uhn.fhir.parser.IParser; import ca.uhn.fhir.parser.IParser;
import ca.uhn.fhir.rest.api.DeleteCascadeModeEnum;
import ca.uhn.fhir.rest.api.Constants; import ca.uhn.fhir.rest.api.Constants;
import ca.uhn.fhir.rest.api.*; import ca.uhn.fhir.rest.api.EncodingEnum;
import ca.uhn.fhir.rest.api.MethodOutcome;
import ca.uhn.fhir.rest.api.PreferReturnEnum;
import ca.uhn.fhir.rest.api.SortOrderEnum;
import ca.uhn.fhir.rest.api.SortSpec;
import ca.uhn.fhir.rest.client.api.IGenericClient; import ca.uhn.fhir.rest.client.api.IGenericClient;
import ca.uhn.fhir.rest.client.api.ServerValidationModeEnum; import ca.uhn.fhir.rest.client.api.ServerValidationModeEnum;
import ca.uhn.fhir.rest.client.exceptions.FhirClientConnectionException; import ca.uhn.fhir.rest.client.exceptions.FhirClientConnectionException;
@ -31,6 +36,8 @@ import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicStatusLine; import org.apache.http.message.BasicStatusLine;
import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.instance.model.api.IPrimitiveType; import org.hl7.fhir.instance.model.api.IPrimitiveType;
import org.hl7.fhir.r4.model.*; import org.hl7.fhir.r4.model.*;
import org.hl7.fhir.r4.model.Bundle.BundleType; import org.hl7.fhir.r4.model.Bundle.BundleType;
@ -43,13 +50,24 @@ import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.StringReader; import java.io.StringReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.startsWith; import static org.hamcrest.Matchers.startsWith;
import static org.junit.Assert.*; import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@ -115,7 +133,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -125,7 +143,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
pt.getText().setDivAsString("A PATIENT"); pt.getText().setDivAsString("A PATIENT");
Binary bin = new Binary(); Binary bin = new Binary();
bin.setContent(ourCtx.newJsonParser().encodeResourceToString(pt).getBytes("UTF-8")); bin.setContent(ourCtx.newJsonParser().encodeResourceToString(pt).getBytes(StandardCharsets.UTF_8));
bin.setContentType(Constants.CT_FHIR_JSON); bin.setContentType(Constants.CT_FHIR_JSON);
client.create().resource(bin).execute(); client.create().resource(bin).execute();
@ -139,7 +157,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
Binary output = ourCtx.newJsonParser().parseResource(Binary.class, extractBodyAsString(capt)); Binary output = ourCtx.newJsonParser().parseResource(Binary.class, extractBodyAsString(capt));
assertEquals(Constants.CT_FHIR_JSON, output.getContentType()); assertEquals(Constants.CT_FHIR_JSON, output.getContentType());
Patient outputPt = (Patient) ourCtx.newJsonParser().parseResource(new String(output.getContent(), "UTF-8")); Patient outputPt = (Patient) ourCtx.newJsonParser().parseResource(new String(output.getContent(), StandardCharsets.UTF_8));
assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">A PATIENT</div>", outputPt.getText().getDivAsString()); assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">A PATIENT</div>", outputPt.getText().getDivAsString());
} }
@ -158,7 +176,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -222,7 +240,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -262,9 +280,9 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
if (myAnswerCount++ == 0) { if (myAnswerCount++ == 0) {
return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp0)), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp0)), StandardCharsets.UTF_8);
} else { } else {
return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), StandardCharsets.UTF_8);
} }
} }
}); });
@ -311,7 +329,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
myAnswerCount++; myAnswerCount++;
return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), StandardCharsets.UTF_8);
} }
}); });
@ -332,6 +350,78 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(0).getURI().toASCIIString()); assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(0).getURI().toASCIIString());
} }
@Test
public void testDeleteCascade() throws Exception {
final IParser p = ourCtx.newXmlParser();
OperationOutcome oo = new OperationOutcome();
oo.getText().setDivAsString("FINAL VALUE");
ArgumentCaptor<HttpUriRequest> 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"));
when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
@Override
public Header[] answer(InvocationOnMock theInvocation) {
return new Header[]{new BasicHeader(Constants.HEADER_LOCATION, "http://foo.com/base/Patient/222/_history/3")};
}
});
when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override
public ReaderInputStream answer(InvocationOnMock theInvocation) {
myAnswerCount++;
return new ReaderInputStream(new StringReader(p.encodeResourceToString(oo)), StandardCharsets.UTF_8);
}
});
IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
IBaseOperationOutcome outcome;
// Regular delete
outcome = client
.delete()
.resourceById(new IdType("Patient/222"))
.execute();
assertNotNull(outcome);
assertEquals(1, capt.getAllValues().size());
assertEquals("http://example.com/fhir/Patient/222", capt.getAllValues().get(myAnswerCount - 1).getURI().toASCIIString());
assertEquals("DELETE", capt.getAllValues().get(myAnswerCount - 1).getMethod());
// NONE Cascading delete
outcome = client
.delete()
.resourceById(new IdType("Patient/222"))
.cascade(DeleteCascadeModeEnum.NONE)
.execute();
assertNotNull(outcome);
assertEquals(2, capt.getAllValues().size());
assertEquals("http://example.com/fhir/Patient/222", capt.getAllValues().get(myAnswerCount - 1).getURI().toASCIIString());
assertEquals("DELETE", capt.getAllValues().get(myAnswerCount - 1).getMethod());
// DELETE Cascading delete
outcome = client
.delete()
.resourceById(new IdType("Patient/222"))
.cascade(DeleteCascadeModeEnum.DELETE)
.execute();
assertNotNull(outcome);
assertEquals(myAnswerCount, capt.getAllValues().size());
assertEquals("http://example.com/fhir/Patient/222?" + Constants.PARAMETER_CASCADE_DELETE + "=" + Constants.CASCADE_DELETE, capt.getAllValues().get(myAnswerCount - 1).getURI().toASCIIString());
assertEquals("DELETE", capt.getAllValues().get(myAnswerCount - 1).getMethod());
// DELETE Cascading delete on search URL
outcome = client
.delete()
.resourceConditionalByUrl("Patient?identifier=sys|val")
.cascade(DeleteCascadeModeEnum.DELETE)
.execute();
assertNotNull(outcome);
assertEquals(myAnswerCount, capt.getAllValues().size());
assertEquals("http://example.com/fhir/Patient?identifier=sys%7Cval&" + Constants.PARAMETER_CASCADE_DELETE + "=" + Constants.CASCADE_DELETE, capt.getAllValues().get(myAnswerCount - 1).getURI().toASCIIString());
assertEquals("DELETE", capt.getAllValues().get(myAnswerCount - 1).getMethod());
}
@Test @Test
public void testExplicitCustomTypeHistoryType() throws Exception { public void testExplicitCustomTypeHistoryType() throws Exception {
final String respString = CustomTypeR4Test.createBundle(CustomTypeR4Test.createResource(false)); final String respString = CustomTypeR4Test.createBundle(CustomTypeR4Test.createResource(false));
@ -342,7 +432,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -369,7 +459,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -414,7 +504,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -454,7 +544,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -499,7 +589,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
respString = p.encodeResourceToString(conf); respString = p.encodeResourceToString(conf);
} }
myCount++; myCount++;
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -547,7 +637,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
respString = p.encodeResourceToString(conf); respString = p.encodeResourceToString(conf);
} }
myAnswerCount++; myAnswerCount++;
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -587,7 +677,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8")); when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
when(myHttpResponse.getEntity().getContent()).thenAnswer(t -> { when(myHttpResponse.getEntity().getContent()).thenAnswer(t -> {
IParser p = ourCtx.newXmlParser(); IParser p = ourCtx.newXmlParser();
return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), StandardCharsets.UTF_8);
}); });
IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir"); IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
@ -748,7 +838,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -792,7 +882,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -836,7 +926,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -879,7 +969,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse); when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK")); when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", "text/html")); when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", "text/html"));
when(myHttpResponse.getEntity().getContent()).thenAnswer(t -> new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"))); when(myHttpResponse.getEntity().getContent()).thenAnswer(t -> new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8));
when(myHttpResponse.getAllHeaders()).thenReturn(new Header[]{ when(myHttpResponse.getAllHeaders()).thenReturn(new Header[]{
new BasicHeader("content-type", "text/html") new BasicHeader("content-type", "text/html")
}); });
@ -914,7 +1004,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
Parameters inputParams = new Parameters(); Parameters inputParams = new Parameters();
inputParams.addParameter().setName("name").setValue(new BooleanType(true)); inputParams.addParameter().setName("name").setValue(new BooleanType(true));
final byte[] respBytes = new byte[]{0,1,2,3,4,5,6,7,8,9,100}; final byte[] respBytes = new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 100};
ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class); ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse); when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK")); when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
@ -959,7 +1049,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -1013,7 +1103,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() { when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
@Override @Override
public InputStream answer(InvocationOnMock theInvocation) { public InputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -1052,7 +1142,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() { when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
@Override @Override
public InputStream answer(InvocationOnMock theInvocation) { public InputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -1091,7 +1181,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() { when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
@Override @Override
public InputStream answer(InvocationOnMock theInvocation) { public InputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -1129,7 +1219,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() { when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
@Override @Override
public InputStream answer(InvocationOnMock theInvocation) { public InputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -1167,7 +1257,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() { when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
@Override @Override
public InputStream answer(InvocationOnMock theInvocation) { public InputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -1205,7 +1295,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() { when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
@Override @Override
public InputStream answer(InvocationOnMock theInvocation) { public InputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -1252,7 +1342,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(encoded), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(encoded), StandardCharsets.UTF_8);
} }
}); });
@ -1297,7 +1387,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(encoded), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(encoded), StandardCharsets.UTF_8);
} }
}); });
@ -1326,7 +1416,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse); when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK")); when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8")); when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"))); when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), StandardCharsets.UTF_8));
IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir"); IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
@ -1355,7 +1445,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -1386,7 +1476,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -1433,6 +1523,8 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
DateTimeDt now = DateTimeDt.withCurrentTime(); DateTimeDt now = DateTimeDt.withCurrentTime();
String dateString = now.getValueAsString().substring(0, 10); String dateString = now.getValueAsString().substring(0, 10);
DateTimeDt nowWithMillis = new DateTimeDt(new Date(), TemporalPrecisionEnum.MILLI, TimeZone.getDefault());
client.search() client.search()
.forResource("Patient") .forResource("Patient")
.where(Patient.BIRTHDATE.after().day(dateString)) .where(Patient.BIRTHDATE.after().day(dateString))
@ -1505,6 +1597,24 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
assertEquals("http://example.com/fhir/Patient?birthdate=gt" + now.getValueAsString(), UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString())); assertEquals("http://example.com/fhir/Patient?birthdate=gt" + now.getValueAsString(), UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
idx++; idx++;
client.search()
.forResource("Patient")
.where(Patient.BIRTHDATE.after().millis("2011-01-02T22:33:01.123Z"))
.returnBundle(Bundle.class)
.execute();
assertEquals("http://example.com/fhir/Patient?birthdate=gt2011-01-02T22:33:01.123Z", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
idx++;
client.search()
.forResource("Patient")
.where(Patient.BIRTHDATE.after().millis(nowWithMillis.getValue()))
.returnBundle(Bundle.class)
.execute();
assertEquals("http://example.com/fhir/Patient?birthdate=gt" + nowWithMillis.getValueAsString(), UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
idx++;
client.search() client.search()
.forResource("Patient") .forResource("Patient")
.where(Patient.BIRTHDATE.after().now()) .where(Patient.BIRTHDATE.after().now())
@ -1735,12 +1845,12 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse); when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK")); when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8")); when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"))); when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), StandardCharsets.UTF_8));
IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir"); IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
HashMap<String, List<IQueryParameterType>> params = new HashMap<String, List<IQueryParameterType>>(); HashMap<String, List<IQueryParameterType>> params = new HashMap<String, List<IQueryParameterType>>();
params.put("foo", Arrays.asList((IQueryParameterType) new DateParam("2001"))); params.put("foo", Arrays.asList(new DateParam("2001")));
Bundle response = client Bundle response = client
.search() .search()
.forResource(Patient.class) .forResource(Patient.class)
@ -1783,7 +1893,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK")); when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8")); when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"))); when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), StandardCharsets.UTF_8));
// httpResponse = new BasicHttpResponse(statusline, catalog, locale) // httpResponse = new BasicHttpResponse(statusline, catalog, locale)
when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse); when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
@ -1834,7 +1944,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8")); when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
when(myHttpResponse.getEntity().getContent()).thenAnswer(t -> { when(myHttpResponse.getEntity().getContent()).thenAnswer(t -> {
IParser p = ourCtx.newXmlParser(); IParser p = ourCtx.newXmlParser();
return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), StandardCharsets.UTF_8);
}); });
IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir"); IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
@ -1872,7 +1982,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -1925,7 +2035,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8")); when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
when(myHttpResponse.getEntity().getContent()).thenAnswer(t -> { when(myHttpResponse.getEntity().getContent()).thenAnswer(t -> {
IParser p = ourCtx.newXmlParser(); IParser p = ourCtx.newXmlParser();
return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), StandardCharsets.UTF_8);
}); });
IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir"); IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
@ -2004,7 +2114,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -2051,9 +2161,9 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
if (myAnswerCount++ == 0) { if (myAnswerCount++ == 0) {
return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp0)), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp0)), StandardCharsets.UTF_8);
} else { } else {
return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), StandardCharsets.UTF_8);
} }
} }
}); });
@ -2099,7 +2209,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
myAnswerCount++; myAnswerCount++;
return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), StandardCharsets.UTF_8);
} }
}); });
@ -2136,7 +2246,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -2173,7 +2283,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -2194,7 +2304,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -2229,7 +2339,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp0)), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp0)), StandardCharsets.UTF_8);
} }
}); });
@ -2262,7 +2372,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });
@ -2300,7 +2410,7 @@ public class GenericClientR4Test extends BaseGenericClientR4Test {
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() { when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
@Override @Override
public ReaderInputStream answer(InvocationOnMock theInvocation) { public ReaderInputStream answer(InvocationOnMock theInvocation) {
return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")); return new ReaderInputStream(new StringReader(respString), StandardCharsets.UTF_8);
} }
}); });

View File

@ -599,6 +599,10 @@
<id>augla</id> <id>augla</id>
<name>August Langhout</name> <name>August Langhout</name>
</developer> </developer>
<developer>
<id>dgileadi</id>
<name>David Gileadi</name>
</developer>
</developers> </developers>
<licenses> <licenses>