refactor timeout control on client

This commit is contained in:
Grahame Grieve 2023-11-24 12:06:18 +11:00
parent d78efdad8f
commit 36361eaa1d
12 changed files with 173 additions and 173 deletions

View File

@ -125,8 +125,8 @@ public class TerminologyClientR2 implements ITerminologyClient {
} }
@Override @Override
public ITerminologyClient setTimeout(int i) { public ITerminologyClient setTimeoutFactor(int i) {
client.setTimeout(i); client.setTimeoutFactor(i);
return this; return this;
} }

View File

@ -123,8 +123,8 @@ public class TerminologyClientR3 implements ITerminologyClient {
} }
@Override @Override
public ITerminologyClient setTimeout(int i) { public ITerminologyClient setTimeoutFactor(int i) {
client.setTimeout(i); client.setTimeoutFactor(i);
return this; return this;
} }

View File

@ -133,8 +133,8 @@ public class TerminologyClientR4 implements ITerminologyClient {
} }
@Override @Override
public ITerminologyClient setTimeout(int i) { // #FIXME public ITerminologyClient setTimeoutFactor(int i) {
client.setTimeoutNormal(i); client.setTimeoutFactor(i);
return this; return this;
} }

View File

@ -117,8 +117,8 @@ public class TerminologyClientR5 implements ITerminologyClient {
} }
@Override @Override
public ITerminologyClient setTimeout(int i) { public ITerminologyClient setTimeoutFactor(int i) {
client.setTimeout(i); client.setTimeoutFactor(i);
return this; return this;
} }

View File

