diff --git a/pom.xml b/pom.xml
index 5858d6b6ca2..3ad764de1f2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
ca.uhn.hapi.fhir
hapi-fhir
- 4.1.0
+ 4.2.0
hapi-fhir-jpaserver-starter
@@ -276,7 +276,7 @@
org.eclipse.jetty
jetty-maven-plugin
- 9.4.22.v20191022
+ ${jetty_version}
/hapi-fhir-jpaserver
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java
index b8ae9d20d57..70bfb4d6bd3 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java
@@ -173,7 +173,13 @@ public BasicDataSource dataSource() throws ClassNotFoundException, NoSuchMethodE
@Lazy
@Bean
public IBinaryStorageSvc binaryStorageSvc() {
- return new DatabaseBlobBinaryStorageSvcImpl();
+ DatabaseBlobBinaryStorageSvcImpl binaryStorageSvc = new DatabaseBlobBinaryStorageSvcImpl();
+
+ if (HapiProperties.getMaxBinarySize() != null) {
+ binaryStorageSvc.setMaximumBinarySize(HapiProperties.getMaxBinarySize());
+ }
+
+ return binaryStorageSvc;
}
@Bean()
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/HapiProperties.java b/src/main/java/ca/uhn/fhir/jpa/starter/HapiProperties.java
index 517ebff3775..5be55f49999 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/HapiProperties.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/HapiProperties.java
@@ -19,452 +19,471 @@
import java.util.Set;
import java.util.stream.Collectors;
-import static org.apache.commons.lang3.StringUtils.*;
+import static org.apache.commons.lang3.StringUtils.defaultString;
+import static org.apache.commons.lang3.StringUtils.isNotBlank;
+import static org.apache.commons.lang3.StringUtils.trim;
public class HapiProperties {
static final String ENABLE_INDEX_MISSING_FIELDS = "enable_index_missing_fields";
- static final String AUTO_CREATE_PLACEHOLDER_REFERENCE_TARGETS = "auto_create_placeholder_reference_targets";
- static final String ENFORCE_REFERENTIAL_INTEGRITY_ON_WRITE = "enforce_referential_integrity_on_write";
- static final String ENFORCE_REFERENTIAL_INTEGRITY_ON_DELETE = "enforce_referential_integrity_on_delete";
- static final String BINARY_STORAGE_ENABLED = "binary_storage.enabled";
- static final String ALLOW_EXTERNAL_REFERENCES = "allow_external_references";
- static final String ALLOW_MULTIPLE_DELETE = "allow_multiple_delete";
- static final String ALLOW_PLACEHOLDER_REFERENCES = "allow_placeholder_references";
- static final String REUSE_CACHED_SEARCH_RESULTS_MILLIS = "reuse_cached_search_results_millis";
- static final String DATASOURCE_DRIVER = "datasource.driver";
- static final String DATASOURCE_MAX_POOL_SIZE = "datasource.max_pool_size";
- static final String DATASOURCE_PASSWORD = "datasource.password";
- static final String DATASOURCE_URL = "datasource.url";
- static final String DATASOURCE_USERNAME = "datasource.username";
- static final String DEFAULT_ENCODING = "default_encoding";
- static final String DEFAULT_PAGE_SIZE = "default_page_size";
- static final String DEFAULT_PRETTY_PRINT = "default_pretty_print";
- static final String ETAG_SUPPORT = "etag_support";
- static final String FHIR_VERSION = "fhir_version";
- static final String ALLOW_CASCADING_DELETES = "allow_cascading_deletes";
- static final String HAPI_PROPERTIES = "hapi.properties";
- static final String LOGGER_ERROR_FORMAT = "logger.error_format";
- static final String LOGGER_FORMAT = "logger.format";
- static final String LOGGER_LOG_EXCEPTIONS = "logger.log_exceptions";
- static final String LOGGER_NAME = "logger.name";
- static final String MAX_FETCH_SIZE = "max_fetch_size";
- static final String MAX_PAGE_SIZE = "max_page_size";
- static final String SERVER_ADDRESS = "server_address";
- static final String SERVER_ID = "server.id";
- static final String SERVER_NAME = "server.name";
- static final String SUBSCRIPTION_EMAIL_ENABLED = "subscription.email.enabled";
- static final String SUBSCRIPTION_RESTHOOK_ENABLED = "subscription.resthook.enabled";
- static final String SUBSCRIPTION_WEBSOCKET_ENABLED = "subscription.websocket.enabled";
- static final String ALLOWED_BUNDLE_TYPES = "allowed_bundle_types";
- static final String TEST_PORT = "test.port";
- static final String TESTER_CONFIG_REFUSE_TO_FETCH_THIRD_PARTY_URLS = "tester.config.refuse_to_fetch_third_party_urls";
- static final String CORS_ENABLED = "cors.enabled";
- static final String CORS_ALLOWED_ORIGIN = "cors.allowed_origin";
- static final String CORS_ALLOW_CREDENTIALS = "cors.allowCredentials";
- static final String ALLOW_CONTAINS_SEARCHES = "allow_contains_searches";
- static final String ALLOW_OVERRIDE_DEFAULT_SEARCH_PARAMS = "allow_override_default_search_params";
- static final String EMAIL_FROM = "email.from";
- private static final String VALIDATE_REQUESTS_ENABLED = "validation.requests.enabled";
- private static final String VALIDATE_RESPONSES_ENABLED = "validation.responses.enabled";
- private static final String FILTER_SEARCH_ENABLED = "filter_search.enabled";
- private static final String GRAPHQL_ENABLED = "graphql.enabled";
- private static final String BULK_EXPORT_ENABLED = "bulk.export.enabled";
- public static final String EXPIRE_SEARCH_RESULTS_AFTER_MINS = "retain_cached_searches_mins";
+ static final String AUTO_CREATE_PLACEHOLDER_REFERENCE_TARGETS = "auto_create_placeholder_reference_targets";
+ static final String ENFORCE_REFERENTIAL_INTEGRITY_ON_WRITE = "enforce_referential_integrity_on_write";
+ static final String ENFORCE_REFERENTIAL_INTEGRITY_ON_DELETE = "enforce_referential_integrity_on_delete";
+ static final String BINARY_STORAGE_ENABLED = "binary_storage.enabled";
+ static final String ALLOW_EXTERNAL_REFERENCES = "allow_external_references";
+ static final String ALLOW_MULTIPLE_DELETE = "allow_multiple_delete";
+ static final String ALLOW_PLACEHOLDER_REFERENCES = "allow_placeholder_references";
+ static final String REUSE_CACHED_SEARCH_RESULTS_MILLIS = "reuse_cached_search_results_millis";
+ static final String DATASOURCE_DRIVER = "datasource.driver";
+ static final String DATASOURCE_MAX_POOL_SIZE = "datasource.max_pool_size";
+ static final String DATASOURCE_PASSWORD = "datasource.password";
+ static final String DATASOURCE_URL = "datasource.url";
+ static final String DATASOURCE_USERNAME = "datasource.username";
+ static final String DEFAULT_ENCODING = "default_encoding";
+ static final String DEFAULT_PAGE_SIZE = "default_page_size";
+ static final String DEFAULT_PRETTY_PRINT = "default_pretty_print";
+ static final String ETAG_SUPPORT = "etag_support";
+ static final String FHIR_VERSION = "fhir_version";
+ static final String ALLOW_CASCADING_DELETES = "allow_cascading_deletes";
+ static final String HAPI_PROPERTIES = "hapi.properties";
+ static final String LOGGER_ERROR_FORMAT = "logger.error_format";
+ static final String LOGGER_FORMAT = "logger.format";
+ static final String LOGGER_LOG_EXCEPTIONS = "logger.log_exceptions";
+ static final String LOGGER_NAME = "logger.name";
+ static final String MAX_FETCH_SIZE = "max_fetch_size";
+ static final String MAX_PAGE_SIZE = "max_page_size";
+ static final String SERVER_ADDRESS = "server_address";
+ static final String SERVER_ID = "server.id";
+ static final String SERVER_NAME = "server.name";
+ static final String SUBSCRIPTION_EMAIL_ENABLED = "subscription.email.enabled";
+ static final String SUBSCRIPTION_RESTHOOK_ENABLED = "subscription.resthook.enabled";
+ static final String SUBSCRIPTION_WEBSOCKET_ENABLED = "subscription.websocket.enabled";
+ static final String ALLOWED_BUNDLE_TYPES = "allowed_bundle_types";
+ static final String TEST_PORT = "test.port";
+ static final String TESTER_CONFIG_REFUSE_TO_FETCH_THIRD_PARTY_URLS = "tester.config.refuse_to_fetch_third_party_urls";
+ static final String CORS_ENABLED = "cors.enabled";
+ static final String CORS_ALLOWED_ORIGIN = "cors.allowed_origin";
+ static final String CORS_ALLOW_CREDENTIALS = "cors.allowCredentials";
+ static final String ALLOW_CONTAINS_SEARCHES = "allow_contains_searches";
+ static final String ALLOW_OVERRIDE_DEFAULT_SEARCH_PARAMS = "allow_override_default_search_params";
+ static final String EMAIL_FROM = "email.from";
+ static final String VALIDATE_REQUESTS_ENABLED = "validation.requests.enabled";
+ static final String VALIDATE_RESPONSES_ENABLED = "validation.responses.enabled";
+ static final String FILTER_SEARCH_ENABLED = "filter_search.enabled";
+ static final String GRAPHQL_ENABLED = "graphql.enabled";
+ static final String BULK_EXPORT_ENABLED = "bulk.export.enabled";
+ static final String EXPIRE_SEARCH_RESULTS_AFTER_MINS = "retain_cached_searches_mins";
+ static final String MAX_BINARY_SIZE = "max_binary_size";
private static Properties ourProperties;
- public static boolean isElasticSearchEnabled() {
- return HapiProperties.getPropertyBoolean("elasticsearch.enabled", false);
- }
-
- /*
- * Force the configuration to be reloaded
- */
- public static void forceReload() {
- ourProperties = null;
- getProperties();
- }
+ public static boolean isElasticSearchEnabled() {
+ return HapiProperties.getPropertyBoolean("elasticsearch.enabled", false);
+ }
+
+ /*
+ * Force the configuration to be reloaded
+ */
+ public static void forceReload() {
+ ourProperties = null;
+ getProperties();
+ }
+
+ /**
+ * This is mostly here for unit tests. Use the actual properties file
+ * to set values
+ */
+ @VisibleForTesting
+ public static void setProperty(String theKey, String theValue) {
+ getProperties().setProperty(theKey, theValue);
+ }
- /**
- * This is mostly here for unit tests. Use the actual properties file
- * to set values
- */
- @VisibleForTesting
- public static void setProperty(String theKey, String theValue) {
- getProperties().setProperty(theKey, theValue);
- }
+ public static Properties getJpaProperties() {
+ Properties retVal = loadProperties();
- public static Properties getJpaProperties() {
- Properties retVal = loadProperties();
-
- if (isElasticSearchEnabled()) {
- ElasticsearchHibernatePropertiesBuilder builder = new ElasticsearchHibernatePropertiesBuilder();
- builder.setRequiredIndexStatus(getPropertyEnum("elasticsearch.required_index_status", ElasticsearchIndexStatus.class, ElasticsearchIndexStatus.YELLOW));
- builder.setRestUrl(getProperty("elasticsearch.rest_url"));
- builder.setUsername(getProperty("elasticsearch.username"));
- builder.setPassword(getProperty("elasticsearch.password"));
- builder.setIndexSchemaManagementStrategy(getPropertyEnum("elasticsearch.schema_management_strategy", IndexSchemaManagementStrategy.class, IndexSchemaManagementStrategy.CREATE));
- builder.setDebugRefreshAfterWrite(getPropertyBoolean("elasticsearch.debug.refresh_after_write", false));
- builder.setDebugPrettyPrintJsonLog(getPropertyBoolean("elasticsearch.debug.pretty_print_json_log", false));
- builder.apply(retVal);
- }
-
- return retVal;
+ if (isElasticSearchEnabled()) {
+ ElasticsearchHibernatePropertiesBuilder builder = new ElasticsearchHibernatePropertiesBuilder();
+ builder.setRequiredIndexStatus(getPropertyEnum("elasticsearch.required_index_status", ElasticsearchIndexStatus.class, ElasticsearchIndexStatus.YELLOW));
+ builder.setRestUrl(getProperty("elasticsearch.rest_url"));
+ builder.setUsername(getProperty("elasticsearch.username"));
+ builder.setPassword(getProperty("elasticsearch.password"));
+ builder.setIndexSchemaManagementStrategy(getPropertyEnum("elasticsearch.schema_management_strategy", IndexSchemaManagementStrategy.class, IndexSchemaManagementStrategy.CREATE));
+ builder.setDebugRefreshAfterWrite(getPropertyBoolean("elasticsearch.debug.refresh_after_write", false));
+ builder.setDebugPrettyPrintJsonLog(getPropertyBoolean("elasticsearch.debug.pretty_print_json_log", false));
+ builder.apply(retVal);
}
- private static Properties getProperties() {
- if (ourProperties == null) {
- Properties properties = loadProperties();
- HapiProperties.ourProperties = properties;
- }
+ return retVal;
+ }
- return ourProperties;
+ private static Properties getProperties() {
+ if (ourProperties == null) {
+ Properties properties = loadProperties();
+ HapiProperties.ourProperties = properties;
}
- @NotNull
- private static Properties loadProperties() {
- // Load the configurable properties file
- Properties properties;
- try (InputStream in = HapiProperties.class.getClassLoader().getResourceAsStream(HAPI_PROPERTIES)) {
- properties = new Properties();
- properties.load(in);
- } catch (Exception e) {
- throw new ConfigurationException("Could not load HAPI properties", e);
- }
-
- Properties overrideProps = loadOverrideProperties();
- if (overrideProps != null) {
- properties.putAll(overrideProps);
- }
- return properties;
- }
+ return ourProperties;
+ }
- /**
- * If a configuration file path is explicitly specified via -Dhapi.properties=, the properties there will
- * be used to override the entries in the default hapi.properties file (currently under WEB-INF/classes)
- *
- * @return properties loaded from the explicitly specified configuraiton file if there is one, or null otherwise.
- */
- private static Properties loadOverrideProperties() {
- String confFile = System.getProperty(HAPI_PROPERTIES);
- if (confFile != null) {
- try {
- Properties props = new Properties();
- props.load(new FileInputStream(confFile));
- return props;
- } catch (Exception e) {
- throw new ConfigurationException("Could not load HAPI properties file: " + confFile, e);
- }
- }
-
- return null;
+ @NotNull
+ private static Properties loadProperties() {
+ // Load the configurable properties file
+ Properties properties;
+ try (InputStream in = HapiProperties.class.getClassLoader().getResourceAsStream(HAPI_PROPERTIES)) {
+ properties = new Properties();
+ properties.load(in);
+ } catch (Exception e) {
+ throw new ConfigurationException("Could not load HAPI properties", e);
}
- private static String getProperty(String propertyName) {
- String env = "HAPI_" + propertyName.toUpperCase(Locale.US);
- env = env.replace(".", "_");
- env = env.replace("-", "_");
-
- String propertyValue = System.getenv(env);
- if (propertyValue != null) {
- return propertyValue;
- }
-
- Properties properties = HapiProperties.getProperties();
- if (properties != null) {
- propertyValue = properties.getProperty(propertyName);
- }
-
- return propertyValue;
+ Properties overrideProps = loadOverrideProperties();
+ if (overrideProps != null) {
+ properties.putAll(overrideProps);
}
+ return properties;
+ }
- private static String getProperty(String propertyName, String defaultValue) {
- String value = getProperty(propertyName);
-
- if (value != null && value.length() > 0) {
- return value;
- }
-
- return defaultValue;
+ /**
+ * If a configuration file path is explicitly specified via -Dhapi.properties=, the properties there will
+ * be used to override the entries in the default hapi.properties file (currently under WEB-INF/classes)
+ *
+ * @return properties loaded from the explicitly specified configuraiton file if there is one, or null otherwise.
+ */
+ private static Properties loadOverrideProperties() {
+ String confFile = System.getProperty(HAPI_PROPERTIES);
+ if (confFile != null) {
+ try {
+ Properties props = new Properties();
+ props.load(new FileInputStream(confFile));
+ return props;
+ } catch (Exception e) {
+ throw new ConfigurationException("Could not load HAPI properties file: " + confFile, e);
+ }
}
- private static Boolean getBooleanProperty(String propertyName, Boolean defaultValue) {
- String value = HapiProperties.getProperty(propertyName);
+ return null;
+ }
- if (value == null || value.length() == 0) {
- return defaultValue;
- }
+ private static String getProperty(String propertyName) {
+ String env = "HAPI_" + propertyName.toUpperCase(Locale.US);
+ env = env.replace(".", "_");
+ env = env.replace("-", "_");
- return Boolean.parseBoolean(value);
+ String propertyValue = System.getenv(env);
+ if (propertyValue != null) {
+ return propertyValue;
}
- private static boolean getBooleanProperty(String propertyName, boolean defaultValue) {
- return getBooleanProperty(propertyName, Boolean.valueOf(defaultValue));
+ Properties properties = HapiProperties.getProperties();
+ if (properties != null) {
+ propertyValue = properties.getProperty(propertyName);
}
- private static Integer getIntegerProperty(String propertyName, Integer defaultValue) {
- String value = HapiProperties.getProperty(propertyName);
+ return propertyValue;
+ }
- if (value == null || value.length() == 0) {
- return defaultValue;
- }
+ private static String getProperty(String propertyName, String defaultValue) {
+ String value = getProperty(propertyName);
- return Integer.parseInt(value);
+ if (value != null && value.length() > 0) {
+ return value;
}
- public static FhirVersionEnum getFhirVersion() {
- String fhirVersionString = HapiProperties.getProperty(FHIR_VERSION);
+ return defaultValue;
+ }
- if (fhirVersionString != null && fhirVersionString.length() > 0) {
- return FhirVersionEnum.valueOf(fhirVersionString);
- }
+ private static Boolean getBooleanProperty(String propertyName, Boolean defaultValue) {
+ String value = HapiProperties.getProperty(propertyName);
- return FhirVersionEnum.DSTU3;
+ if (value == null || value.length() == 0) {
+ return defaultValue;
}
- public static boolean isBinaryStorageEnabled() {
- return HapiProperties.getBooleanProperty(BINARY_STORAGE_ENABLED, true);
- }
+ return Boolean.parseBoolean(value);
+ }
- public static ETagSupportEnum getEtagSupport() {
- String etagSupportString = HapiProperties.getProperty(ETAG_SUPPORT);
+ private static boolean getBooleanProperty(String propertyName, boolean defaultValue) {
+ return getBooleanProperty(propertyName, Boolean.valueOf(defaultValue));
+ }
- if (etagSupportString != null && etagSupportString.length() > 0) {
- return ETagSupportEnum.valueOf(etagSupportString);
- }
+ private static Integer getIntegerProperty(String propertyName, Integer defaultValue) {
+ String value = HapiProperties.getProperty(propertyName);
- return ETagSupportEnum.ENABLED;
+ if (value == null || value.length() == 0) {
+ return defaultValue;
}
- public static EncodingEnum getDefaultEncoding() {
- String defaultEncodingString = HapiProperties.getProperty(DEFAULT_ENCODING);
+ return Integer.parseInt(value);
+ }
- if (defaultEncodingString != null && defaultEncodingString.length() > 0) {
- return EncodingEnum.valueOf(defaultEncodingString);
- }
+ public static FhirVersionEnum getFhirVersion() {
+ String fhirVersionString = HapiProperties.getProperty(FHIR_VERSION);
- return EncodingEnum.JSON;
+ if (fhirVersionString != null && fhirVersionString.length() > 0) {
+ return FhirVersionEnum.valueOf(fhirVersionString);
}
- public static Boolean getDefaultPrettyPrint() {
- return HapiProperties.getBooleanProperty(DEFAULT_PRETTY_PRINT, true);
- }
+ return FhirVersionEnum.DSTU3;
+ }
- public static String getServerAddress() {
- return HapiProperties.getProperty(SERVER_ADDRESS);
- }
+ public static boolean isBinaryStorageEnabled() {
+ return HapiProperties.getBooleanProperty(BINARY_STORAGE_ENABLED, true);
+ }
- public static Integer getDefaultPageSize() {
- return HapiProperties.getIntegerProperty(DEFAULT_PAGE_SIZE, 20);
- }
+ public static ETagSupportEnum getEtagSupport() {
+ String etagSupportString = HapiProperties.getProperty(ETAG_SUPPORT);
- public static Integer getMaximumPageSize() {
- return HapiProperties.getIntegerProperty(MAX_PAGE_SIZE, 200);
+ if (etagSupportString != null && etagSupportString.length() > 0) {
+ return ETagSupportEnum.valueOf(etagSupportString);
}
- public static Integer getMaximumFetchSize() {
- return HapiProperties.getIntegerProperty(MAX_FETCH_SIZE, Integer.MAX_VALUE);
- }
+ return ETagSupportEnum.ENABLED;
+ }
- public static String getLoggerName() {
- return HapiProperties.getProperty(LOGGER_NAME, "fhirtest.access");
- }
+ public static EncodingEnum getDefaultEncoding() {
+ String defaultEncodingString = HapiProperties.getProperty(DEFAULT_ENCODING);
- public static String getLoggerFormat() {
- return HapiProperties.getProperty(LOGGER_FORMAT, "Path[${servletPath}] Source[${requestHeader.x-forwarded-for}] Operation[${operationType} ${operationName} ${idOrResourceName}] UA[${requestHeader.user-agent}] Params[${requestParameters}] ResponseEncoding[${responseEncodingNoDefault}]");
+ if (defaultEncodingString != null && defaultEncodingString.length() > 0) {
+ return EncodingEnum.valueOf(defaultEncodingString);
}
- public static String getLoggerErrorFormat() {
- return HapiProperties.getProperty(LOGGER_ERROR_FORMAT, "ERROR - ${requestVerb} ${requestUrl}");
- }
+ return EncodingEnum.JSON;
+ }
- public static Boolean getLoggerLogExceptions() {
- return HapiProperties.getBooleanProperty(LOGGER_LOG_EXCEPTIONS, true);
- }
+ public static Boolean getDefaultPrettyPrint() {
+ return HapiProperties.getBooleanProperty(DEFAULT_PRETTY_PRINT, true);
+ }
- public static String getDataSourceDriver() {
- return HapiProperties.getProperty(DATASOURCE_DRIVER, "org.apache.derby.jdbc.EmbeddedDriver");
- }
+ public static String getServerAddress() {
+ return HapiProperties.getProperty(SERVER_ADDRESS);
+ }
- public static Integer getDataSourceMaxPoolSize() {
- return HapiProperties.getIntegerProperty(DATASOURCE_MAX_POOL_SIZE, 10);
- }
+ public static Integer getDefaultPageSize() {
+ return HapiProperties.getIntegerProperty(DEFAULT_PAGE_SIZE, 20);
+ }
- public static String getDataSourceUrl() {
- return HapiProperties.getProperty(DATASOURCE_URL, "jdbc:derby:directory:target/jpaserver_derby_files;create=true");
- }
+ public static Integer getMaximumPageSize() {
+ return HapiProperties.getIntegerProperty(MAX_PAGE_SIZE, 200);
+ }
- public static String getDataSourceUsername() {
- return HapiProperties.getProperty(DATASOURCE_USERNAME);
- }
+ public static Integer getMaximumFetchSize() {
+ return HapiProperties.getIntegerProperty(MAX_FETCH_SIZE, Integer.MAX_VALUE);
+ }
- public static String getDataSourcePassword() {
- return HapiProperties.getProperty(DATASOURCE_PASSWORD);
- }
+ public static String getLoggerName() {
+ return HapiProperties.getProperty(LOGGER_NAME, "fhirtest.access");
+ }
- public static Boolean getAllowMultipleDelete() {
- return HapiProperties.getBooleanProperty(ALLOW_MULTIPLE_DELETE, false);
- }
+ public static String getLoggerFormat() {
+ return HapiProperties.getProperty(LOGGER_FORMAT, "Path[${servletPath}] Source[${requestHeader.x-forwarded-for}] Operation[${operationType} ${operationName} ${idOrResourceName}] UA[${requestHeader.user-agent}] Params[${requestParameters}] ResponseEncoding[${responseEncodingNoDefault}]");
+ }
- public static Boolean getAllowCascadingDeletes() {
- return HapiProperties.getBooleanProperty(ALLOW_CASCADING_DELETES, false);
- }
+ public static String getLoggerErrorFormat() {
+ return HapiProperties.getProperty(LOGGER_ERROR_FORMAT, "ERROR - ${requestVerb} ${requestUrl}");
+ }
- public static Boolean getAllowExternalReferences() {
- return HapiProperties.getBooleanProperty(ALLOW_EXTERNAL_REFERENCES, false);
- }
+ public static Boolean getLoggerLogExceptions() {
+ return HapiProperties.getBooleanProperty(LOGGER_LOG_EXCEPTIONS, true);
+ }
- public static Boolean getExpungeEnabled() {
- return HapiProperties.getBooleanProperty("expunge_enabled", true);
- }
+ public static String getDataSourceDriver() {
+ return HapiProperties.getProperty(DATASOURCE_DRIVER, "org.apache.derby.jdbc.EmbeddedDriver");
+ }
- public static Integer getTestPort() {
- return HapiProperties.getIntegerProperty(TEST_PORT, 0);
- }
+ public static Integer getDataSourceMaxPoolSize() {
+ return HapiProperties.getIntegerProperty(DATASOURCE_MAX_POOL_SIZE, 10);
+ }
- public static Boolean getTesterConfigRefustToFetchThirdPartyUrls() {
- return HapiProperties.getBooleanProperty(TESTER_CONFIG_REFUSE_TO_FETCH_THIRD_PARTY_URLS, false);
- }
+ public static String getDataSourceUrl() {
+ return HapiProperties.getProperty(DATASOURCE_URL, "jdbc:derby:directory:target/jpaserver_derby_files;create=true");
+ }
- public static Boolean getCorsEnabled() {
- return HapiProperties.getBooleanProperty(CORS_ENABLED, true);
- }
+ public static String getDataSourceUsername() {
+ return HapiProperties.getProperty(DATASOURCE_USERNAME);
+ }
- public static String getCorsAllowedOrigin() {
- return HapiProperties.getProperty(CORS_ALLOWED_ORIGIN, "*");
- }
+ public static String getDataSourcePassword() {
+ return HapiProperties.getProperty(DATASOURCE_PASSWORD);
+ }
- public static String getAllowedBundleTypes() {
- return HapiProperties.getProperty(ALLOWED_BUNDLE_TYPES, "");
- }
+ public static Boolean getAllowMultipleDelete() {
+ return HapiProperties.getBooleanProperty(ALLOW_MULTIPLE_DELETE, false);
+ }
- @Nonnull
- public static Set getSupportedResourceTypes() {
- String[] types = defaultString(getProperty("supported_resource_types")).split(",");
- return Arrays.stream(types)
- .map(t -> trim(t))
- .filter(t -> isNotBlank(t))
- .collect(Collectors.toSet());
- }
+ public static Boolean getAllowCascadingDeletes() {
+ return HapiProperties.getBooleanProperty(ALLOW_CASCADING_DELETES, false);
+ }
- public static String getServerName() {
- return HapiProperties.getProperty(SERVER_NAME, "Local Tester");
- }
+ public static Boolean getAllowExternalReferences() {
+ return HapiProperties.getBooleanProperty(ALLOW_EXTERNAL_REFERENCES, false);
+ }
- public static String getServerId() {
- return HapiProperties.getProperty(SERVER_ID, "home");
- }
+ public static Boolean getExpungeEnabled() {
+ return HapiProperties.getBooleanProperty("expunge_enabled", true);
+ }
- public static Boolean getAllowPlaceholderReferences() {
- return HapiProperties.getBooleanProperty(ALLOW_PLACEHOLDER_REFERENCES, true);
- }
+ public static Integer getTestPort() {
+ return HapiProperties.getIntegerProperty(TEST_PORT, 0);
+ }
- public static Boolean getSubscriptionEmailEnabled() {
- return HapiProperties.getBooleanProperty(SUBSCRIPTION_EMAIL_ENABLED, false);
- }
+ public static Boolean getTesterConfigRefustToFetchThirdPartyUrls() {
+ return HapiProperties.getBooleanProperty(TESTER_CONFIG_REFUSE_TO_FETCH_THIRD_PARTY_URLS, false);
+ }
- public static Boolean getSubscriptionRestHookEnabled() {
- return HapiProperties.getBooleanProperty(SUBSCRIPTION_RESTHOOK_ENABLED, false);
- }
+ public static Boolean getCorsEnabled() {
+ return HapiProperties.getBooleanProperty(CORS_ENABLED, true);
+ }
- public static Boolean getSubscriptionWebsocketEnabled() {
- return HapiProperties.getBooleanProperty(SUBSCRIPTION_WEBSOCKET_ENABLED, false);
- }
+ public static String getCorsAllowedOrigin() {
+ return HapiProperties.getProperty(CORS_ALLOWED_ORIGIN, "*");
+ }
- public static Boolean getAllowContainsSearches() {
- return HapiProperties.getBooleanProperty(ALLOW_CONTAINS_SEARCHES, true);
- }
+ public static String getAllowedBundleTypes() {
+ return HapiProperties.getProperty(ALLOWED_BUNDLE_TYPES, "");
+ }
- public static Boolean getAllowOverrideDefaultSearchParams() {
- return HapiProperties.getBooleanProperty(ALLOW_OVERRIDE_DEFAULT_SEARCH_PARAMS, true);
- }
-
- public static String getEmailFrom() {
- return HapiProperties.getProperty(EMAIL_FROM, "some@test.com");
- }
-
- public static Boolean getEmailEnabled() {
- return HapiProperties.getBooleanProperty("email.enabled", false);
- }
-
- public static String getEmailHost() {
- return HapiProperties.getProperty("email.host");
- }
-
- public static Integer getEmailPort() {
- return HapiProperties.getIntegerProperty("email.port", 0);
- }
-
- public static String getEmailUsername() {
- return HapiProperties.getProperty("email.username");
- }
-
- public static String getEmailPassword() {
- return HapiProperties.getProperty("email.password");
- }
-
- // Defaults from https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.html
- public static Boolean getEmailAuth() { return HapiProperties.getBooleanProperty("email.auth", false); }
- public static Boolean getEmailStartTlsEnable() { return HapiProperties.getBooleanProperty("email.starttls.enable", false); }
- public static Boolean getEmailStartTlsRequired() { return HapiProperties.getBooleanProperty("email.starttls.required", false); }
- public static Boolean getEmailQuitWait() { return HapiProperties.getBooleanProperty("email.quitwait", true); }
-
- public static Long getReuseCachedSearchResultsMillis() {
- String value = HapiProperties.getProperty(REUSE_CACHED_SEARCH_RESULTS_MILLIS, "60000");
- return Long.valueOf(value);
- }
-
- public static Long getExpireSearchResultsAfterMins() {
- String value = HapiProperties.getProperty(EXPIRE_SEARCH_RESULTS_AFTER_MINS, "60");
- return Long.valueOf(value);
- }
-
- public static Boolean getCorsAllowedCredentials() {
- return HapiProperties.getBooleanProperty(CORS_ALLOW_CREDENTIALS, false);
- }
-
- public static boolean getValidateRequestsEnabled() {
- return HapiProperties.getBooleanProperty(VALIDATE_REQUESTS_ENABLED, false);
- }
-
- public static boolean getValidateResponsesEnabled() {
- return HapiProperties.getBooleanProperty(VALIDATE_RESPONSES_ENABLED, false);
- }
-
- public static boolean getFilterSearchEnabled() {
- return HapiProperties.getBooleanProperty(FILTER_SEARCH_ENABLED, true);
- }
-
- public static boolean getGraphqlEnabled() {
- return HapiProperties.getBooleanProperty(GRAPHQL_ENABLED, true);
- }
-
- public static boolean getEnforceReferentialIntegrityOnDelete() {
- return HapiProperties.getBooleanProperty(ENFORCE_REFERENTIAL_INTEGRITY_ON_DELETE, true);
- }
-
- public static boolean getEnforceReferentialIntegrityOnWrite() {
- return HapiProperties.getBooleanProperty(ENFORCE_REFERENTIAL_INTEGRITY_ON_WRITE, true);
- }
-
- public static boolean getAutoCreatePlaceholderReferenceTargets() {
- return HapiProperties.getBooleanProperty(AUTO_CREATE_PLACEHOLDER_REFERENCE_TARGETS, true);
- }
-
- public static boolean getEnableIndexMissingFields() {
- return HapiProperties.getBooleanProperty(ENABLE_INDEX_MISSING_FIELDS, false);
- }
- private static boolean getPropertyBoolean(String thePropertyName, boolean theDefaultValue) {
- String value = getProperty(thePropertyName, Boolean.toString(theDefaultValue));
- return Boolean.parseBoolean(value);
- }
-
- private static T getPropertyEnum(String thePropertyName, Class theEnumType, T theDefaultValue) {
- String value = getProperty(thePropertyName, theDefaultValue.name());
- return (T) Enum.valueOf(theEnumType, value);
- }
-
- public static boolean getBulkExportEnabled() {
- return HapiProperties.getBooleanProperty(BULK_EXPORT_ENABLED, true);
- }
+ @Nonnull
+ public static Set getSupportedResourceTypes() {
+ String[] types = defaultString(getProperty("supported_resource_types")).split(",");
+ return Arrays.stream(types)
+ .map(t -> trim(t))
+ .filter(t -> isNotBlank(t))
+ .collect(Collectors.toSet());
+ }
+
+ public static String getServerName() {
+ return HapiProperties.getProperty(SERVER_NAME, "Local Tester");
+ }
+
+ public static String getServerId() {
+ return HapiProperties.getProperty(SERVER_ID, "home");
+ }
+
+ public static Boolean getAllowPlaceholderReferences() {
+ return HapiProperties.getBooleanProperty(ALLOW_PLACEHOLDER_REFERENCES, true);
+ }
+
+ public static Boolean getSubscriptionEmailEnabled() {
+ return HapiProperties.getBooleanProperty(SUBSCRIPTION_EMAIL_ENABLED, false);
+ }
+
+ public static Boolean getSubscriptionRestHookEnabled() {
+ return HapiProperties.getBooleanProperty(SUBSCRIPTION_RESTHOOK_ENABLED, false);
+ }
+
+ public static Boolean getSubscriptionWebsocketEnabled() {
+ return HapiProperties.getBooleanProperty(SUBSCRIPTION_WEBSOCKET_ENABLED, false);
+ }
+
+ public static Boolean getAllowContainsSearches() {
+ return HapiProperties.getBooleanProperty(ALLOW_CONTAINS_SEARCHES, true);
+ }
+
+ public static Boolean getAllowOverrideDefaultSearchParams() {
+ return HapiProperties.getBooleanProperty(ALLOW_OVERRIDE_DEFAULT_SEARCH_PARAMS, true);
+ }
+
+ public static String getEmailFrom() {
+ return HapiProperties.getProperty(EMAIL_FROM, "some@test.com");
+ }
+
+ public static Boolean getEmailEnabled() {
+ return HapiProperties.getBooleanProperty("email.enabled", false);
+ }
+
+ public static String getEmailHost() {
+ return HapiProperties.getProperty("email.host");
+ }
+
+ public static Integer getEmailPort() {
+ return HapiProperties.getIntegerProperty("email.port", 0);
+ }
+
+ public static String getEmailUsername() {
+ return HapiProperties.getProperty("email.username");
+ }
+
+ public static String getEmailPassword() {
+ return HapiProperties.getProperty("email.password");
+ }
+
+ // Defaults from https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.html
+ public static Boolean getEmailAuth() {
+ return HapiProperties.getBooleanProperty("email.auth", false);
+ }
+
+ public static Boolean getEmailStartTlsEnable() {
+ return HapiProperties.getBooleanProperty("email.starttls.enable", false);
+ }
+
+ public static Boolean getEmailStartTlsRequired() {
+ return HapiProperties.getBooleanProperty("email.starttls.required", false);
+ }
+
+ public static Boolean getEmailQuitWait() {
+ return HapiProperties.getBooleanProperty("email.quitwait", true);
+ }
+
+ public static Long getReuseCachedSearchResultsMillis() {
+ String value = HapiProperties.getProperty(REUSE_CACHED_SEARCH_RESULTS_MILLIS, "60000");
+ return Long.valueOf(value);
+ }
+
+ public static Long getExpireSearchResultsAfterMins() {
+ String value = HapiProperties.getProperty(EXPIRE_SEARCH_RESULTS_AFTER_MINS, "60");
+ return Long.valueOf(value);
+ }
+
+ public static Boolean getCorsAllowedCredentials() {
+ return HapiProperties.getBooleanProperty(CORS_ALLOW_CREDENTIALS, false);
+ }
+
+ public static boolean getValidateRequestsEnabled() {
+ return HapiProperties.getBooleanProperty(VALIDATE_REQUESTS_ENABLED, false);
+ }
+
+ public static boolean getValidateResponsesEnabled() {
+ return HapiProperties.getBooleanProperty(VALIDATE_RESPONSES_ENABLED, false);
+ }
+
+ public static boolean getFilterSearchEnabled() {
+ return HapiProperties.getBooleanProperty(FILTER_SEARCH_ENABLED, true);
+ }
+
+ public static boolean getGraphqlEnabled() {
+ return HapiProperties.getBooleanProperty(GRAPHQL_ENABLED, true);
+ }
+
+ public static boolean getEnforceReferentialIntegrityOnDelete() {
+ return HapiProperties.getBooleanProperty(ENFORCE_REFERENTIAL_INTEGRITY_ON_DELETE, true);
+ }
+
+ public static boolean getEnforceReferentialIntegrityOnWrite() {
+ return HapiProperties.getBooleanProperty(ENFORCE_REFERENTIAL_INTEGRITY_ON_WRITE, true);
+ }
+
+ public static boolean getAutoCreatePlaceholderReferenceTargets() {
+ return HapiProperties.getBooleanProperty(AUTO_CREATE_PLACEHOLDER_REFERENCE_TARGETS, true);
+ }
+
+ public static boolean getEnableIndexMissingFields() {
+ return HapiProperties.getBooleanProperty(ENABLE_INDEX_MISSING_FIELDS, false);
+ }
+
+ public static Integer getMaxBinarySize() {
+ return getIntegerProperty(MAX_BINARY_SIZE, null);
+ }
+
+ private static boolean getPropertyBoolean(String thePropertyName, boolean theDefaultValue) {
+ String value = getProperty(thePropertyName, Boolean.toString(theDefaultValue));
+ return Boolean.parseBoolean(value);
+ }
+
+ private static T getPropertyEnum(String thePropertyName, Class theEnumType, T theDefaultValue) {
+ String value = getProperty(thePropertyName, theDefaultValue.name());
+ return (T) Enum.valueOf(theEnumType, value);
+ }
+
+ public static boolean getBulkExportEnabled() {
+ return HapiProperties.getBooleanProperty(BULK_EXPORT_ENABLED, true);
+ }
}
diff --git a/src/main/resources/hapi.properties b/src/main/resources/hapi.properties
index 17f8a1ce322..991bd28febe 100644
--- a/src/main/resources/hapi.properties
+++ b/src/main/resources/hapi.properties
@@ -43,6 +43,11 @@ server.name=Local Tester
server.id=home
test.port=
+###################################################
+# Binary Storage (104857600 = 100mb)
+###################################################
+max_binary_size=104857600
+
###################################################
# Validation
###################################################
diff --git a/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerDstu3IT.java b/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerDstu3IT.java
index 7507bfb66e4..f1c26172edf 100644
--- a/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerDstu3IT.java
+++ b/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerDstu3IT.java
@@ -43,6 +43,8 @@ public class ExampleServerDstu3IT {
HapiProperties.setProperty(HapiProperties.FHIR_VERSION, "DSTU3");
HapiProperties.setProperty(HapiProperties.DATASOURCE_URL, "jdbc:h2:mem:dbr3");
HapiProperties.setProperty(HapiProperties.SUBSCRIPTION_WEBSOCKET_ENABLED, "true");
+ HapiProperties.setProperty(HapiProperties.ALLOW_EXTERNAL_REFERENCES, "true");
+ HapiProperties.setProperty(HapiProperties.ALLOW_PLACEHOLDER_REFERENCES, "true");
ourCtx = FhirContext.forDstu3();
}
diff --git a/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerR5IT.java b/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerR5IT.java
index 7eff8b0d00f..80f7a20aa86 100644
--- a/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerR5IT.java
+++ b/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerR5IT.java
@@ -14,12 +14,7 @@
import org.eclipse.jetty.websocket.client.ClientUpgradeRequest;
import org.eclipse.jetty.websocket.client.WebSocketClient;
import org.hl7.fhir.instance.model.api.IIdType;
-import org.hl7.fhir.r5.model.Bundle;
-import org.hl7.fhir.r5.model.Observation;
-import org.hl7.fhir.r5.model.Patient;
-import org.hl7.fhir.r5.model.Subscription;
-import org.hl7.fhir.r5.model.Topic;
-import org.hl7.fhir.r5.model.codesystems.SubscriptionChannelType;
+import org.hl7.fhir.r5.model.*;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -80,8 +75,8 @@ public void testWebsocketSubscription() throws Exception {
Subscription.SubscriptionChannelComponent channel = new Subscription.SubscriptionChannelComponent();
channel.getType().addCoding()
- .setSystem(SubscriptionChannelType.WEBSOCKET.getSystem())
- .setCode(SubscriptionChannelType.WEBSOCKET.toCode());
+ .setSystem("http://terminology.hl7.org/CodeSystem/subscription-channel-type")
+ .setCode("websocket");
channel.getPayload().setContentType("application/json");
subscription.setChannel(channel);
@@ -111,7 +106,7 @@ public void testWebsocketSubscription() throws Exception {
* Create a matching resource
*/
Observation obs = new Observation();
- obs.setStatus(Observation.ObservationStatus.FINAL);
+ obs.setStatus(Enumerations.ObservationStatus.FINAL);
ourClient.create().resource(obs).execute();
// Give some time for the subscription to deliver