Add parseAndClose to close streams automatically + minor fixes to support R4B
This commit is contained in:
parent
00410604d7
commit
ccf82b8ee3
|
@ -4,6 +4,7 @@ package org.hl7.fhir.r5.formats;
|
|||
|
||||
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
/*
|
||||
|
@ -43,6 +44,7 @@ import java.io.UnsupportedEncodingException;
|
|||
import org.hl7.fhir.exceptions.FHIRFormatError;
|
||||
import org.hl7.fhir.r5.model.DataType;
|
||||
import org.hl7.fhir.r5.model.Resource;
|
||||
import org.hl7.fhir.r5.model.SearchParameter;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
|
||||
|
@ -113,6 +115,8 @@ public interface IParser {
|
|||
*/
|
||||
public Resource parse(InputStream input) throws IOException, FHIRFormatError;
|
||||
|
||||
public Resource parseAndClose(InputStream input) throws IOException, FHIRFormatError;
|
||||
|
||||
/**
|
||||
* parse content that is known to be a resource
|
||||
* @throws UnsupportedEncodingException
|
||||
|
|
|
@ -36,7 +36,9 @@ package org.hl7.fhir.r5.formats;
|
|||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.ParseException;
|
||||
import java.util.HashMap;
|
||||
|
@ -46,6 +48,7 @@ import org.apache.commons.codec.binary.Base64;
|
|||
import org.hl7.fhir.exceptions.FHIRFormatError;
|
||||
import org.hl7.fhir.r5.model.DataType;
|
||||
import org.hl7.fhir.r5.model.Resource;
|
||||
import org.hl7.fhir.r5.model.SearchParameter;
|
||||
import org.hl7.fhir.utilities.Utilities;
|
||||
|
||||
public abstract class ParserBase extends FormatUtilities implements IParser {
|
||||
|
@ -101,6 +104,7 @@ public abstract class ParserBase extends FormatUtilities implements IParser {
|
|||
return bytes.toByteArray();
|
||||
}
|
||||
|
||||
|
||||
// -- Parser Configuration --------------------------------
|
||||
|
||||
protected String xhtmlMessage;
|
||||
|
@ -233,5 +237,14 @@ public abstract class ParserBase extends FormatUtilities implements IParser {
|
|||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Resource parseAndClose(InputStream input) throws IOException, FHIRFormatError {
|
||||
try {
|
||||
return parse(input);
|
||||
} finally {
|
||||
input.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -33,6 +33,7 @@ package org.hl7.fhir.r5.model;
|
|||
|
||||
|
||||
import org.hl7.fhir.instance.model.api.*;
|
||||
import org.hl7.fhir.r5.model.Enumerations.FHIRVersion;
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
|
||||
public class Enumerations {
|
||||
|
@ -6478,6 +6479,9 @@ The primary difference between a medicationusage and a medicationadministration
|
|||
* added to help the parsers
|
||||
*/
|
||||
NULL;
|
||||
|
||||
public static final FHIRVersion R4B = FHIRVersion._4_0_1;
|
||||
|
||||
public static FHIRVersion fromCode(String codeString) throws FHIRException {
|
||||
if (codeString == null || "".equals(codeString))
|
||||
return null;
|
||||
|
|
|
@ -80,9 +80,9 @@ public class TypesUtilities {
|
|||
|
||||
}
|
||||
|
||||
public static List<String> wildcardTypes() {
|
||||
public static List<String> wildcardTypes(String version) {
|
||||
List<String> res = new ArrayList<String>();
|
||||
for (WildcardInformation wi : wildcards())
|
||||
for (WildcardInformation wi : wildcards(version))
|
||||
res.add(wi.getTypeName());
|
||||
return res;
|
||||
}
|
||||
|
@ -94,7 +94,10 @@ public class TypesUtilities {
|
|||
// Any of the IDMP data types
|
||||
// You have to walk into them to profile them.
|
||||
//
|
||||
public static List<WildcardInformation> wildcards() {
|
||||
public static List<WildcardInformation> wildcards(String version) {
|
||||
if (version.startsWith("_")) {
|
||||
throw new Error("underscore");
|
||||
}
|
||||
List<WildcardInformation> res = new ArrayList<WildcardInformation>();
|
||||
|
||||
// primitive types
|
||||
|
@ -108,7 +111,9 @@ public class TypesUtilities {
|
|||
res.add(new WildcardInformation("id", TypeClassification.PRIMITIVE));
|
||||
res.add(new WildcardInformation("instant", TypeClassification.PRIMITIVE));
|
||||
res.add(new WildcardInformation("integer", TypeClassification.PRIMITIVE));
|
||||
res.add(new WildcardInformation("integer64", TypeClassification.PRIMITIVE));
|
||||
if (!version.startsWith("4.0")) {
|
||||
res.add(new WildcardInformation("integer64", TypeClassification.PRIMITIVE));
|
||||
}
|
||||
res.add(new WildcardInformation("markdown", TypeClassification.PRIMITIVE));
|
||||
res.add(new WildcardInformation("oid", TypeClassification.PRIMITIVE));
|
||||
res.add(new WildcardInformation("positiveInt", TypeClassification.PRIMITIVE));
|
||||
|
|
|
@ -80,6 +80,7 @@ public class FHIRToolingClient {
|
|||
|
||||
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;
|
||||
|
||||
|
@ -132,7 +133,7 @@ public class FHIRToolingClient {
|
|||
capabilities = (TerminologyCapabilities) client.issueGetResourceRequest(resourceAddress.resolveMetadataTxCaps(),
|
||||
getPreferredResourceFormat(), "TerminologyCapabilities", TIMEOUT_NORMAL).getReference();
|
||||
} catch (Exception e) {
|
||||
handleException("An error has occurred while trying to fetch the server's terminology capabilities", e);
|
||||
throw new FHIRException("Error fetching the server's terminology capabilities", e);
|
||||
}
|
||||
return capabilities;
|
||||
}
|
||||
|
@ -143,7 +144,7 @@ public class FHIRToolingClient {
|
|||
conformance = (CapabilityStatement) client.issueGetResourceRequest(resourceAddress.resolveMetadataUri(false),
|
||||
getPreferredResourceFormat(), "CapabilitiesStatement", TIMEOUT_NORMAL).getReference();
|
||||
} catch (Exception e) {
|
||||
handleException("An error has occurred while trying to fetch the server's conformance statement", e);
|
||||
throw new FHIRException("Error fetching the server's conformance statement", e);
|
||||
}
|
||||
return conformance;
|
||||
}
|
||||
|
@ -154,7 +155,7 @@ public class FHIRToolingClient {
|
|||
capabilities = (CapabilityStatement) client.issueGetResourceRequest(resourceAddress.resolveMetadataUri(true),
|
||||
getPreferredResourceFormat(), "CapabilitiesStatement-Quick", TIMEOUT_NORMAL).getReference();
|
||||
} catch (Exception e) {
|
||||
handleException("An error fetching the server's capability statement: "+e.getMessage(), e);
|
||||
throw new FHIRException("Error fetching the server's capability statement: "+e.getMessage(), e);
|
||||
}
|
||||
return capabilities;
|
||||
}
|
||||
|
@ -182,7 +183,7 @@ public class FHIRToolingClient {
|
|||
throw new EFhirClientException("Server returned error code " + result.getHttpStatus(), (OperationOutcome) result.getPayload());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
handleException("An error has occurred while trying to read this version of the resource", e);
|
||||
throw new FHIRException("Error trying to read this version of the resource", e);
|
||||
}
|
||||
return result.getPayload();
|
||||
}
|
||||
|
@ -291,7 +292,7 @@ public class FHIRToolingClient {
|
|||
public Bundle transaction(Bundle batch) {
|
||||
Bundle transactionResult = null;
|
||||
try {
|
||||
transactionResult = client.postBatchRequest(resourceAddress.getBaseServiceUri(), ByteUtils.resourceToByteArray(batch, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(), "transaction", TIMEOUT_NORMAL + batch.getEntry().size());
|
||||
transactionResult = client.postBatchRequest(resourceAddress.getBaseServiceUri(), ByteUtils.resourceToByteArray(batch, false, isJson(getPreferredResourceFormat())), getPreferredResourceFormat(), "transaction", TIMEOUT_OPERATION + (TIMEOUT_ENTRY * batch.getEntry().size()));
|
||||
} catch (Exception e) {
|
||||
handleException("An error occurred trying to process this transaction request", e);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue