implementing most

This commit is contained in:
leif stawnyczy 2024-07-30 17:56:26 -04:00
parent baf3933fbf
commit 5671c8c09b
3 changed files with 53 additions and 10 deletions

View File

@ -29,6 +29,7 @@ import ca.uhn.fhir.rest.client.api.IHttpClient;
import ca.uhn.fhir.rest.client.api.IHttpRequest; import ca.uhn.fhir.rest.client.api.IHttpRequest;
import ca.uhn.fhir.rest.client.impl.BaseHttpClientInvocation; import ca.uhn.fhir.rest.client.impl.BaseHttpClientInvocation;
import ca.uhn.fhir.rest.client.method.MethodUtil; import ca.uhn.fhir.rest.client.method.MethodUtil;
import ca.uhn.fhir.rest.param.HttpClientRequestParameters;
import okhttp3.Call; import okhttp3.Call;
import okhttp3.FormBody; import okhttp3.FormBody;
import okhttp3.MediaType; import okhttp3.MediaType;
@ -127,6 +128,15 @@ public class OkHttpRestfulClient implements IHttpClient {
return myRequest; return myRequest;
} }
@Override
public IHttpRequest createRequest(HttpClientRequestParameters theParameters) {
initBaseRequest(
theParameters.getFhirContext(),
theParameters.getEncodingEnum(),
createPostBody(theParameters.getByteContents(), theParameters.getContents()));
return myRequest;
}
private void addHeadersToRequest( private void addHeadersToRequest(
OkHttpRestfulRequest theHttpRequest, EncodingEnum theEncoding, FhirContext theContext) { OkHttpRestfulRequest theHttpRequest, EncodingEnum theEncoding, FhirContext theContext) {
if (myHeaders != null) { if (myHeaders != null) {

View File

@ -132,12 +132,6 @@ public class ApacheHttpClient extends BaseHttpClient implements IHttpClient {
return new ApacheHttpRequest(myClient, request); return new ApacheHttpRequest(myClient, request);
} }
// @Override
// public IHttpRequest createHttpRequest(CreateHttpRequestParameters theCreateHttpRequestParameters) {
// HttpRequestBase request = constructRequestBase(theCreateHttpRequestParameters);
// return new ApacheHttpRequest(myClient, request);
// }
@Override @Override
protected IHttpRequest createHttpRequest() { protected IHttpRequest createHttpRequest() {
return createHttpRequest((HttpEntity) null); return createHttpRequest((HttpEntity) null);

View File

@ -29,6 +29,7 @@ import ca.uhn.fhir.rest.client.api.IHttpClient;
import ca.uhn.fhir.rest.client.api.IHttpRequest; import ca.uhn.fhir.rest.client.api.IHttpRequest;
import ca.uhn.fhir.rest.client.impl.BaseHttpClientInvocation; import ca.uhn.fhir.rest.client.impl.BaseHttpClientInvocation;
import ca.uhn.fhir.rest.client.method.MethodUtil; import ca.uhn.fhir.rest.client.method.MethodUtil;
import ca.uhn.fhir.rest.param.HttpClientRequestParameters;
import jakarta.ws.rs.client.Client; import jakarta.ws.rs.client.Client;
import jakarta.ws.rs.client.Entity; import jakarta.ws.rs.client.Entity;
import jakarta.ws.rs.client.Invocation.Builder; import jakarta.ws.rs.client.Invocation.Builder;
@ -37,9 +38,12 @@ import jakarta.ws.rs.core.MultivaluedHashMap;
import jakarta.ws.rs.core.MultivaluedMap; import jakarta.ws.rs.core.MultivaluedMap;
import org.hl7.fhir.instance.model.api.IBaseBinary; import org.hl7.fhir.instance.model.api.IBaseBinary;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static org.apache.commons.lang3.StringUtils.isNotBlank;
/** /**
* A Http Request based on JaxRs. This is an adapter around the class * A Http Request based on JaxRs. This is an adapter around the class
* {@link jakarta.ws.rs.client.Client Client} * {@link jakarta.ws.rs.client.Client Client}
@ -83,7 +87,14 @@ public class JaxRsHttpClient implements IHttpClient {
@Override @Override
public IHttpRequest createParamRequest( public IHttpRequest createParamRequest(
FhirContext theContext, Map<String, List<String>> theParams, EncodingEnum theEncoding) { FhirContext theContext, Map<String, List<String>> theParams, EncodingEnum theEncoding) {
MultivaluedMap<String, String> map = new MultivaluedHashMap<String, String>(); Entity<Form> entity = getFormEntity(theParams);
JaxRsHttpRequest retVal = createHttpRequest(entity);
addHeadersToRequest(retVal, theEncoding, theContext);
return retVal;
}
private static Entity<Form> getFormEntity(Map<String, List<String>> theParams) {
MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
for (Map.Entry<String, List<String>> nextParam : theParams.entrySet()) { for (Map.Entry<String, List<String>> nextParam : theParams.entrySet()) {
List<String> value = nextParam.getValue(); List<String> value = nextParam.getValue();
for (String s : value) { for (String s : value) {
@ -91,9 +102,7 @@ public class JaxRsHttpClient implements IHttpClient {
} }
} }
Entity<Form> entity = Entity.form(map); Entity<Form> entity = Entity.form(map);
JaxRsHttpRequest retVal = createHttpRequest(entity); return entity;
addHeadersToRequest(retVal, theEncoding, theContext);
return retVal;
} }
@Override @Override
@ -111,6 +120,36 @@ public class JaxRsHttpClient implements IHttpClient {
return result; return result;
} }
@Override
public IHttpRequest createRequest(HttpClientRequestParameters theParameters) {
Map<String, String> additionalHeaders = new HashMap<>();
Entity<?> entity;
switch (theParameters.getRequestTypeEnum()) {
case POST:
case PUT:
if (theParameters.getBaseBinary() != null) {
entity = Entity.entity(theParameters.getBaseBinary().getContentAsBase64(), theParameters.getBaseBinary().getContentType());
} else if (theParameters.getByteContents() != null) {
entity = Entity.entity(theParameters.getByteContents(), theParameters.getContentType() + Constants.HEADER_SUFFIX_CT_UTF_8);
additionalHeaders.put(Constants.HEADER_CONTENT_TYPE, theParameters.getContentType() + Constants.HEADER_SUFFIX_CT_UTF_8);
} else if (isNotBlank(theParameters.getContents())) {
entity = Entity.entity(theParameters.getContents(), theParameters.getContentType() + Constants.HEADER_SUFFIX_CT_UTF_8);
additionalHeaders.put(Constants.HEADER_CONTENT_TYPE, theParameters.getContentType() + Constants.HEADER_SUFFIX_CT_UTF_8);
} else {
entity = getFormEntity(theParameters.getFormParams());
}
break;
default:
entity = null;
}
JaxRsHttpRequest request = createHttpRequest(entity);
for (Map.Entry<String, String> entrySet : additionalHeaders.entrySet()) {
request.addHeader(entrySet.getKey(), entrySet.getValue());
}
addHeadersToRequest(request, theParameters.getEncodingEnum(), theParameters.getFhirContext());
return request;
}
public void addHeadersToRequest(JaxRsHttpRequest theHttpRequest, EncodingEnum theEncoding, FhirContext theContext) { public void addHeadersToRequest(JaxRsHttpRequest theHttpRequest, EncodingEnum theEncoding, FhirContext theContext) {
if (myHeaders != null) { if (myHeaders != null) {
for (Header next : myHeaders) { for (Header next : myHeaders) {