@ -48,6 +48,7 @@ import org.hl7.fhir.dstu2.model.PrimitiveType;
import org.hl7.fhir.dstu2.model.Resource; import org.hl7.fhir.dstu2.model.Resource;
import org.hl7.fhir.dstu2.model.StringType; import org.hl7.fhir.dstu2.model.StringType;
import org.hl7.fhir.dstu2.model.ValueSet; import org.hl7.fhir.dstu2.model.ValueSet;
import org.hl7.fhir.utilities.FHIRBaseToolingClient;
import org.hl7.fhir.utilities.ToolingClientLogger; import org.hl7.fhir.utilities.ToolingClientLogger;
import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.Utilities;
@ -81,15 +82,12 @@ import org.hl7.fhir.utilities.Utilities;
* @author Claude Nanjo * @author Claude Nanjo
* *
*/ */
public class FHIRToolingClient { public class FHIRToolingClient extends FHIRBaseToolingClient {
public static final String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssK"; public static final String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssK";
public static final String DATE_FORMAT = "yyyy-MM-dd"; public static final String DATE_FORMAT = "yyyy-MM-dd";
public static final String hostKey = "http.proxyHost"; public static final String hostKey = "http.proxyHost";
public static final String portKey = "http.proxyPort"; public static final String portKey = "http.proxyPort";
private static final int TIMEOUT_NORMAL = 1;
private static final int TIMEOUT_OPERATION = 2;
private static final int TIMEOUT_OPERATION_LONG = 3;
private String base; private String base;
private ResourceAddress resourceAddress; private ResourceAddress resourceAddress;
@ -179,11 +177,11 @@ public class FHIRToolingClient {
try { try {
if (useOptionsVerb) { if (useOptionsVerb) {
conformance = (Conformance) utils conformance = (Conformance) utils
.issueOptionsRequest(resourceAddress.getBaseServiceUri(), getPreferredResourceFormat(), TIMEOUT_NORMAL) .issueOptionsRequest(resourceAddress.getBaseServiceUri(), getPreferredResourceFormat(), timeoutNormal)
.getReference();// TODO fix this .getReference();// TODO fix this
} else { } else {
conformance = (Conformance) utils.issueGetResourceRequest(resourceAddress.resolveMetadataUri(false), conformance = (Conformance) utils.issueGetResourceRequest(resourceAddress.resolveMetadataUri(false),
getPreferredResourceFormat(), TIMEOUT_NORMAL).getReference(); getPreferredResourceFormat(), timeoutNormal).getReference();
} }
} catch (Exception e) { } catch (Exception e) {
handleException("An error has occurred while trying to fetch the server's conformance statement", e); handleException("An error has occurred while trying to fetch the server's conformance statement", e);
@ -202,11 +200,11 @@ public class FHIRToolingClient {
try { try {
if (useOptionsVerb) { if (useOptionsVerb) {
conformance = (Conformance) utils conformance = (Conformance) utils
.issueOptionsRequest(resourceAddress.getBaseServiceUri(), getPreferredResourceFormat(), TIMEOUT_NORMAL) .issueOptionsRequest(resourceAddress.getBaseServiceUri(), getPreferredResourceFormat(), timeoutNormal)
.getReference();// TODO fix this .getReference();// TODO fix this
} else { } else {
conformance = (Conformance) utils.issueGetResourceRequest(resourceAddress.resolveMetadataUri(true), conformance = (Conformance) utils.issueGetResourceRequest(resourceAddress.resolveMetadataUri(true),
getPreferredResourceFormat(), TIMEOUT_NORMAL).getReference(); getPreferredResourceFormat(), timeoutNormal).getReference();
} }
} catch (Exception e) { } catch (Exception e) {
handleException("An error has occurred while trying to fetch the server's conformance statement", e); handleException("An error has occurred while trying to fetch the server's conformance statement", e);
@ -218,7 +216,7 @@ public class FHIRToolingClient {
ResourceRequest<T> result = null; ResourceRequest<T> result = null;
try { try {
result = utils.issueGetResourceRequest(resourceAddress.resolveGetUriFromResourceClassAndId(resourceClass, id), result = utils.issueGetResourceRequest(resourceAddress.resolveGetUriFromResourceClassAndId(resourceClass, id),
getPreferredResourceFormat(), TIMEOUT_NORMAL); getPreferredResourceFormat(), timeoutNormal);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addSuccessStatus(200);// Only one for now result.addSuccessStatus(200);// Only one for now
@ -237,7 +235,7 @@ public class FHIRToolingClient {
try { try {
result = utils.issueGetResourceRequest( result = utils.issueGetResourceRequest(
resourceAddress.resolveGetUriFromResourceClassAndIdAndVersion(resourceClass, id, version), resourceAddress.resolveGetUriFromResourceClassAndIdAndVersion(resourceClass, id, version),
getPreferredResourceFormat(), TIMEOUT_NORMAL); getPreferredResourceFormat(), timeoutNormal);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405);// unknown result.addErrorStatus(405);// unknown
@ -260,7 +258,7 @@ public class FHIRToolingClient {
try { try {
result = utils.issueGetResourceRequest( result = utils.issueGetResourceRequest(
resourceAddress.resolveGetUriFromResourceClassAndCanonical(resourceClass, canonicalURL), resourceAddress.resolveGetUriFromResourceClassAndCanonical(resourceClass, canonicalURL),
getPreferredResourceFormat(), TIMEOUT_NORMAL); getPreferredResourceFormat(), timeoutNormal);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405);// unknown result.addErrorStatus(405);// unknown
@ -287,7 +285,7 @@ public class FHIRToolingClient {
result = utils.issuePutRequest( result = utils.issuePutRequest(
resourceAddress.resolveGetUriFromResourceClassAndId(resource.getClass(), resource.getId()), resourceAddress.resolveGetUriFromResourceClassAndId(resource.getClass(), resource.getId()),
utils.getResourceAsByteArray(resource, false, isJson(getPreferredResourceFormat())), utils.getResourceAsByteArray(resource, false, isJson(getPreferredResourceFormat())),
getPreferredResourceFormat(), headers, TIMEOUT_OPERATION); getPreferredResourceFormat(), headers, timeoutOperation);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405); result.addErrorStatus(405);
@ -322,7 +320,7 @@ public class FHIRToolingClient {
List<Header> headers = null; List<Header> headers = null;
result = utils.issuePutRequest(resourceAddress.resolveGetUriFromResourceClassAndId(resourceClass, id), result = utils.issuePutRequest(resourceAddress.resolveGetUriFromResourceClassAndId(resourceClass, id),
utils.getResourceAsByteArray(resource, false, isJson(getPreferredResourceFormat())), utils.getResourceAsByteArray(resource, false, isJson(getPreferredResourceFormat())),
getPreferredResourceFormat(), headers, TIMEOUT_OPERATION); getPreferredResourceFormat(), headers, timeoutOperation);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405); result.addErrorStatus(405);
@ -530,10 +528,10 @@ public class FHIRToolingClient {
if (complex) if (complex)
result = utils.issuePostRequest(resourceAddress.resolveOperationURLFromClass(resourceClass, name, ps), result = utils.issuePostRequest(resourceAddress.resolveOperationURLFromClass(resourceClass, name, ps),
utils.getResourceAsByteArray(params, false, isJson(getPreferredResourceFormat())), utils.getResourceAsByteArray(params, false, isJson(getPreferredResourceFormat())),
getPreferredResourceFormat(), TIMEOUT_OPERATION_LONG); getPreferredResourceFormat(), timeoutLong);
else else
result = utils.issueGetResourceRequest(resourceAddress.resolveOperationURLFromClass(resourceClass, name, ps), result = utils.issueGetResourceRequest(resourceAddress.resolveOperationURLFromClass(resourceClass, name, ps),
getPreferredResourceFormat(), TIMEOUT_OPERATION_LONG); getPreferredResourceFormat(), timeoutLong);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addSuccessStatus(200);// Only one for now result.addSuccessStatus(200);// Only one for now
@ -554,7 +552,7 @@ public class FHIRToolingClient {
try { try {
transactionResult = utils.postBatchRequest(resourceAddress.getBaseServiceUri(), transactionResult = utils.postBatchRequest(resourceAddress.getBaseServiceUri(),
utils.getFeedAsByteArray(batch, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(), utils.getFeedAsByteArray(batch, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(),
TIMEOUT_NORMAL + batch.getEntry().size()); timeoutNormal + batch.getEntry().size());
} catch (Exception e) { } catch (Exception e) {
handleException("An error occurred trying to process this transaction request", e); handleException("An error occurred trying to process this transaction request", e);
} }
@ -721,7 +719,7 @@ public class FHIRToolingClient {
ResourceRequest<Resource> result = utils.issuePostRequest( ResourceRequest<Resource> result = utils.issuePostRequest(
resourceAddress.resolveOperationUri(ValueSet.class, "expand"), resourceAddress.resolveOperationUri(ValueSet.class, "expand"),
utils.getResourceAsByteArray(source, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(), utils.getResourceAsByteArray(source, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(),
headers, TIMEOUT_OPERATION_LONG); headers, timeoutLong);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405); result.addErrorStatus(405);
@ -738,7 +736,7 @@ public class FHIRToolingClient {
public Parameters lookupCode(Map<String, String> params) { public Parameters lookupCode(Map<String, String> params) {
ResourceRequest<Resource> result = utils.issueGetResourceRequest( ResourceRequest<Resource> result = utils.issueGetResourceRequest(
resourceAddress.resolveOperationUri(ValueSet.class, "lookup", params), getPreferredResourceFormat(), resourceAddress.resolveOperationUri(ValueSet.class, "lookup", params), getPreferredResourceFormat(),
TIMEOUT_NORMAL); timeoutNormal);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405); result.addErrorStatus(405);
@ -802,7 +800,7 @@ public class FHIRToolingClient {
ResourceRequest<Resource> result = utils.issuePostRequest( ResourceRequest<Resource> result = utils.issuePostRequest(
resourceAddress.resolveOperationUri(null, "closure", new HashMap<String, String>()), resourceAddress.resolveOperationUri(null, "closure", new HashMap<String, String>()),
utils.getResourceAsByteArray(params, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(), utils.getResourceAsByteArray(params, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(),
headers, TIMEOUT_NORMAL); headers, timeoutNormal);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405); result.addErrorStatus(405);
@ -824,7 +822,7 @@ public class FHIRToolingClient {
ResourceRequest<Resource> result = utils.issuePostRequest( ResourceRequest<Resource> result = utils.issuePostRequest(
resourceAddress.resolveOperationUri(null, "closure", new HashMap<String, String>()), resourceAddress.resolveOperationUri(null, "closure", new HashMap<String, String>()),
utils.getResourceAsByteArray(params, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(), utils.getResourceAsByteArray(params, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(),
headers, TIMEOUT_OPERATION); headers, timeoutOperation);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405); result.addErrorStatus(405);
@ -864,7 +862,7 @@ public class FHIRToolingClient {
public Parameters getTerminologyCapabilities() { public Parameters getTerminologyCapabilities() {
return (Parameters) utils return (Parameters) utils
.issueGetResourceRequest(resourceAddress.resolveMetadataTxCaps(), getPreferredResourceFormat(), TIMEOUT_NORMAL) .issueGetResourceRequest(resourceAddress.resolveMetadataTxCaps(), getPreferredResourceFormat(), timeoutNormal)
.getReference(); .getReference();
} }
@ -899,4 +897,5 @@ public class FHIRToolingClient {
public void setLanguage(String lang) { public void setLanguage(String lang) {
utils.setLanguage(lang); utils.setLanguage(lang);
} }
} }

View File

@ -49,6 +49,7 @@ import org.hl7.fhir.dstu2016may.model.PrimitiveType;
import org.hl7.fhir.dstu2016may.model.Resource; import org.hl7.fhir.dstu2016may.model.Resource;
import org.hl7.fhir.dstu2016may.model.StringType; import org.hl7.fhir.dstu2016may.model.StringType;
import org.hl7.fhir.dstu2016may.model.ValueSet; import org.hl7.fhir.dstu2016may.model.ValueSet;
import org.hl7.fhir.utilities.FHIRBaseToolingClient;
import org.hl7.fhir.utilities.ToolingClientLogger; import org.hl7.fhir.utilities.ToolingClientLogger;
import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.Utilities;
@ -82,15 +83,12 @@ import org.hl7.fhir.utilities.Utilities;
* @author Claude Nanjo * @author Claude Nanjo
* *
*/ */
public class FHIRToolingClient { public class FHIRToolingClient extends FHIRBaseToolingClient {
public static final String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssK"; public static final String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssK";
public static final String DATE_FORMAT = "yyyy-MM-dd"; public static final String DATE_FORMAT = "yyyy-MM-dd";
public static final String hostKey = "http.proxyHost"; public static final String hostKey = "http.proxyHost";
public static final String portKey = "http.proxyPort"; public static final String portKey = "http.proxyPort";
private static final int TIMEOUT_NORMAL = 1;
private static final int TIMEOUT_OPERATION = 2;
private static final int TIMEOUT_OPERATION_LONG = 3;
private String base; private String base;
private ResourceAddress resourceAddress; private ResourceAddress resourceAddress;
@ -177,11 +175,11 @@ public class FHIRToolingClient {
try { try {
if (useOptionsVerb) { if (useOptionsVerb) {
conformance = (Conformance) utils conformance = (Conformance) utils
.issueOptionsRequest(resourceAddress.getBaseServiceUri(), getPreferredResourceFormat(), TIMEOUT_NORMAL) .issueOptionsRequest(resourceAddress.getBaseServiceUri(), getPreferredResourceFormat(), timeoutNormal)
.getReference();// TODO fix this .getReference();// TODO fix this
} else { } else {
conformance = (Conformance) utils.issueGetResourceRequest(resourceAddress.resolveMetadataUri(false), conformance = (Conformance) utils.issueGetResourceRequest(resourceAddress.resolveMetadataUri(false),
getPreferredResourceFormat(), TIMEOUT_NORMAL).getReference(); getPreferredResourceFormat(), timeoutNormal).getReference();
} }
} catch (Exception e) { } catch (Exception e) {
handleException("An error has occurred while trying to fetch the server's conformance statement", e); handleException("An error has occurred while trying to fetch the server's conformance statement", e);
@ -200,11 +198,11 @@ public class FHIRToolingClient {
try { try {
if (useOptionsVerb) { if (useOptionsVerb) {
conformance = (Conformance) utils conformance = (Conformance) utils
.issueOptionsRequest(resourceAddress.getBaseServiceUri(), getPreferredResourceFormat(), TIMEOUT_NORMAL) .issueOptionsRequest(resourceAddress.getBaseServiceUri(), getPreferredResourceFormat(), timeoutNormal)
.getReference();// TODO fix this .getReference();// TODO fix this
} else { } else {
conformance = (Conformance) utils.issueGetResourceRequest(resourceAddress.resolveMetadataUri(true), conformance = (Conformance) utils.issueGetResourceRequest(resourceAddress.resolveMetadataUri(true),
getPreferredResourceFormat(), TIMEOUT_NORMAL).getReference(); getPreferredResourceFormat(), timeoutNormal).getReference();
} }
} catch (Exception e) { } catch (Exception e) {
handleException("An error has occurred while trying to fetch the server's conformance statement", e); handleException("An error has occurred while trying to fetch the server's conformance statement", e);
@ -216,7 +214,7 @@ public class FHIRToolingClient {
ResourceRequest<T> result = null; ResourceRequest<T> result = null;
try { try {
result = utils.issueGetResourceRequest(resourceAddress.resolveGetUriFromResourceClassAndId(resourceClass, id), result = utils.issueGetResourceRequest(resourceAddress.resolveGetUriFromResourceClassAndId(resourceClass, id),
getPreferredResourceFormat(), TIMEOUT_NORMAL); getPreferredResourceFormat(), timeoutNormal);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addSuccessStatus(200);// Only one for now result.addSuccessStatus(200);// Only one for now
@ -235,7 +233,7 @@ public class FHIRToolingClient {
try { try {
result = utils.issueGetResourceRequest( result = utils.issueGetResourceRequest(
resourceAddress.resolveGetUriFromResourceClassAndIdAndVersion(resourceClass, id, version), resourceAddress.resolveGetUriFromResourceClassAndIdAndVersion(resourceClass, id, version),
getPreferredResourceFormat(), TIMEOUT_NORMAL); getPreferredResourceFormat(), timeoutNormal);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405);// unknown result.addErrorStatus(405);// unknown
@ -258,7 +256,7 @@ public class FHIRToolingClient {
try { try {
result = utils.issueGetResourceRequest( result = utils.issueGetResourceRequest(
resourceAddress.resolveGetUriFromResourceClassAndCanonical(resourceClass, canonicalURL), resourceAddress.resolveGetUriFromResourceClassAndCanonical(resourceClass, canonicalURL),
getPreferredResourceFormat(), TIMEOUT_NORMAL); getPreferredResourceFormat(), timeoutNormal);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405);// unknown result.addErrorStatus(405);// unknown
@ -285,7 +283,7 @@ public class FHIRToolingClient {
result = utils.issuePutRequest( result = utils.issuePutRequest(
resourceAddress.resolveGetUriFromResourceClassAndId(resource.getClass(), resource.getId()), resourceAddress.resolveGetUriFromResourceClassAndId(resource.getClass(), resource.getId()),
utils.getResourceAsByteArray(resource, false, isJson(getPreferredResourceFormat())), utils.getResourceAsByteArray(resource, false, isJson(getPreferredResourceFormat())),
getPreferredResourceFormat(), headers, TIMEOUT_OPERATION); getPreferredResourceFormat(), headers, timeoutOperation);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405); result.addErrorStatus(405);
@ -320,7 +318,7 @@ public class FHIRToolingClient {
List<Header> headers = null; List<Header> headers = null;
result = utils.issuePutRequest(resourceAddress.resolveGetUriFromResourceClassAndId(resourceClass, id), result = utils.issuePutRequest(resourceAddress.resolveGetUriFromResourceClassAndId(resourceClass, id),
utils.getResourceAsByteArray(resource, false, isJson(getPreferredResourceFormat())), utils.getResourceAsByteArray(resource, false, isJson(getPreferredResourceFormat())),
getPreferredResourceFormat(), headers, TIMEOUT_OPERATION); getPreferredResourceFormat(), headers, timeoutOperation);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405); result.addErrorStatus(405);
@ -529,10 +527,10 @@ public class FHIRToolingClient {
if (complex) if (complex)
result = utils.issuePostRequest(resourceAddress.resolveOperationURLFromClass(resourceClass, name, ps), result = utils.issuePostRequest(resourceAddress.resolveOperationURLFromClass(resourceClass, name, ps),
utils.getResourceAsByteArray(params, false, isJson(getPreferredResourceFormat())), utils.getResourceAsByteArray(params, false, isJson(getPreferredResourceFormat())),
getPreferredResourceFormat(), TIMEOUT_OPERATION_LONG); getPreferredResourceFormat(), timeoutLong);
else else
result = utils.issueGetResourceRequest(resourceAddress.resolveOperationURLFromClass(resourceClass, name, ps), result = utils.issueGetResourceRequest(resourceAddress.resolveOperationURLFromClass(resourceClass, name, ps),
getPreferredResourceFormat(), TIMEOUT_OPERATION_LONG); getPreferredResourceFormat(), timeoutLong);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addSuccessStatus(200);// Only one for now result.addSuccessStatus(200);// Only one for now
@ -558,7 +556,7 @@ public class FHIRToolingClient {
try { try {
transactionResult = utils.postBatchRequest(resourceAddress.getBaseServiceUri(), transactionResult = utils.postBatchRequest(resourceAddress.getBaseServiceUri(),
utils.getFeedAsByteArray(batch, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(), utils.getFeedAsByteArray(batch, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(),
TIMEOUT_NORMAL + batch.getEntry().size()); timeoutNormal + batch.getEntry().size());
} catch (Exception e) { } catch (Exception e) {
handleException("An error occurred trying to process this transaction request", e); handleException("An error occurred trying to process this transaction request", e);
} }
@ -745,7 +743,7 @@ public class FHIRToolingClient {
public Parameters lookupCode(Map<String, String> params) { public Parameters lookupCode(Map<String, String> params) {
ResourceRequest<Resource> result = utils.issueGetResourceRequest( ResourceRequest<Resource> result = utils.issueGetResourceRequest(
resourceAddress.resolveOperationUri(CodeSystem.class, "lookup", params), getPreferredResourceFormat(), resourceAddress.resolveOperationUri(CodeSystem.class, "lookup", params), getPreferredResourceFormat(),
TIMEOUT_NORMAL); timeoutNormal);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405); result.addErrorStatus(405);
@ -809,7 +807,7 @@ public class FHIRToolingClient {
ResourceRequest<Resource> result = utils.issuePostRequest( ResourceRequest<Resource> result = utils.issuePostRequest(
resourceAddress.resolveOperationUri(null, "closure", new HashMap<String, String>()), resourceAddress.resolveOperationUri(null, "closure", new HashMap<String, String>()),
utils.getResourceAsByteArray(params, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(), utils.getResourceAsByteArray(params, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(),
headers, TIMEOUT_NORMAL); headers, timeoutNormal);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405); result.addErrorStatus(405);
@ -831,7 +829,7 @@ public class FHIRToolingClient {
ResourceRequest<Resource> result = utils.issuePostRequest( ResourceRequest<Resource> result = utils.issuePostRequest(
resourceAddress.resolveOperationUri(null, "closure", new HashMap<String, String>()), resourceAddress.resolveOperationUri(null, "closure", new HashMap<String, String>()),
utils.getResourceAsByteArray(params, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(), utils.getResourceAsByteArray(params, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(),
headers, TIMEOUT_OPERATION); headers, timeoutOperation);
result.addErrorStatus(410);// gone result.addErrorStatus(410);// gone
result.addErrorStatus(404);// unknown result.addErrorStatus(404);// unknown
result.addErrorStatus(405); result.addErrorStatus(405);
@ -871,7 +869,7 @@ public class FHIRToolingClient {
public Parameters getTerminologyCapabilities() { public Parameters getTerminologyCapabilities() {
return (Parameters) utils return (Parameters) utils
.issueGetResourceRequest(resourceAddress.resolveMetadataTxCaps(), getPreferredResourceFormat(), TIMEOUT_NORMAL) .issueGetResourceRequest(resourceAddress.resolveMetadataTxCaps(), getPreferredResourceFormat(), timeoutNormal)
.getReference(); .getReference();
} }

View File

@ -26,6 +26,7 @@ import org.hl7.fhir.dstu3.utils.client.network.ByteUtils;
import org.hl7.fhir.dstu3.utils.client.network.Client; import org.hl7.fhir.dstu3.utils.client.network.Client;
import org.hl7.fhir.dstu3.utils.client.network.ResourceRequest; import org.hl7.fhir.dstu3.utils.client.network.ResourceRequest;
import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.utilities.FHIRBaseToolingClient;
import org.hl7.fhir.utilities.FhirPublication; import org.hl7.fhir.utilities.FhirPublication;
import org.hl7.fhir.utilities.ToolingClientLogger; import org.hl7.fhir.utilities.ToolingClientLogger;
import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.Utilities;
@ -58,19 +59,13 @@ import okhttp3.internal.http2.Header;
* *
* @author Claude Nanjo * @author Claude Nanjo
*/ */
public class FHIRToolingClient { public class FHIRToolingClient extends FHIRBaseToolingClient {
public static final String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssK"; public static final String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssK";
public static final String DATE_FORMAT = "yyyy-MM-dd"; public static final String DATE_FORMAT = "yyyy-MM-dd";
public static final String hostKey = "http.proxyHost"; public static final String hostKey = "http.proxyHost";
public static final String portKey = "http.proxyPort"; public static final String portKey = "http.proxyPort";
private static final int TIMEOUT_NORMAL = 1500;
private static final int TIMEOUT_OPERATION = 30000;
private static final int TIMEOUT_ENTRY = 500;
private static final int TIMEOUT_OPERATION_LONG = 60000;
private static final int TIMEOUT_OPERATION_EXPAND = 120000;
private String base; private String base;
private ResourceAddress resourceAddress; private ResourceAddress resourceAddress;
private ResourceFormat preferredResourceFormat; private ResourceFormat preferredResourceFormat;
@ -155,7 +150,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"TerminologyCapabilities", "TerminologyCapabilities",
TIMEOUT_NORMAL).getReference(); timeoutNormal).getReference();
} catch (Exception e) { } catch (Exception e) {
throw new FHIRException("Error fetching the server's terminology capabilities", e); throw new FHIRException("Error fetching the server's terminology capabilities", e);
} }
@ -169,7 +164,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"CapabilitiesStatement", "CapabilitiesStatement",
TIMEOUT_NORMAL).getReference(); timeoutNormal).getReference();
} catch (Exception e) { } catch (Exception e) {
throw new FHIRException("Error fetching the server's conformance statement", e); throw new FHIRException("Error fetching the server's conformance statement", e);
} }
@ -183,7 +178,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"CapabilitiesStatement-Quick", "CapabilitiesStatement-Quick",
TIMEOUT_NORMAL).getReference(); timeoutNormal).getReference();
} catch (Exception e) { } catch (Exception e) {
throw new FHIRException("Error fetching the server's capability statement: "+e.getMessage(), e); throw new FHIRException("Error fetching the server's capability statement: "+e.getMessage(), e);
} }
@ -197,7 +192,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"Read " + resourceClass.getName() + "/" + id, "Read " + resourceClass.getName() + "/" + id,
TIMEOUT_NORMAL); timeoutNormal);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -214,7 +209,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"VRead " + resourceClass.getName() + "/" + id + "/?_history/" + version, "VRead " + resourceClass.getName() + "/" + id + "/?_history/" + version,
TIMEOUT_NORMAL); timeoutNormal);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -231,7 +226,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"Read " + resourceClass.getName() + "?url=" + canonicalURL, "Read " + resourceClass.getName() + "?url=" + canonicalURL,
TIMEOUT_NORMAL); timeoutNormal);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -254,7 +249,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"Update " + resource.fhirType() + "/" + resource.getId(), "Update " + resource.fhirType() + "/" + resource.getId(),
TIMEOUT_OPERATION); timeoutOperation);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -281,7 +276,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"Update " + resource.fhirType() + "/" + id, "Update " + resource.fhirType() + "/" + id,
TIMEOUT_OPERATION); timeoutOperation);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -318,12 +313,12 @@ public class FHIRToolingClient {
client.getLogger().logRequest("POST", url.toString(), null, body); client.getLogger().logRequest("POST", url.toString(), null, body);
} }
result = client.issuePostRequest(url, body, getPreferredResourceFormat(), generateHeaders(), result = client.issuePostRequest(url, body, getPreferredResourceFormat(), generateHeaders(),
"POST " + resourceClass.getName() + "/$" + name, TIMEOUT_OPERATION_LONG); "POST " + resourceClass.getName() + "/$" + name, timeoutLong);
} else { } else {
if (client.getLogger() != null) { if (client.getLogger() != null) {
client.getLogger().logRequest("GET", url.toString(), null, null); client.getLogger().logRequest("GET", url.toString(), null, null);
} }
result = client.issueGetResourceRequest(url, getPreferredResourceFormat(), generateHeaders(), "GET " + resourceClass.getName() + "/$" + name, TIMEOUT_OPERATION_LONG); result = client.issueGetResourceRequest(url, getPreferredResourceFormat(), generateHeaders(), "GET " + resourceClass.getName() + "/$" + name, timeoutLong);
} }
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
@ -345,7 +340,7 @@ public class FHIRToolingClient {
public Bundle transaction(Bundle batch) { public Bundle transaction(Bundle batch) {
Bundle transactionResult = null; Bundle transactionResult = null;
try { try {
transactionResult = client.postBatchRequest(resourceAddress.getBaseServiceUri(), ByteUtils.resourceToByteArray(batch, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(), "transaction", TIMEOUT_OPERATION + (TIMEOUT_ENTRY * batch.getEntry().size())); transactionResult = client.postBatchRequest(resourceAddress.getBaseServiceUri(), ByteUtils.resourceToByteArray(batch, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(), "transaction", timeoutOperation + (timeoutEntry * batch.getEntry().size()));
} catch (Exception e) { } catch (Exception e) {
handleException("An error occurred trying to process this transaction request", e); handleException("An error occurred trying to process this transaction request", e);
} }
@ -359,7 +354,7 @@ public class FHIRToolingClient {
result = client.issuePostRequest(resourceAddress.resolveValidateUri(resourceClass, id), result = client.issuePostRequest(resourceAddress.resolveValidateUri(resourceClass, id),
ByteUtils.resourceToByteArray(resource, false, isJson(getPreferredResourceFormat())), ByteUtils.resourceToByteArray(resource, false, isJson(getPreferredResourceFormat())),
getPreferredResourceFormat(), generateHeaders(), getPreferredResourceFormat(), generateHeaders(),
"POST " + resourceClass.getName() + (id != null ? "/" + id : "") + "/$validate", TIMEOUT_OPERATION_LONG); "POST " + resourceClass.getName() + (id != null ? "/" + id : "") + "/$validate", timeoutLong);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -418,7 +413,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"ValueSet/$expand?url=" + source.getUrl(), "ValueSet/$expand?url=" + source.getUrl(),
TIMEOUT_OPERATION_EXPAND); timeoutExpand);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -436,7 +431,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"CodeSystem/$lookup", "CodeSystem/$lookup",
TIMEOUT_NORMAL); timeoutNormal);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -459,7 +454,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"ValueSet/$expand?url=" + source.getUrl(), "ValueSet/$expand?url=" + source.getUrl(),
TIMEOUT_OPERATION_EXPAND); timeoutExpand);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -483,7 +478,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"ValueSet/$expand?url=" + source.getUrl(), "ValueSet/$expand?url=" + source.getUrl(),
TIMEOUT_OPERATION_EXPAND); timeoutExpand);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -507,7 +502,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"Closure?name=" + name, "Closure?name=" + name,
TIMEOUT_NORMAL); timeoutNormal);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -528,7 +523,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"UpdateClosure?name=" + name, "UpdateClosure?name=" + name,
TIMEOUT_OPERATION); timeoutOperation);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }

View File

@ -25,6 +25,7 @@ import org.hl7.fhir.r4.model.ValueSet;
import org.hl7.fhir.r4.utils.client.network.ByteUtils; import org.hl7.fhir.r4.utils.client.network.ByteUtils;
import org.hl7.fhir.r4.utils.client.network.Client; import org.hl7.fhir.r4.utils.client.network.Client;
import org.hl7.fhir.r4.utils.client.network.ResourceRequest; import org.hl7.fhir.r4.utils.client.network.ResourceRequest;
import org.hl7.fhir.utilities.FHIRBaseToolingClient;
import org.hl7.fhir.utilities.ToolingClientLogger; import org.hl7.fhir.utilities.ToolingClientLogger;
import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.Utilities;
@ -60,19 +61,13 @@ import okhttp3.internal.http2.Header;
* *
* @author Claude Nanjo * @author Claude Nanjo
*/ */
public class FHIRToolingClient { public class FHIRToolingClient extends FHIRBaseToolingClient {
public static final String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssK"; public static final String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssK";
public static final String DATE_FORMAT = "yyyy-MM-dd"; public static final String DATE_FORMAT = "yyyy-MM-dd";
public static final String hostKey = "http.proxyHost"; public static final String hostKey = "http.proxyHost";
public static final String portKey = "http.proxyPort"; public static final String portKey = "http.proxyPort";
private static final int DEFAULT_TIMEOUT_NORMAL = 1500;
private static final int DEFAULT_TIMEOUT_OPERATION = 30000;
private static final int DEFAULT_TIMEOUT_ENTRY = 500;
private static final int DEFAULT_TIMEOUT_OPERATION_LONG = 60000;
private static final int DEFAULT_TIMEOUT_OPERATION_EXPAND = 120000;
private String base; private String base;
private ResourceAddress resourceAddress; private ResourceAddress resourceAddress;
private ResourceFormat preferredResourceFormat; private ResourceFormat preferredResourceFormat;
@ -84,11 +79,6 @@ public class FHIRToolingClient {
private String password; private String password;
private String userAgent; private String userAgent;
private String acceptLang; private String acceptLang;
private int timeoutNormal = DEFAULT_TIMEOUT_NORMAL;
private int timeoutOperation = DEFAULT_TIMEOUT_OPERATION;
private int timeoutEntry = DEFAULT_TIMEOUT_ENTRY;
private int timeoutLong = DEFAULT_TIMEOUT_OPERATION_LONG;
private int timeoutExpand = DEFAULT_TIMEOUT_OPERATION_EXPAND;
// Pass endpoint for client - URI // Pass endpoint for client - URI
public FHIRToolingClient(String baseServiceUrl, String userAgent) throws URISyntaxException { public FHIRToolingClient(String baseServiceUrl, String userAgent) throws URISyntaxException {
@ -640,44 +630,4 @@ public class FHIRToolingClient {
} }
public long getTimeoutNormal() {
return timeoutNormal;
}
public void setTimeoutNormal(int timeoutNormal) {
this.timeoutNormal = timeoutNormal;
}
public long getTimeoutOperation() {
return timeoutOperation;
}
public void setTimeoutOperation(int timeoutOperation) {
this.timeoutOperation = timeoutOperation;
}
public long getTimeoutEntry() {
return timeoutEntry;
}
public void setTimeoutEntry(int timeoutEntry) {
this.timeoutEntry = timeoutEntry;
}
public long getTimeoutLong() {
return timeoutLong;
}
public void setTimeoutLong(int timeoutLong) {
this.timeoutLong = timeoutLong;
}
public long getTimeoutExpand() {
return timeoutExpand;
}
public void setTimeoutExpand(int timeoutExpand) {
this.timeoutExpand = timeoutExpand;
}
} }

View File

@ -39,6 +39,7 @@ import org.hl7.fhir.r4b.utils.client.network.ByteUtils;
import org.hl7.fhir.r4b.utils.client.network.Client; import org.hl7.fhir.r4b.utils.client.network.Client;
import org.hl7.fhir.r4b.utils.client.network.ClientHeaders; import org.hl7.fhir.r4b.utils.client.network.ClientHeaders;
import org.hl7.fhir.r4b.utils.client.network.ResourceRequest; import org.hl7.fhir.r4b.utils.client.network.ResourceRequest;
import org.hl7.fhir.utilities.FHIRBaseToolingClient;
import org.hl7.fhir.utilities.ToolingClientLogger; import org.hl7.fhir.utilities.ToolingClientLogger;
import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.Utilities;
@ -77,19 +78,13 @@ import java.util.*;
* *
* @author Claude Nanjo * @author Claude Nanjo
*/ */
public class FHIRToolingClient { public class FHIRToolingClient extends FHIRBaseToolingClient{
public static final String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssK"; public static final String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssK";
public static final String DATE_FORMAT = "yyyy-MM-dd"; public static final String DATE_FORMAT = "yyyy-MM-dd";
public static final String hostKey = "http.proxyHost"; public static final String hostKey = "http.proxyHost";
public static final String portKey = "http.proxyPort"; public static final String portKey = "http.proxyPort";
private static final int TIMEOUT_NORMAL = 1500;
private static final int TIMEOUT_OPERATION = 30000;
private static final int TIMEOUT_ENTRY = 500;
private static final int TIMEOUT_OPERATION_LONG = 60000;
private static final int TIMEOUT_OPERATION_EXPAND = 120000;
private String base; private String base;
private ResourceAddress resourceAddress; private ResourceAddress resourceAddress;
private ResourceFormat preferredResourceFormat; private ResourceFormat preferredResourceFormat;
@ -151,7 +146,7 @@ public class FHIRToolingClient {
TerminologyCapabilities capabilities = null; TerminologyCapabilities capabilities = null;
try { try {
capabilities = (TerminologyCapabilities) client.issueGetResourceRequest(resourceAddress.resolveMetadataTxCaps(), capabilities = (TerminologyCapabilities) client.issueGetResourceRequest(resourceAddress.resolveMetadataTxCaps(),
getPreferredResourceFormat(), generateHeaders(), "TerminologyCapabilities", TIMEOUT_NORMAL).getReference(); getPreferredResourceFormat(), generateHeaders(), "TerminologyCapabilities", timeoutNormal).getReference();
} catch (Exception e) { } catch (Exception e) {
throw new FHIRException("Error fetching the server's terminology capabilities", e); throw new FHIRException("Error fetching the server's terminology capabilities", e);
} }
@ -162,7 +157,7 @@ public class FHIRToolingClient {
CapabilityStatement conformance = null; CapabilityStatement conformance = null;
try { try {
conformance = (CapabilityStatement) client.issueGetResourceRequest(resourceAddress.resolveMetadataUri(false), conformance = (CapabilityStatement) client.issueGetResourceRequest(resourceAddress.resolveMetadataUri(false),
getPreferredResourceFormat(), generateHeaders(), "CapabilitiesStatement", TIMEOUT_NORMAL).getReference(); getPreferredResourceFormat(), generateHeaders(), "CapabilitiesStatement", timeoutNormal).getReference();
} catch (Exception e) { } catch (Exception e) {
throw new FHIRException("Error fetching the server's conformance statement", e); throw new FHIRException("Error fetching the server's conformance statement", e);
} }
@ -174,7 +169,7 @@ public class FHIRToolingClient {
return capabilities; return capabilities;
try { try {
capabilities = (CapabilityStatement) client.issueGetResourceRequest(resourceAddress.resolveMetadataUri(true), capabilities = (CapabilityStatement) client.issueGetResourceRequest(resourceAddress.resolveMetadataUri(true),
getPreferredResourceFormat(), generateHeaders(), "CapabilitiesStatement-Quick", TIMEOUT_NORMAL) getPreferredResourceFormat(), generateHeaders(), "CapabilitiesStatement-Quick", timeoutNormal)
.getReference(); .getReference();
} catch (Exception e) { } catch (Exception e) {
throw new FHIRException("Error fetching the server's capability statement: " + e.getMessage(), e); throw new FHIRException("Error fetching the server's capability statement: " + e.getMessage(), e);
@ -187,7 +182,7 @@ public class FHIRToolingClient {
try { try {
result = client.issueGetResourceRequest(resourceAddress.resolveGetUriFromResourceClassAndId(resourceClass, id), result = client.issueGetResourceRequest(resourceAddress.resolveGetUriFromResourceClassAndId(resourceClass, id),
getPreferredResourceFormat(), generateHeaders(), "Read " + resourceClass.getName() + "/" + id, getPreferredResourceFormat(), generateHeaders(), "Read " + resourceClass.getName() + "/" + id,
TIMEOUT_NORMAL); timeoutNormal);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), throw new EFhirClientException("Server returned error code " + result.getHttpStatus(),
(OperationOutcome) result.getPayload()); (OperationOutcome) result.getPayload());
@ -204,7 +199,7 @@ public class FHIRToolingClient {
result = client.issueGetResourceRequest( result = client.issueGetResourceRequest(
resourceAddress.resolveGetUriFromResourceClassAndIdAndVersion(resourceClass, id, version), resourceAddress.resolveGetUriFromResourceClassAndIdAndVersion(resourceClass, id, version),
getPreferredResourceFormat(), generateHeaders(), getPreferredResourceFormat(), generateHeaders(),
"VRead " + resourceClass.getName() + "/" + id + "/?_history/" + version, TIMEOUT_NORMAL); "VRead " + resourceClass.getName() + "/" + id + "/?_history/" + version, timeoutNormal);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), throw new EFhirClientException("Server returned error code " + result.getHttpStatus(),
(OperationOutcome) result.getPayload()); (OperationOutcome) result.getPayload());
@ -221,7 +216,7 @@ public class FHIRToolingClient {
result = client.issueGetResourceRequest( result = client.issueGetResourceRequest(
resourceAddress.resolveGetUriFromResourceClassAndCanonical(resourceClass, canonicalURL), resourceAddress.resolveGetUriFromResourceClassAndCanonical(resourceClass, canonicalURL),
getPreferredResourceFormat(), generateHeaders(), "Read " + resourceClass.getName() + "?url=" + canonicalURL, getPreferredResourceFormat(), generateHeaders(), "Read " + resourceClass.getName() + "?url=" + canonicalURL,
TIMEOUT_NORMAL); timeoutNormal);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), throw new EFhirClientException("Server returned error code " + result.getHttpStatus(),
(OperationOutcome) result.getPayload()); (OperationOutcome) result.getPayload());
@ -244,7 +239,7 @@ public class FHIRToolingClient {
resourceAddress.resolveGetUriFromResourceClassAndId(resource.getClass(), resource.getId()), resourceAddress.resolveGetUriFromResourceClassAndId(resource.getClass(), resource.getId()),
ByteUtils.resourceToByteArray(resource, false, isJson(getPreferredResourceFormat())), ByteUtils.resourceToByteArray(resource, false, isJson(getPreferredResourceFormat())),
getPreferredResourceFormat(), generateHeaders(), "Update " + resource.fhirType() + "/" + resource.getId(), getPreferredResourceFormat(), generateHeaders(), "Update " + resource.fhirType() + "/" + resource.getId(),
TIMEOUT_OPERATION); timeoutOperation);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), throw new EFhirClientException("Server returned error code " + result.getHttpStatus(),
(OperationOutcome) result.getPayload()); (OperationOutcome) result.getPayload());
@ -273,7 +268,7 @@ public class FHIRToolingClient {
result = client.issuePutRequest(resourceAddress.resolveGetUriFromResourceClassAndId(resourceClass, id), result = client.issuePutRequest(resourceAddress.resolveGetUriFromResourceClassAndId(resourceClass, id),
ByteUtils.resourceToByteArray(resource, false, isJson(getPreferredResourceFormat())), ByteUtils.resourceToByteArray(resource, false, isJson(getPreferredResourceFormat())),
getPreferredResourceFormat(), generateHeaders(), "Update " + resource.fhirType() + "/" + id, getPreferredResourceFormat(), generateHeaders(), "Update " + resource.fhirType() + "/" + id,
TIMEOUT_OPERATION); timeoutOperation);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), throw new EFhirClientException("Server returned error code " + result.getHttpStatus(),
(OperationOutcome) result.getPayload()); (OperationOutcome) result.getPayload());
@ -311,10 +306,10 @@ public class FHIRToolingClient {
if (complex) { if (complex) {
byte[] body = ByteUtils.resourceToByteArray(params, false, isJson(getPreferredResourceFormat())); byte[] body = ByteUtils.resourceToByteArray(params, false, isJson(getPreferredResourceFormat()));
result = client.issuePostRequest(url, body, getPreferredResourceFormat(), generateHeaders(), result = client.issuePostRequest(url, body, getPreferredResourceFormat(), generateHeaders(),
"POST " + resourceClass.getName() + "/$" + name, TIMEOUT_OPERATION_LONG); "POST " + resourceClass.getName() + "/$" + name, timeoutLong);
} else { } else {
result = client.issueGetResourceRequest(url, getPreferredResourceFormat(), generateHeaders(), result = client.issueGetResourceRequest(url, getPreferredResourceFormat(), generateHeaders(),
"GET " + resourceClass.getName() + "/$" + name, TIMEOUT_OPERATION_LONG); "GET " + resourceClass.getName() + "/$" + name, timeoutLong);
} }
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), throw new EFhirClientException("Server returned error code " + result.getHttpStatus(),
@ -340,7 +335,7 @@ public class FHIRToolingClient {
transactionResult = client.postBatchRequest(resourceAddress.getBaseServiceUri(), transactionResult = client.postBatchRequest(resourceAddress.getBaseServiceUri(),
ByteUtils.resourceToByteArray(batch, false, isJson(getPreferredResourceFormat())), ByteUtils.resourceToByteArray(batch, false, isJson(getPreferredResourceFormat())),
getPreferredResourceFormat(), generateHeaders(), "transaction", getPreferredResourceFormat(), generateHeaders(), "transaction",
TIMEOUT_OPERATION + (TIMEOUT_ENTRY * batch.getEntry().size())); timeoutOperation + (timeoutEntry * batch.getEntry().size()));
} catch (Exception e) { } catch (Exception e) {
handleException("An error occurred trying to process this transaction request", e); handleException("An error occurred trying to process this transaction request", e);
} }
@ -354,7 +349,7 @@ public class FHIRToolingClient {
result = client.issuePostRequest(resourceAddress.resolveValidateUri(resourceClass, id), result = client.issuePostRequest(resourceAddress.resolveValidateUri(resourceClass, id),
ByteUtils.resourceToByteArray(resource, false, isJson(getPreferredResourceFormat())), ByteUtils.resourceToByteArray(resource, false, isJson(getPreferredResourceFormat())),
getPreferredResourceFormat(), generateHeaders(), getPreferredResourceFormat(), generateHeaders(),
"POST " + resourceClass.getName() + (id != null ? "/" + id : "") + "/$validate", TIMEOUT_OPERATION_LONG); "POST " + resourceClass.getName() + (id != null ? "/" + id : "") + "/$validate", timeoutLong);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), throw new EFhirClientException("Server returned error code " + result.getHttpStatus(),
(OperationOutcome) result.getPayload()); (OperationOutcome) result.getPayload());
@ -411,7 +406,7 @@ public class FHIRToolingClient {
try { try {
result = client.issuePostRequest(resourceAddress.resolveOperationUri(ValueSet.class, "expand"), result = client.issuePostRequest(resourceAddress.resolveOperationUri(ValueSet.class, "expand"),
ByteUtils.resourceToByteArray(p, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(), ByteUtils.resourceToByteArray(p, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(),
generateHeaders(), "ValueSet/$expand?url=" + source.getUrl(), TIMEOUT_OPERATION_EXPAND); generateHeaders(), "ValueSet/$expand?url=" + source.getUrl(), timeoutExpand);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), throw new EFhirClientException("Server returned error code " + result.getHttpStatus(),
(OperationOutcome) result.getPayload()); (OperationOutcome) result.getPayload());
@ -426,7 +421,7 @@ public class FHIRToolingClient {
org.hl7.fhir.r4b.utils.client.network.ResourceRequest<Resource> result = null; org.hl7.fhir.r4b.utils.client.network.ResourceRequest<Resource> result = null;
try { try {
result = client.issueGetResourceRequest(resourceAddress.resolveOperationUri(CodeSystem.class, "lookup", params), result = client.issueGetResourceRequest(resourceAddress.resolveOperationUri(CodeSystem.class, "lookup", params),
getPreferredResourceFormat(), generateHeaders(), "CodeSystem/$lookup", TIMEOUT_NORMAL); getPreferredResourceFormat(), generateHeaders(), "CodeSystem/$lookup", timeoutNormal);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -448,7 +443,7 @@ public class FHIRToolingClient {
result = client.issuePostRequest(resourceAddress.resolveOperationUri(ValueSet.class, "expand", params), result = client.issuePostRequest(resourceAddress.resolveOperationUri(ValueSet.class, "expand", params),
ByteUtils.resourceToByteArray(p, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(), ByteUtils.resourceToByteArray(p, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(),
generateHeaders(), "ValueSet/$expand?url=" + source.getUrl(), TIMEOUT_OPERATION_EXPAND); generateHeaders(), "ValueSet/$expand?url=" + source.getUrl(), timeoutExpand);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), throw new EFhirClientException("Server returned error code " + result.getHttpStatus(),
(OperationOutcome) result.getPayload()); (OperationOutcome) result.getPayload());
@ -471,7 +466,7 @@ public class FHIRToolingClient {
result = client.issuePostRequest( result = client.issuePostRequest(
resourceAddress.resolveOperationUri(null, "closure", new HashMap<String, String>()), resourceAddress.resolveOperationUri(null, "closure", new HashMap<String, String>()),
ByteUtils.resourceToByteArray(params, false, isJson(getPreferredResourceFormat())), ByteUtils.resourceToByteArray(params, false, isJson(getPreferredResourceFormat())),
getPreferredResourceFormat(), generateHeaders(), "Closure?name=" + name, TIMEOUT_NORMAL); getPreferredResourceFormat(), generateHeaders(), "Closure?name=" + name, timeoutNormal);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), throw new EFhirClientException("Server returned error code " + result.getHttpStatus(),
(OperationOutcome) result.getPayload()); (OperationOutcome) result.getPayload());
@ -491,7 +486,7 @@ public class FHIRToolingClient {
result = client.issuePostRequest( result = client.issuePostRequest(
resourceAddress.resolveOperationUri(null, "closure", new HashMap<String, String>()), resourceAddress.resolveOperationUri(null, "closure", new HashMap<String, String>()),
ByteUtils.resourceToByteArray(params, false, isJson(getPreferredResourceFormat())), ByteUtils.resourceToByteArray(params, false, isJson(getPreferredResourceFormat())),
getPreferredResourceFormat(), generateHeaders(), "UpdateClosure?name=" + name, TIMEOUT_OPERATION); getPreferredResourceFormat(), generateHeaders(), "UpdateClosure?name=" + name, timeoutOperation);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), throw new EFhirClientException("Server returned error code " + result.getHttpStatus(),
(OperationOutcome) result.getPayload()); (OperationOutcome) result.getPayload());

View File

@ -54,7 +54,7 @@ public interface ITerminologyClient {
ValueSet expandValueset(ValueSet vs, Parameters p, Map<String, String> params) throws FHIRException; ValueSet expandValueset(ValueSet vs, Parameters p, Map<String, String> params) throws FHIRException;
Parameters validateCS(Parameters pin) throws FHIRException; Parameters validateCS(Parameters pin) throws FHIRException;
Parameters validateVS(Parameters pin) throws FHIRException; Parameters validateVS(Parameters pin) throws FHIRException;
ITerminologyClient setTimeout(int i) throws FHIRException; ITerminologyClient setTimeoutFactor(int i) throws FHIRException;
ITerminologyClient setLogger(ToolingClientLogger txLog) throws FHIRException; ITerminologyClient setLogger(ToolingClientLogger txLog) throws FHIRException;
int getRetryCount() throws FHIRException; int getRetryCount() throws FHIRException;
ITerminologyClient setRetryCount(int retryCount) throws FHIRException; ITerminologyClient setRetryCount(int retryCount) throws FHIRException;

View File

@ -38,6 +38,7 @@ import org.hl7.fhir.r5.model.Parameters.ParametersParameterComponent;
import org.hl7.fhir.r5.utils.client.network.ByteUtils; import org.hl7.fhir.r5.utils.client.network.ByteUtils;
import org.hl7.fhir.r5.utils.client.network.Client; import org.hl7.fhir.r5.utils.client.network.Client;
import org.hl7.fhir.r5.utils.client.network.ResourceRequest; import org.hl7.fhir.r5.utils.client.network.ResourceRequest;
import org.hl7.fhir.utilities.FHIRBaseToolingClient;
import org.hl7.fhir.utilities.ToolingClientLogger; import org.hl7.fhir.utilities.ToolingClientLogger;
import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.Utilities;
import org.hl7.fhir.utilities.npm.FilesystemPackageCacheManager; import org.hl7.fhir.utilities.npm.FilesystemPackageCacheManager;
@ -76,7 +77,7 @@ import java.util.stream.Stream;
* *
* @author Claude Nanjo * @author Claude Nanjo
*/ */
public class FHIRToolingClient { public class FHIRToolingClient extends FHIRBaseToolingClient {
private static final Logger logger = LoggerFactory.getLogger(FHIRToolingClient.class); private static final Logger logger = LoggerFactory.getLogger(FHIRToolingClient.class);
@ -86,12 +87,6 @@ public class FHIRToolingClient {
public static final String hostKey = "http.proxyHost"; public static final String hostKey = "http.proxyHost";
public static final String portKey = "http.proxyPort"; public static final String portKey = "http.proxyPort";
private static final int TIMEOUT_NORMAL = 1500;
private static final int TIMEOUT_OPERATION = 30000;
private static final int TIMEOUT_ENTRY = 500;
private static final int TIMEOUT_OPERATION_LONG = 60000;
private static final int TIMEOUT_OPERATION_EXPAND = 120000;
private String base; private String base;
private ResourceAddress resourceAddress; private ResourceAddress resourceAddress;
private ResourceFormat preferredResourceFormat; private ResourceFormat preferredResourceFormat;
@ -160,7 +155,7 @@ public class FHIRToolingClient {
preferredResourceFormat.getHeader(), preferredResourceFormat.getHeader(),
generateHeaders(), generateHeaders(),
message, message,
TIMEOUT_NORMAL).getReference(); timeoutNormal).getReference();
if (attemptedResourceFormat != preferredResourceFormat) { if (attemptedResourceFormat != preferredResourceFormat) {
setPreferredResourceFormat(attemptedResourceFormat); setPreferredResourceFormat(attemptedResourceFormat);
} }
@ -212,7 +207,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"Read " + resourceClass.getName() + "/" + id, "Read " + resourceClass.getName() + "/" + id,
TIMEOUT_NORMAL); timeoutNormal);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -229,7 +224,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"VRead " + resourceClass.getName() + "/" + id + "/?_history/" + version, "VRead " + resourceClass.getName() + "/" + id + "/?_history/" + version,
TIMEOUT_NORMAL); timeoutNormal);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -246,7 +241,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"Read " + resourceClass.getName() + "?url=" + canonicalURL, "Read " + resourceClass.getName() + "?url=" + canonicalURL,
TIMEOUT_NORMAL); timeoutNormal);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -269,7 +264,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"Update " + resource.fhirType() + "/" + resource.getId(), "Update " + resource.fhirType() + "/" + resource.getId(),
TIMEOUT_OPERATION); timeoutOperation);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -296,7 +291,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"Update " + resource.fhirType() + "/" + id, "Update " + resource.fhirType() + "/" + id,
TIMEOUT_OPERATION); timeoutOperation);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -330,9 +325,9 @@ public class FHIRToolingClient {
if (complex) { if (complex) {
byte[] body = ByteUtils.resourceToByteArray(params, false, isJson(getPreferredResourceFormat())); byte[] body = ByteUtils.resourceToByteArray(params, false, isJson(getPreferredResourceFormat()));
result = client.issuePostRequest(url, body, getPreferredResourceFormat(), generateHeaders(), result = client.issuePostRequest(url, body, getPreferredResourceFormat(), generateHeaders(),
"POST " + resourceClass.getName() + "/$" + name, TIMEOUT_OPERATION_LONG); "POST " + resourceClass.getName() + "/$" + name, timeoutLong);
} else { } else {
result = client.issueGetResourceRequest(url, getPreferredResourceFormat(), generateHeaders(), "GET " + resourceClass.getName() + "/$" + name, TIMEOUT_OPERATION_LONG); result = client.issueGetResourceRequest(url, getPreferredResourceFormat(), generateHeaders(), "GET " + resourceClass.getName() + "/$" + name, timeoutLong);
} }
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
@ -355,7 +350,7 @@ public class FHIRToolingClient {
try { try {
transactionResult = client.postBatchRequest(resourceAddress.getBaseServiceUri(), ByteUtils.resourceToByteArray(batch, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(), transactionResult = client.postBatchRequest(resourceAddress.getBaseServiceUri(), ByteUtils.resourceToByteArray(batch, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"transaction", TIMEOUT_OPERATION + (TIMEOUT_ENTRY * batch.getEntry().size())); "transaction", timeoutOperation + (timeoutEntry * batch.getEntry().size()));
} catch (Exception e) { } catch (Exception e) {
handleException("An error occurred trying to process this transaction request", e); handleException("An error occurred trying to process this transaction request", e);
} }
@ -369,7 +364,7 @@ public class FHIRToolingClient {
result = client.issuePostRequest(resourceAddress.resolveValidateUri(resourceClass, id), result = client.issuePostRequest(resourceAddress.resolveValidateUri(resourceClass, id),
ByteUtils.resourceToByteArray(resource, false, isJson(getPreferredResourceFormat())), ByteUtils.resourceToByteArray(resource, false, isJson(getPreferredResourceFormat())),
getPreferredResourceFormat(), generateHeaders(), getPreferredResourceFormat(), generateHeaders(),
"POST " + resourceClass.getName() + (id != null ? "/" + id : "") + "/$validate", TIMEOUT_OPERATION_LONG); "POST " + resourceClass.getName() + (id != null ? "/" + id : "") + "/$validate", timeoutLong);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -428,7 +423,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"ValueSet/$expand?url=" + source.getUrl(), "ValueSet/$expand?url=" + source.getUrl(),
TIMEOUT_OPERATION_EXPAND); timeoutExpand);
} catch (IOException e) { } catch (IOException e) {
throw new FHIRException(e); throw new FHIRException(e);
} }
@ -446,7 +441,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"CodeSystem/$lookup", "CodeSystem/$lookup",
TIMEOUT_NORMAL); timeoutNormal);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -475,7 +470,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
source == null ? "ValueSet/$expand" : "ValueSet/$expand?url=" + source.getUrl(), source == null ? "ValueSet/$expand" : "ValueSet/$expand?url=" + source.getUrl(),
TIMEOUT_OPERATION_EXPAND); timeoutExpand);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -499,7 +494,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"Closure?name=" + name, "Closure?name=" + name,
TIMEOUT_NORMAL); timeoutNormal);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }
@ -520,7 +515,7 @@ public class FHIRToolingClient {
getPreferredResourceFormat(), getPreferredResourceFormat(),
generateHeaders(), generateHeaders(),
"UpdateClosure?name=" + name, "UpdateClosure?name=" + name,
TIMEOUT_OPERATION); timeoutOperation);
if (result.isUnsuccessfulRequest()) { if (result.isUnsuccessfulRequest()) {
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload()); throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
} }

View File

@ -0,0 +1,68 @@
package org.hl7.fhir.utilities;
public class FHIRBaseToolingClient {
private static final int DEFAULT_TIMEOUT_NORMAL = 1500;
private static final int DEFAULT_TIMEOUT_OPERATION = 30000;
private static final int DEFAULT_TIMEOUT_ENTRY = 500;
private static final int DEFAULT_TIMEOUT_OPERATION_LONG = 60000;
private static final int DEFAULT_TIMEOUT_OPERATION_EXPAND = 120000;
protected int timeoutNormal = DEFAULT_TIMEOUT_NORMAL;
protected int timeoutOperation = DEFAULT_TIMEOUT_OPERATION;
protected int timeoutEntry = DEFAULT_TIMEOUT_ENTRY;
protected int timeoutLong = DEFAULT_TIMEOUT_OPERATION_LONG;
protected int timeoutExpand = DEFAULT_TIMEOUT_OPERATION_EXPAND;
public long getTimeoutNormal() {
return timeoutNormal;
}
public void setTimeoutNormal(int timeoutNormal) {
this.timeoutNormal = timeoutNormal;
}
public long getTimeoutOperation() {
return timeoutOperation;
}
public void setTimeoutOperation(int timeoutOperation) {
this.timeoutOperation = timeoutOperation;
}
public long getTimeoutEntry() {
return timeoutEntry;
}
public void setTimeoutEntry(int timeoutEntry) {
this.timeoutEntry = timeoutEntry;
}
public long getTimeoutLong() {
return timeoutLong;
}
public void setTimeoutLong(int timeoutLong) {
this.timeoutLong = timeoutLong;
}
public long getTimeoutExpand() {
return timeoutExpand;
}
public void setTimeoutExpand(int timeoutExpand) {
this.timeoutExpand = timeoutExpand;
}
public void setTimeoutFactor(int i) {
timeoutNormal = i * DEFAULT_TIMEOUT_NORMAL;
timeoutOperation = i * DEFAULT_TIMEOUT_OPERATION;
timeoutEntry = i * DEFAULT_TIMEOUT_ENTRY;
timeoutLong = i * DEFAULT_TIMEOUT_OPERATION_LONG;
timeoutExpand = i * DEFAULT_TIMEOUT_OPERATION_EXPAND;
}
}