Merge remote-tracking branch 'remotes/origin/master' into ks-20191119-scheduler
# Conflicts: # hapi-fhir-cli/hapi-fhir-cli-api/src/main/java/ca/uhn/fhir/cli/BaseFlywayMigrateDatabaseCommand.java
This commit is contained in:
commit
68a7613f9e
|
@ -25,7 +25,7 @@ jobs:
|
|||
inputs:
|
||||
goals: 'clean install'
|
||||
# These are Maven CLI options (and show up in the build logs) - "-nsu"=Don't update snapshots. We can remove this when Maven OSS is more healthy
|
||||
options: '-P ALLMODULES,JACOCO,CI -nsu'
|
||||
options: '-P ALLMODULES,JACOCO,CI,ERRORPRONE -nsu'
|
||||
# These are JVM options (and don't show up in the build logs)
|
||||
mavenOptions: '-Xmx2048m $(MAVEN_OPTS) -Dorg.slf4j.simpleLogger.showDateTime=true -Dorg.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss,SSS -Duser.timezone=America/Toronto'
|
||||
jdkVersionOption: 1.11
|
||||
|
|
|
@ -21,6 +21,30 @@ package ca.uhn.fhir.util;
|
|||
*/
|
||||
|
||||
public enum VersionEnum {
|
||||
V0_1,
|
||||
V0_2,
|
||||
V0_3,
|
||||
V0_4,
|
||||
V0_5,
|
||||
V0_6,
|
||||
V0_7,
|
||||
V0_8,
|
||||
V0_9,
|
||||
|
||||
V1_0,
|
||||
V1_1,
|
||||
V1_2,
|
||||
V1_3,
|
||||
V1_4,
|
||||
V1_5,
|
||||
V1_6,
|
||||
|
||||
V2_0,
|
||||
V2_1,
|
||||
V2_2,
|
||||
V2_3,
|
||||
V2_4,
|
||||
V2_5,
|
||||
V2_5_0,
|
||||
V3_0_0,
|
||||
V3_1_0,
|
||||
|
@ -32,6 +56,7 @@ public enum VersionEnum {
|
|||
V3_7_0,
|
||||
V3_8_0,
|
||||
V4_0_0,
|
||||
V4_0_3,
|
||||
V4_1_0,
|
||||
V4_2_0;
|
||||
|
||||
|
|
|
@ -130,7 +130,7 @@ public class ValidationResult {
|
|||
line = next.getLocationLine().toString();
|
||||
}
|
||||
String col = unknown;
|
||||
if (next.getLocationCol() != null && next.getLocationCol() != null) {
|
||||
if (next.getLocationCol() != null && next.getLocationCol() != -1) {
|
||||
col = next.getLocationCol().toString();
|
||||
}
|
||||
if (!unknown.equals(line) || !unknown.equals(col)) {
|
||||
|
|
|
@ -20,18 +20,19 @@ package ca.uhn.fhir.cli;
|
|||
* #L%
|
||||
*/
|
||||
|
||||
import ca.uhn.fhir.jpa.migrate.BaseMigrator;
|
||||
import ca.uhn.fhir.jpa.migrate.BruteForceMigrator;
|
||||
import ca.uhn.fhir.jpa.migrate.DriverTypeEnum;
|
||||
import ca.uhn.fhir.jpa.migrate.FlywayMigrator;
|
||||
import ca.uhn.fhir.jpa.migrate.*;
|
||||
import ca.uhn.fhir.jpa.migrate.taskdef.BaseTask;
|
||||
import org.apache.commons.cli.CommandLine;
|
||||
import org.apache.commons.cli.Options;
|
||||
import org.apache.commons.cli.ParseException;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.defaultString;
|
||||
|
@ -40,12 +41,13 @@ import static org.apache.commons.lang3.StringUtils.defaultString;
|
|||
* NB since 2019-12-05: This class is kind of weirdly named now, since it can either use Flyway or not use Flyway
|
||||
*/
|
||||
public abstract class BaseFlywayMigrateDatabaseCommand<T extends Enum> extends BaseCommand {
|
||||
|
||||
private static final Logger ourLog = LoggerFactory.getLogger(BaseFlywayMigrateDatabaseCommand.class);
|
||||
|
||||
public static final String MIGRATE_DATABASE = "migrate-database";
|
||||
public static final String NO_COLUMN_SHRINK = "no-column-shrink";
|
||||
public static final String DONT_USE_FLYWAY = "dont-use-flyway";
|
||||
public static final String OUT_OF_ORDER_PERMITTED = "out-of-order-permitted";
|
||||
public static final String SKIP_VERSIONS = "skip-versions";
|
||||
private Set<String> myFlags;
|
||||
private String myMigrationTableName;
|
||||
|
||||
|
@ -72,7 +74,6 @@ public abstract class BaseFlywayMigrateDatabaseCommand<T extends Enum> extends B
|
|||
Options retVal = new Options();
|
||||
|
||||
addOptionalOption(retVal, "r", "dry-run", false, "Log the SQL statements that would be executed but to not actually make any changes");
|
||||
|
||||
addRequiredOption(retVal, "u", "url", "URL", "The JDBC database URL");
|
||||
addRequiredOption(retVal, "n", "username", "Username", "The JDBC database username");
|
||||
addRequiredOption(retVal, "p", "password", "Password", "The JDBC database password");
|
||||
|
@ -81,6 +82,7 @@ public abstract class BaseFlywayMigrateDatabaseCommand<T extends Enum> extends B
|
|||
addOptionalOption(retVal, null, DONT_USE_FLYWAY,false, "If this option is set, the migrator will not use FlywayDB for migration. This setting should only be used if you are trying to migrate a legacy database platform that is not supported by FlywayDB.");
|
||||
addOptionalOption(retVal, null, OUT_OF_ORDER_PERMITTED,false, "If this option is set, the migrator will permit migration tasks to be run out of order. It shouldn't be required in most cases, however may be the solution if you see the error message 'Detected resolved migration not applied to database'.");
|
||||
addOptionalOption(retVal, null, NO_COLUMN_SHRINK, false, "If this flag is set, the system will not attempt to reduce the length of columns. This is useful in environments with a lot of existing data, where shrinking a column can take a very long time.");
|
||||
addOptionalOption(retVal, null, SKIP_VERSIONS, "Versions", "A comma separated list of schema versions to skip. E.g. 4_1_0.20191214.2,4_1_0.20191214.4");
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
@ -116,8 +118,9 @@ public abstract class BaseFlywayMigrateDatabaseCommand<T extends Enum> extends B
|
|||
boolean outOfOrderPermitted = theCommandLine.hasOption(BaseFlywayMigrateDatabaseCommand.OUT_OF_ORDER_PERMITTED);
|
||||
|
||||
BaseMigrator migrator;
|
||||
if (dontUseFlyway) {
|
||||
migrator = new BruteForceMigrator();
|
||||
if (dontUseFlyway || dryRun) {
|
||||
// Flyway dryrun is not available in community edition
|
||||
migrator = new TaskOnlyMigrator();
|
||||
} else {
|
||||
migrator = new FlywayMigrator(myMigrationTableName);
|
||||
}
|
||||
|
@ -128,13 +131,18 @@ public abstract class BaseFlywayMigrateDatabaseCommand<T extends Enum> extends B
|
|||
migrator.setDryRun(dryRun);
|
||||
migrator.setNoColumnShrink(noColumnShrink);
|
||||
migrator.setOutOfOrderPermitted(outOfOrderPermitted);
|
||||
addTasks(migrator);
|
||||
String skipVersions = theCommandLine.getOptionValue(BaseFlywayMigrateDatabaseCommand.SKIP_VERSIONS);
|
||||
addTasks(migrator, skipVersions);
|
||||
migrator.migrate();
|
||||
}
|
||||
|
||||
protected abstract void addTasks(BaseMigrator theMigrator);
|
||||
protected abstract void addTasks(BaseMigrator theMigrator, String theSkippedVersions);
|
||||
|
||||
public void setMigrationTableName(String theMigrationTableName) {
|
||||
myMigrationTableName = theMigrationTableName;
|
||||
}
|
||||
|
||||
protected void setDoNothingOnSkippedTasks(Collection<BaseTask> theTasks, String theSkipVersions) {
|
||||
MigrationTaskSkipper.setDoNothingOnSkippedTasks(theTasks, theSkipVersions);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,6 @@ package ca.uhn.fhir.cli;
|
|||
*/
|
||||
|
||||
import ca.uhn.fhir.jpa.migrate.BaseMigrator;
|
||||
import ca.uhn.fhir.jpa.migrate.FlywayMigrator;
|
||||
import ca.uhn.fhir.jpa.migrate.SchemaMigrator;
|
||||
import ca.uhn.fhir.jpa.migrate.taskdef.BaseTask;
|
||||
import ca.uhn.fhir.jpa.migrate.tasks.HapiFhirJpaMigrationTasks;
|
||||
|
@ -45,8 +44,9 @@ public class HapiFlywayMigrateDatabaseCommand extends BaseFlywayMigrateDatabaseC
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void addTasks(BaseMigrator theMigrator) {
|
||||
List<BaseTask<?>> tasks = new HapiFhirJpaMigrationTasks(getFlags()).getAllTasks(VersionEnum.values());
|
||||
protected void addTasks(BaseMigrator theMigrator, String theSkipVersions) {
|
||||
List<BaseTask> tasks = new HapiFhirJpaMigrationTasks(getFlags()).getAllTasks(VersionEnum.values());
|
||||
super.setDoNothingOnSkippedTasks(tasks, theSkipVersions);
|
||||
theMigrator.addTasks(tasks);
|
||||
}
|
||||
|
||||
|
|
|
@ -134,7 +134,7 @@ public class UploadTerminologyCommand extends BaseCommand {
|
|||
for (String nextDataFile : theDatafile) {
|
||||
|
||||
try (FileInputStream fileInputStream = new FileInputStream(nextDataFile)) {
|
||||
if (nextDataFile.endsWith(".csv")) {
|
||||
if (nextDataFile.endsWith(".csv") || nextDataFile.endsWith(".properties")) {
|
||||
|
||||
ourLog.info("Compressing and adding file: {}", nextDataFile);
|
||||
ZipEntry nextEntry = new ZipEntry(stripPath(nextDataFile));
|
||||
|
|
|
@ -64,6 +64,8 @@ public class UploadTerminologyCommandTest extends BaseTest {
|
|||
private File myTextFile = new File(myTextFileName);
|
||||
private File myArchiveFile;
|
||||
private String myArchiveFileName;
|
||||
private String myPropertiesFileName = "target/hello.properties";
|
||||
private File myPropertiesFile = new File(myTextFileName);
|
||||
|
||||
@Test
|
||||
public void testDeltaAdd() throws IOException {
|
||||
|
@ -238,6 +240,8 @@ public class UploadTerminologyCommandTest extends BaseTest {
|
|||
@Test
|
||||
public void testSnapshot() throws IOException {
|
||||
|
||||
|
||||
|
||||
writeConceptAndHierarchyFiles();
|
||||
|
||||
when(myTermLoaderSvc.loadCustom(any(), anyList(), any())).thenReturn(new UploadStatistics(100, new IdType("CodeSystem/101")));
|
||||
|
@ -260,6 +264,33 @@ public class UploadTerminologyCommandTest extends BaseTest {
|
|||
assertThat(IOUtils.toByteArray(listOfDescriptors.get(0).getInputStream()).length, greaterThan(100));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPropertiesFile() throws IOException {
|
||||
try (FileWriter w = new FileWriter(myPropertiesFileName, false)) {
|
||||
w.append("a=b\n");
|
||||
}
|
||||
|
||||
when(myTermLoaderSvc.loadCustom(any(), anyList(), any())).thenReturn(new UploadStatistics(100, new IdType("CodeSystem/101")));
|
||||
|
||||
App.main(new String[]{
|
||||
UploadTerminologyCommand.UPLOAD_TERMINOLOGY,
|
||||
"-v", "r4",
|
||||
"-m", "SNAPSHOT",
|
||||
"-t", "http://localhost:" + myPort,
|
||||
"-u", "http://foo",
|
||||
"-d", myPropertiesFileName,
|
||||
});
|
||||
|
||||
verify(myTermLoaderSvc, times(1)).loadCustom(any(), myDescriptorListCaptor.capture(), any());
|
||||
|
||||
List<ITermLoaderSvc.FileDescriptor> listOfDescriptors = myDescriptorListCaptor.getValue();
|
||||
assertEquals(1, listOfDescriptors.size());
|
||||
assertThat(listOfDescriptors.get(0).getFilename(), matchesPattern(".*\\.zip$"));
|
||||
assertThat(IOUtils.toByteArray(listOfDescriptors.get(0).getInputStream()).length, greaterThan(100));
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* When transferring large files, we use a local file to store the binary instead of
|
||||
* using HTTP to transfer a giant base 64 encoded attachment. Hopefully we can
|
||||
|
@ -342,6 +373,7 @@ public class UploadTerminologyCommandTest extends BaseTest {
|
|||
FileUtils.deleteQuietly(myArchiveFile);
|
||||
FileUtils.deleteQuietly(myCodeSystemFile);
|
||||
FileUtils.deleteQuietly(myTextFile);
|
||||
FileUtils.deleteQuietly(myPropertiesFile);
|
||||
|
||||
UploadTerminologyCommand.setTransferSizeLimitForUnitTest(-1);
|
||||
}
|
||||
|
|
|
@ -175,6 +175,23 @@
|
|||
</dependencySourceIncludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<dumpOnExit>true</dumpOnExit>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>default-prepare-agent</id>
|
||||
<goals>
|
||||
<goal>prepare-agent</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
|
|
@ -51,6 +51,11 @@
|
|||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.dataformat</groupId>
|
||||
<artifactId>jackson-dataformat-yaml</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.ejb</groupId>
|
||||
<artifactId>ejb-api</artifactId>
|
||||
|
@ -104,6 +109,10 @@
|
|||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
@ -18,6 +18,11 @@
|
|||
* #L%
|
||||
*/
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
|
||||
import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
|
||||
import org.apache.commons.compress.archivers.zip.UnsupportedZipFeatureException;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.jdom2.Content;
|
||||
import org.jdom2.Element;
|
||||
import org.jdom2.Namespace;
|
||||
|
@ -31,8 +36,14 @@ import javax.xml.parsers.DocumentBuilder;
|
|||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||
|
||||
/**
|
||||
* This is just here to force a javadoc to be built in order to keep
|
||||
|
@ -57,7 +68,6 @@ public class ChangelogMigrator {
|
|||
int releaseCount = 0;
|
||||
|
||||
|
||||
|
||||
Element docElement = document.getRootElement();
|
||||
Element bodyElement = docElement.getChild("body", NS);
|
||||
List<Element> releases = bodyElement.getChildren("release", NS);
|
||||
|
@ -68,22 +78,83 @@ public class ChangelogMigrator {
|
|||
ourLog.info("Found release {} - {} - {}", version, date, description);
|
||||
releaseCount++;
|
||||
|
||||
ArrayList<Object> items = new ArrayList<>();
|
||||
|
||||
for (Element nextAction : nextRelease.getChildren("action", NS)) {
|
||||
|
||||
HashMap<String, Object> itemRootMap = new HashMap<>();
|
||||
items.add(itemRootMap);
|
||||
HashMap<Object, Object> itemMap = new HashMap<>();
|
||||
itemRootMap.put("item", itemMap);
|
||||
|
||||
String type = nextAction.getAttribute("type").getValue();
|
||||
switch (type) {
|
||||
case "change":
|
||||
itemMap.put("type", "change");
|
||||
break;
|
||||
case "fix":
|
||||
itemMap.put("type", "fix");
|
||||
break;
|
||||
case "remove":
|
||||
itemMap.put("type", "remove");
|
||||
break;
|
||||
case "add":
|
||||
itemMap.put("type", "add");
|
||||
break;
|
||||
default:
|
||||
throw new Error("Unknown type: " + type);
|
||||
}
|
||||
|
||||
String issue = nextAction.getAttribute("issue") != null ? nextAction.getAttribute("issue").getValue() : null;
|
||||
if (isNotBlank(issue)) {
|
||||
itemMap.put("issue", issue);
|
||||
}
|
||||
|
||||
StringBuilder contentBuilder = new StringBuilder();
|
||||
for (Content nextContents : nextAction.getContent()) {
|
||||
if (nextContents instanceof Text) {
|
||||
String text = ((Text) nextContents).getTextNormalize();
|
||||
contentBuilder.append(text);
|
||||
contentBuilder.append(" ").append(text);
|
||||
} else {
|
||||
throw new IllegalStateException("Unknown type: " + nextContents.getClass());
|
||||
}
|
||||
}
|
||||
|
||||
String value = contentBuilder.toString().trim().replaceAll(" {2}", " ");
|
||||
itemMap.put("title", value);
|
||||
|
||||
actionCount++;
|
||||
}
|
||||
|
||||
String releaseDir = "hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/" + version.replace(".", "_");
|
||||
File releaseDirFile = new File(releaseDir);
|
||||
FileUtils.forceMkdir(releaseDirFile);
|
||||
File file = new File(releaseDirFile, "changes.yaml");
|
||||
ourLog.info("Writing file: {}", file.getAbsolutePath());
|
||||
try (FileWriter writer = new FileWriter(file, false)) {
|
||||
|
||||
YAMLFactory yf = new YAMLFactory().disable(YAMLGenerator.Feature.SPLIT_LINES);
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper(yf);
|
||||
mapper.writeValue(writer, items);
|
||||
|
||||
}
|
||||
|
||||
file = new File(releaseDirFile, "version.yaml");
|
||||
ourLog.info("Writing file: {}", file.getAbsolutePath());
|
||||
try (FileWriter writer = new FileWriter(file, false)) {
|
||||
|
||||
YAMLFactory yf = new YAMLFactory();
|
||||
ObjectMapper mapper = new ObjectMapper(yf);
|
||||
HashMap<Object, Object> versionMap = new HashMap<>();
|
||||
versionMap.put("release-date", date);
|
||||
if (isNotBlank(description)) {
|
||||
versionMap.put("codename", description);
|
||||
}
|
||||
mapper.writeValue(writer, versionMap);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ourLog.info("Found {} releases and {} actions", releaseCount, actionCount);
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
--- []
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2014-04-15"
|
|
@ -0,0 +1 @@
|
|||
--- []
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2014-04-23"
|
|
@ -0,0 +1 @@
|
|||
--- []
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2014-05-12"
|
|
@ -0,0 +1,52 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "<b>BREAKING CHANGE:</b> : IdDt has been modified so that it contains a partial or complete resource identity. Previously it contained only the simple alphanumeric id of the resource (the part at the end of the \"read\" URL for that resource) but it can now contain a complete URL or even a partial URL (e.g. \"Patient/123\") and can optionally contain a version (e.g. \"Patient/123/_history/456\"). New methods have been added to this datatype which provide just the numeric portion. See the JavaDoc for more information."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "<b>API CHANGE:</b> : Most elements in the HAPI FHIR model contain a getId() and setId() method. This method is confusing because it is only actually used for IDREF elements (which are rare) but its name makes it easy to confuse with more important identifiers. For this reason, these methods have been deprecated and replaced with get/setElementSpecificId() methods. The old methods will be removed at some point. Resource types are unchanged and retain their get/setId methods."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Allow use of QuantityDt as a service parameter to support the \"quantity\" type. Previously QuantityDt did not implement IQueryParameterType so it was not valid, and there was no way to support quantity search parameters on the server (e.g. Observation.value-quantity)"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Introduce StringParameter type which can be used as a RESTful operation search parameter type. StringParameter allows \":exact\" matches to be specified in clients, and handled in servers."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Parsers (XML/JSON) now support deleted entries in bundles"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Transaction method now supported in servers"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Support for Binary resources added (in servers, clients, parsers, etc.)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Support for Query resources fixed (in parser)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Nested contained resources (e.g. encoding a resource with a contained resource that itself contains a resource) now parse and encode correctly, meaning that all contained resources are placed in the \"contained\" element of the root resource, and the parser looks in the root resource for all container levels when stitching contained resources back together."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server methods with @Include parameter would sometimes fail when no _include was actually specified in query strings."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Client requests for IdentifierDt types (such as Patient.identifier) did not create the correct query string if the system is null."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add support for paging responses from RESTful servers."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Don't fail on narrative blocks in JSON resources with only an XML declaration but no content (these are produced by the Health Intersections server)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server now automatically compresses responses if the client indicates support"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server failed to support optional parameters when type is String and :exact qualifier is used"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Read method in client correctly populated resource ID in returned object"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Support added for deleted-entry by/name, by/email, and comment from Tombstones spec"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2014-07-13"
|
|
@ -0,0 +1,52 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "HAPI has a number of RESTful method parameter types that have similar but not identical purposes and confusing names. A cleanup has been undertaken to clean this up. This means that a number of existing classes have been deprocated in favour of new naming schemes. <br/><br/> All annotation-based clients and all server search method parameters are now named (type)Param, for example: StringParam, TokenParam, etc. <br/><br/> All generic/fluent client method parameters are now named (type)ClientParam, for example: StringClientParam, TokenClientParam, etc. <br/><br/> All renamed classes have been retained and deprocated, so this change should not cause any issues for existing applications but those applications should be refactored to use the new parameters when possible."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Allow server methods to return wildcard generic types (e.g. List<? extends IResource>)"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Search parameters are not properly escaped and unescaped. E.g. for a token parameter such as \"&identifier=system|codepart1\\|codepart2\""
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add support for OPTIONS verb (which returns the server conformance statement)"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add support for CORS headers in server"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Bump SLF4j dependency to latest version (1.7.7)"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add interceptor framework for clients (annotation based and generic), and add interceptors for configurable logging, capturing requests and responses, and HTTP basic auth."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Transaction client invocations with XML encoding were using the wrong content type (\"application/xml+fhir\" instead of the correct \"application/atom+xml\"). Thanks to David Hay of Orion Health for surfacing this one!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Bundle entries now support a link type of \"search\". Thanks to David Hay for the suggestion!"
|
||||
- item:
|
||||
issue: "1"
|
||||
type: "add"
|
||||
title: "If a client receives a non 2xx response (e.g. HTTP 500) and the response body is a text/plain message or an OperationOutcome resource, include the message in the exception message so that it will be more conveniently displayed in logs and other places. Thanks to Neal Acharya for the suggestion!"
|
||||
- item:
|
||||
issue: "2"
|
||||
type: "add"
|
||||
title: "Read invocations in the client now process the \"Content-Location\" header and use it to populate the ID of the returned resource. Thanks to Neal Acharya for the suggestion!"
|
||||
- item:
|
||||
issue: "3"
|
||||
type: "fix"
|
||||
title: "Fix issue where vread invocations on server incorrectly get routed to instance history method if one is defined. Thanks to Neal Acharya from UHN for surfacing this one!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Binary reads on a server not include the Content-Disposition header, to prevent HTML in binary blobs from being used for nefarious purposes. See <a href=\"http://gforge.hl7.org/gf/project/fhir/tracker/?action=TrackerItemEdit&tracker_id=677&tracker_item_id=3298\">FHIR Tracker Bug 3298</a> for more information."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Support has been added for using an HTTP proxy for outgoing requests."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix: Primitive extensions declared against custom resource types are encoded even if they have no value. Thanks to David Hay of Orion for reporting this!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix: RESTful server deployed to a location where the URL to access it contained a space (e.g. a WAR file with a space in the name) failed to work correctly. Thanks to David Hay of Orion for reporting this!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2014-07-30"
|
|
@ -0,0 +1,96 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add server interceptor framework, and new interceptor for logging incoming requests."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add server validation framework for validating resources against the FHIR schemas and schematrons"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Tester UI created double _format and _pretty param entries in searches. Thanks to Gered King of University Health Network for reporting!"
|
||||
- item:
|
||||
issue: "4"
|
||||
type: "fix"
|
||||
title: "Create method was incorrectly returning an HTTP 204 on sucessful completion, but should be returning an HTTP 200 per the FHIR specification. Thanks to wanghaisheng for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "FHIR Tester UI now correctly sends UTF-8 charset in responses so that message payloads containing non US-ASCII characters will correctly display in the browser"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JSON parser was incorrectly encoding extensions on composite elements outside the element itself (as is done correctly for non-composite elements) instead of inside of them. Thanks to David Hay of Orion for reporting this!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Contained/included resource instances received by a client are now automatically added to any ResourceReferenceDt instancea in other resources which reference them."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add documentation on how to use eBay CORS Filter to support Cross Origin Resource Sharing (CORS) to server. CORS support that was built in to the server itself has been removed, as it did not work correctly (and was reinventing a wheel that others have done a great job inventing). Thanks to Peter Bernhardt of Relay Health for all the assistance in testing this!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "IResource interface did not expose the getLanguage/setLanguage methods from BaseResource, so the resource language was difficult to access."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JSON Parser now gives a more friendly error message if it tries to parse JSON with invalid use of single quotes"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Transaction server method is now allowed to return an OperationOutcome in addition to the incoming resources. The public test server now does this in order to return status information about the transaction processing."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Update method in the server can now flag (via a field on the MethodOutcome object being returned) that the result was actually a creation, and Create method can indicate that it was actually an update. This has no effect other than to switch between the HTTP 200 and HTTP 201 status codes on the response, but this may be useful in some circumstances."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Annotation client search methods with a specific resource type (e.g. <code>List<Patient></code> search()) won't return any resources that aren't of the correct type that are received in a response bundle (generally these are referenced resources, so they are populated in the reference fields instead). Thanks to Tahura Chaudhry of University Health Network for the unit test!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Added narrative generator template for OperationOutcome resource"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Date/time types did not correctly parse values in the format \"yyyymmdd\" (although the FHIR-defined format is \"yyyy-mm-dd\" anyhow, and this is correctly handled). Thanks to Jeffrey Ting of Systems Made Simple for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server search method for an unnamed query gets called if the client requests a named query with the same parameter list. Thanks to Neal Acharya of University Health Network for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Category header (for tags) is correctly read in client for \"read\" operation"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Transaction method in server can now have parameter type Bundle instead of <code>List<IBaseResource></code>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "HAPI parsers now use field access to get/set values instead of method accessors and mutators. This should give a small performance boost."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JSON parser encodes resource references incorrectly, using the name \"resource\" instead of the name \"reference\" for the actual reference. Thanks to Ricky Nguyen for reporting and tracking down the issue!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Rename NotImpementedException to NotImplementedException (to correct typo)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server setUseBrowserFriendlyContentType setting also respected for errors (e.g. OperationOutcome with 4xx/5xx status)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix performance issue in date/time datatypes where pattern matchers were not static"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server now gives a more helpful error message if a @Read method has a search parameter (which is invalid, but previously lead to a very unhelpful error message). Thanks to Tahura Chaudhry of UHN for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Resource of type \"List\" failed to parse from a bundle correctly. Thanks to David Hay of Orion Health for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "QuantityParam correctly encodes approximate (~) prefix to values"
|
||||
- item:
|
||||
issue: "14"
|
||||
type: "fix"
|
||||
title: "If a server defines a method with parameter \"_id\", incoming search requests for that method may get delegated to the wrong method. Thanks to Neal Acharya for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "SecurityEvent.Object structural element has been renamed to SecurityEvent.ObjectElement to avoid conflicting names with the java Object class. Thanks to Laurie Macdougall-Sookraj of UHN for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Text/narrative blocks that were created with a non-empty namespace prefix (e.g. <xhtml:div xmlns:xhtml=\"...\">...</xhtml:div>) failed to encode correctly (prefix was missing in encoded resource)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Resource references previously encoded their children (display and reference) in the wrong order so references with both would fail schema validation."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "SecurityEvent resource's enums now use friendly enum names instead of the unfriendly numeric code values. Thanks to Laurie MacDougall-Sookraj of UHN for the suggestion!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2014-09-08"
|
|
@ -0,0 +1,81 @@
|
|||
---
|
||||
- item:
|
||||
issue: "30"
|
||||
type: "add"
|
||||
title: "<b>API CHANGE:</b> The TagList class previously implemented ArrayList semantics, but this has been replaced with LinkedHashMap semantics. This means that the list of tags will no longer accept duplicate tags, but that tag order will still be preserved. Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
issue: "33"
|
||||
type: "fix"
|
||||
title: "Server was incorrectly including contained resources being returned as both contained resources, and as top-level resources in the returned bundle for search operations. Thanks to Bill de Beaubien for reporting! This also fixes Issue #20, thanks to lephty for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Documentation fixes"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add a collection of new methods on the generic client which support the <b><a href=\"./apidocs/ca/uhn/fhir/rest/client/IGenericClient.html#read(java.lang.Class,%20ca.uhn.fhir.model.primitive.UriDt)\">read</a></b>, <b><a href=\"./apidocs/ca/uhn/fhir/rest/client/IGenericClient.html#vread(java.lang.Class,%20ca.uhn.fhir.model.primitive.UriDt)\">read</a></b>, and <b><a href=\"./apidocs/ca/uhn/fhir/rest/client/IGenericClient.html#search(java.lang.Class,%20ca.uhn.fhir.model.primitive.UriDt)\">search</a></b> operations using an absolute URL. This allows developers to perform these operations using URLs they obtained from other sources (or external resource references within resources). In addition, the existing read/vread operations will now access absolute URL references if they are passed in. Thanks to Doug Martin of the Regenstrief Center for Biomedical Informatics for contributing this implementation!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server implementation was not correctly figuring out its own FHIR Base URL when deployed on Amazon Web Service server. Thanks to Jeffrey Ting and Bill De Beaubien of Systems Made Simple for their help in figuring out this issue!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "XML Parser failed to encode fields with both a resource reference child and a primitive type child. Thanks to Jeffrey Ting and Bill De Beaubien of Systems Made Simple for their help in figuring out this issue!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "HAPI now runs successfully on Servlet 2.5 containers (such as Tomcat 6). Thanks to Bernard Gitaadji for reporting and diagnosing the issue!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Summary (in the bundle entry) is now encoded by the XML and JSON parsers if supplied. Thanks to David Hay of Orion Health for reporting this!"
|
||||
- item:
|
||||
issue: "24"
|
||||
type: "fix"
|
||||
title: "Conformance profiles which are automatically generated by the server were missing a few mandatory elements, which meant that the profile did not correctly validate. Thanks to Bill de Beaubien of Systems Made Simple for reporting this!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "XHTML (in narratives) containing escapable characters (e.g. < or \") will now always have those characters escaped properly in encoded messages."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Resources containing entities which are not valid in basic XML (e.g. §) will have those entities converted to their equivalent unicode characters when resources are encoded, since FHIR does not allow extended entities in resource instances."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add a new client interceptor which adds HTTP Authorization Bearer Tokens (for use with OAUTH2 servers) to client requests."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Add phloc-commons dependency explicitly, which resolves an issue building HAPI from source on some platforms. Thanks to Odysseas Pentakalos for the patch!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "HAPI now logs a single line indicating the StAX implementation being used upon the first time an XML parser is created."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Update methods on the server did not return a \"content-location\" header, but only a \"location\" header. Both are required according to the FHIR specification. Thanks to Bill de Beaubien of Systems Made Simple for reporting this!"
|
||||
- item:
|
||||
issue: "26"
|
||||
type: "fix"
|
||||
title: "Parser failed to correctly read contained Binary resources. Thanks to Alexander Kley for the patch!"
|
||||
- item:
|
||||
issue: "29"
|
||||
type: "fix"
|
||||
title: "Calling encode multiple times on a resource with contained resources caused the contained resources to be re-added (and the actual message to grow) with each encode pass. Thanks to Alexander Kley for the test case!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JSON-encoded contained resources with the incorrect \"_id\" element (which should be \"id\", but some incorrect examples exist on the FHIR specification) now parse correctly. In other words, HAPI previously only accepted the correct \"id\" element, but now it also accepts the incorrect \"_id\" element just to be more lenient."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Several unit tests failed on Windows (or any platform with non UTF-8 default encoding). This may have also caused resource validation to fail occasionally on these platforms as well. Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "toString() method on TokenParam was incorrectly showing the system as the value. Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Documentation on contained resources contained a typo and did not actually produce contained resources. Thanks to David Hay of Orion Health for reporting!"
|
||||
- item:
|
||||
issue: "31"
|
||||
type: "add"
|
||||
title: "Add a <a href=\"https://www.vagrantup.com/\">Vagrant</a> based environment (basically a fully built, self contained development environment) for trying out the HAPI server modules. Thanks to Preston Lee for the pull request, and for offering to maintain this!"
|
||||
- item:
|
||||
issue: "32"
|
||||
type: "add"
|
||||
title: "Change validation API so that it uses a return type instead of exceptions to communicate validation failures. Thanks to Joe Athman for the pull request!"
|
||||
- item:
|
||||
issue: "35"
|
||||
type: "add"
|
||||
title: "Add a client interceptor which adds an HTTP cookie to each client request. Thanks to Petro Mykhailysyn for the pull request!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2014-10-23"
|
|
@ -0,0 +1,120 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "<b>API CHANGE:</b> The \"FHIR structures\" for DSTU1 (the classes which model the resources and composite datatypes) have been moved out of the core JAR into their own JAR, in order to allow support for DEV resources, and DSTU2 resources when thast version is finalized. See the <a href=\"./doc_dstu2.html\">DSTU2 page</a> for more information."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "<b>Deprecated API Removal</b>: The following classes (which were deprocated previously) have now been removed: <ul> <li><b>ISecurityManager</b>: If you are using this class, the same functionality is available through the more general purpose <a href=\"http://jamesagnew.github.io/hapi-fhir/doc_rest_server_interceptor.html\">server interceptor</a> capabilities.</li> <li><b>CodingListParam</b>: This class was made redundant by the <a href=\"http://jamesagnew.github.io/hapi-fhir/apidocs/ca/uhn/fhir/rest/param/TokenOrListParam.html\">TokenOrListParam</a> class, which can be used in its place.</li> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "<b>API Change</b>: The IResource#getResourceMetadata() method has been changed from returning <code>Map<ResourceMetadataKeyEnum<?>, Object></code> to returning a new type called <code>ResourceMetadataMap</code>. This new type implements <code>Map<ResourceMetadataKeyEnum<?>, Object></code> itself, so this change should not break existing code, but may require a clean build in order to run correctly."
|
||||
- item:
|
||||
issue: "38"
|
||||
type: "add"
|
||||
title: "Profile generation on the server was not working due to IdDt being incorrectly used. Thanks to Bill de Beaubien for the pull request!"
|
||||
- item:
|
||||
issue: "42"
|
||||
type: "add"
|
||||
title: "Profiles did not generate correctly if a resource definition class had a defined extension which was of a composite type. Thanks to Bill de Beaubien for the pull request!"
|
||||
- item:
|
||||
issue: "44"
|
||||
type: "add"
|
||||
title: "Remove unnecessary IOException from narrative generator API. Thanks to Petro Mykhailysyn for the pull request!"
|
||||
- item:
|
||||
issue: "48"
|
||||
type: "add"
|
||||
title: "Introduced a new <code>@ProvidesResources</code> annotation which can be added to resource provider and servers to allow them to declare additional resource classes they are able to serve. This is useful if you have a server which can serve up multiple classes for the same resource type (e.g. a server that sometimes returns a default Patient, but sometimes uses a custom subclass). Thanks to Bill de Beaubien for the pull request!"
|
||||
- item:
|
||||
issue: "49"
|
||||
type: "add"
|
||||
title: "Introduced a new <code>@Destroy</code> annotation which can be added to a resource provider method. This method will be called by the server when it is being closed/destroyed (e.g. when the application is being undeployed, the container is being shut down, etc.) Thanks to Bill de Beaubien for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add a new method handleException to the server interceptor framework which allows interceptors to be notified of any exceptions and runtime errors within server methods. Interceptors may optionally also override the default error handling behaviour of the RestfulServer."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add constants to BaseResource for the \"_id\" search parameter which all resources should support."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "DateRangeParam parameters on the server now return correct <code>getLowerBoundAsInstant()</code> and <code>getUpperBoundAsInstant()</code> values if a single unqualified value is passed in. For example, if a query containing <code>&birthdate=2012-10-01</code> is received, previously these two methods would both return the same value, but with this fix <code>getUpperBoundAsInstant()</code> now returns the instant at 23:59:59.9999."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Resource fields with a type of \"*\" (or Any) sometimes failed to parse if a value type of \"code\" was used. Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Remove dependency on JAXB libraries, which were used to parse and encode dates and times (even in the JSON parser). JAXB is built in to most JDKs but the version bundled with IBM's JDK is flaky and resulted in a number of problems when deploying to Websphere."
|
||||
- item:
|
||||
issue: "50"
|
||||
type: "fix"
|
||||
title: "Primitive datatypes now preserve their original string value when parsing resources, as well as containing the \"parsed value\". For instance, a DecimalDt field value of <code>1.0000</code> will be parsed into the corresponding decimal value, but will also retain the original value with the corresponding level of precision. This allows vadliator rules to be applied to original values as received \"over the wire\", such as well formatted but invalid dates, e.g. \"2001-15-01\". Thanks to Joe Athman for reporting and helping to come up with a fix!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When using Generic Client, if performing a create or update operation using a String as the resource body, the client will auto-detect the FHIR encoding style and send an appropriate Content-Type header."
|
||||
- item:
|
||||
issue: "52"
|
||||
type: "fix"
|
||||
title: "JPA module (and public HAPI-FHIR test server) were unable to process resource types where at least one search parameter has no path specified. These now correctly save (although the server does not yet process these params, and it should). Thanks to GitHub user shvoidlee for reporting and help with analysis!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Generic/Fluent Client \"create\" and \"update\" method requests were not setting a content type header"
|
||||
- item:
|
||||
issue: "53"
|
||||
type: "add"
|
||||
title: "DateDt left precision value as null in the constructor DateDt(Date) ."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "RESTful server now doesn't overwrite resource IDs if they are absolute. In other words, if a server's Resource Provider returns a resource with ID \"Patient/123\" it will be translated to \"[base url]/Patient/123\" but if the RP returns ID \"http://foo/Patient/123\" the ID will be returned exactly as is. Thanks to Bill de Beaubien for the suggestion!"
|
||||
- item:
|
||||
issue: "55"
|
||||
type: "fix"
|
||||
title: "JPA module Transaction operation was not correctly replacing logical IDs beginning with \"cid:\" with server assigned IDs, as required by the specification."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "FhirTerser did not visit or find children in contained resources when searching a resource. This caused server implementations to not always return contained resources when they are included with a resource being returned."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add a method String IResource#getResourceName() which returns the name of the resource in question (e.g. \"Patient\", or \"Observation\"). This is intended as a convenience to users."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Do not strip version from resource references in resources returned from server search methods. Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
issue: "54"
|
||||
type: "fix"
|
||||
title: "Correct an issue with the validator where changes to the underlying OperationOutcome produced by a validation cycle cause the validation results to be incorrect."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Client interceptors registered to an interface based client instance were applied to other client instances for the same client interface as well. (Issue did not affect generic/fluent clients)"
|
||||
- item:
|
||||
issue: "57"
|
||||
type: "fix"
|
||||
title: "DateDt, DateTimeDt and types InstantDt types now do not throw an exception if they are used to parse a value with the wrong level of precision for the given type but do throw an exception if the wrong level of precision is passed into their constructors. <br/><br/> This means that HAPI FHIR can now successfully parse resources from external sources that have the wrong level of precision, but will generate a validation error if the resource is validated. Thanks to Alexander Kley for the suggestion!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Encoding a Binary resource without a content type set should not result in a NullPointerException. Thanks to Alexander Kley for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Server gives a more helpful error message if multiple IResourceProvider implementations are provided for the same resource type. Thanks to wanghaisheng for the idea!"
|
||||
- item:
|
||||
issue: "61"
|
||||
type: "add"
|
||||
title: "Bring DSTU1 resource definitions up to version 0.0.82-2929 <br/> Bring DEV resource definitions up to 0.4.0-3775 <br/> Thanks to crinacimpian for reporting!"
|
||||
- item:
|
||||
issue: "62"
|
||||
type: "add"
|
||||
title: "JPA server did not correctly process _include requests if included resources were present with a non-numeric identifier. Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
issue: "60"
|
||||
type: "fix"
|
||||
title: "Client requests which include a resource/bundle body (e.g. create, update, transaction) were not including a charset in the content type header, leading to servers incorrectly assuming ISO-8859/1. Thanks to shvoidlee for reporting!"
|
||||
- item:
|
||||
issue: "59"
|
||||
type: "fix"
|
||||
title: "Clean up the way that Profile resources are automatically exported by the server for custom resource profile classes. See the <a href=\"http://jamesagnew.github.io/hapi-fhir/apidocs/ca/uhn/fhir/model/api/annotation/ResourceDef.html\">@ResourceDef</a> JavaDoc for information on how this works."
|
||||
- item:
|
||||
issue: "73"
|
||||
type: "add"
|
||||
title: "Add convenience methods to TokenOrListParam to test whether any of a set of tokens match the given requested list."
|
||||
- item:
|
||||
issue: "86"
|
||||
type: "add"
|
||||
title: "Add a protected method to RestfulServer which allows developers to implement their own method for determining which part of the request URL is the FHIR request path (useful if you are embedding the RestulServer inside of another web framework). Thanks to Harsha Kumara for the pull request!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2014-12-17"
|
|
@ -0,0 +1,99 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Support for DSTU2 features introduced: New resource definitions, Bundle resource, encoding changes (ID in resource bodt, meta tag)"
|
||||
- item:
|
||||
issue: "65"
|
||||
type: "fix"
|
||||
title: "Fix an issue encoding extensions on primitive types in JSON. Previously the \"_value\" object would be an array even if the field it was extending was not repeatable. This is not correct according to the specification, nor can HAPI's parser parse this correctly. The encoder has been corrected, and the parser has been adjusted to be able to handle resources with extensions encoded in this way. Thanks to Mohammad Jafari for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Library now checks if custom resource types can be instantiated on startup (e.g. because they don't have a no-argument constructor) in order to avoid failing later"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Bump a few dependency JARs to the latest versions in Maven POM: <ul> <li>SLF4j (in base module) - Bumped to 1.7.9</li> <li>Apache HTTPClient (in base module) - Bumped to 4.3.6</li> <li>Hibernate (in JPA module) - Bumped to 4.3.7</li> </ul>"
|
||||
- item:
|
||||
issue: "67"
|
||||
type: "fix"
|
||||
title: "IdDt failed to recognize local identifiers containing fragments that look like real identifiers as being local identifiers even though they started with '#'. For example, a local resource reference of \"#aa/_history/aa\" would be incorrectly parsed as a non-local reference. Thanks to Mohammad Jafari for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "<code>Last-Modified</code> header in server was incorrectly using FHIR date format instead of RFC-1123 format."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server create and update methods failed with an IllegalArgumentException if the method type was a custom resource definition type (instead of a built-in HAPI type). Thanks to Neal Acharya for the analysis."
|
||||
- item:
|
||||
issue: "79"
|
||||
type: "add"
|
||||
title: "JPA server module now supports <code>_include</code> value of <code>*</code> . Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "IdDt method withServerBase returned String (unlike all of the other \"withFoo\" methods on that class), and did not work correctly if the IdDt already had a server base. This has been corrected. Note that the return type for this method has been changed, so code may need to be updated."
|
||||
- item:
|
||||
issue: "84"
|
||||
type: "fix"
|
||||
title: "In previous versions of HAPI, the XML parser encoded multiple contained resources in a single <code><contained></contained></code> tag, even though the FHIR specification rerquires a separate <code><contained></contained></code> tag for each resource. This has been corrected. Note that the parser will correctly parse either form (this has always been the case) so this change should not cause any breakage in HAPI based trading partners, but may cause issues if other applications have been coded to depend on the incorrect behaviour. Thanks to Mochaholic for reporting!"
|
||||
- item:
|
||||
issue: "91"
|
||||
type: "fix"
|
||||
title: "Custom/user defined resource definitions which contained more than one child with no order defined failed to initialize properly. Thanks to Andy Huang for reporting and figuring out where the problem was!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "RESTful Client now queries the server (only once per server base URL) to ensure that the given server corresponds to the correct version of the FHIR specification, as defined by the FhirContext. This behaviour can be disabled by setting the appropriate configuration on the RestfulClientConfig. Thanks to Grahame Grieve for the suggestion!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA module now supports deleting resource via transaction"
|
||||
- item:
|
||||
issue: "97"
|
||||
type: "fix"
|
||||
title: "DateClientParam#second() incorrectly used DAY precision instead of SECOND precision. Thanks to Tom Wilson for the pull request!"
|
||||
- item:
|
||||
issue: "100"
|
||||
type: "fix"
|
||||
title: "Fix issue where HAPI failed to initialize correctly if Woodstox library was not on the classpath, even if StAX API was configured to use a different provider. Thanks to James Butler for reporting and figuring out where the issue was!"
|
||||
- item:
|
||||
issue: "101"
|
||||
type: "fix"
|
||||
title: "Calling BaseDateTimeDt#setValue(Date, TemporalPrecisionEnum) did not always actually respect the given precision when the value was encoded. Thanks to jacksonjesse for reporting!"
|
||||
- item:
|
||||
issue: "103"
|
||||
type: "fix"
|
||||
title: "Encoders (both XML and JSON) will no longer encode contained resources if they are not referenced anywhere in the resource via a local reference. This is just a convenience for users who have parsed a resource with contained resources and want to remove some before re-encoding. Thanks to Alexander Kley for reporting!"
|
||||
- item:
|
||||
issue: "110"
|
||||
type: "fix"
|
||||
title: "Add support for DSTU2 style security labels in the parser and encoder. Thanks to Mohammad Jafari for the contribution!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server requests for Binary resources where the client has explicitly requested XML or JSON responses (either with a <code>_format</code> URL parameter, or an <code>Accept</code> request header) will be responded to using the Binary FHIR resource type instead of as Binary blobs. This is in accordance with the recommended behaviour in the FHIR specification."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add new properties to RestfulServer: \"DefaultResponseEncoding\", which allows users to configure a default encoding (XML/JSON) to use if none is specified in the client request. Currently defaults to XML. Also \"DefaultPrettyPrint\", which specifies whether to pretty print responses by default. Both properties can be overridden on individual requets using the appropriate Accept header or request URL parameters."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add support for quantity search params in FHIR tester UI"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add support for FHIR \"extended operations\" as defined in the FHIR DSTU2 specification, for the Generic Client, Annotation Client, and Server."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Observation.applies[x] and other similar search fields with multiple allowable value types were not being correctly indexed in the JPA server."
|
||||
- item:
|
||||
issue: "122"
|
||||
type: "fix"
|
||||
title: "DateClientParam.before() incorrectly placed \"<=\" instead of \"<\" in the request URL. Thanks to Ryan for reporting!"
|
||||
- item:
|
||||
issue: "77"
|
||||
type: "add"
|
||||
title: "Server now only automatically adds _include resources which are provided as references if the client request actually requested that specific include. See RestfulServer"
|
||||
- item:
|
||||
issue: "120"
|
||||
type: "fix"
|
||||
title: "User defined resource types which contain extensions that use a bound code type (e.g. an BoundCodeDt with a custom Enum) failed to parse correctly. Thanks to baopingle for reporting and providing a test case!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Sorting is now supported in the Web Testing UI (previously a button existed for sorting, but it didn't do anything)"
|
||||
- item:
|
||||
issue: "111"
|
||||
type: "add"
|
||||
title: "Server will no longer include stack traces in the OperationOutcome returned to the client when an exception is thrown. A new interceptor called ExceptionHandlingInterceptor has been created which adds this functionality back if it is needed (e.g. for DEV setups). See the server interceptor documentation for more information. Thanks to Andy Huang for the suggestion!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2015-03-14"
|
|
@ -0,0 +1,141 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Bump the version of a few dependencies to the latest versions: <ul> <li>Phloc-commons (for schematron validation) 4.3.5 -> 4.3.6</li> <li>Apache HttpClient 4.3.6 -> 4.4</li> <li>Woodstox 4.4.0 -> 4.4.1</li> <li>SLF4j 1.7.9 -> 1.7.10</li> <li>Spring (used in hapi-fhir-jpaserver-base module) 4.1.3.RELEASE -> 4.1.5.RELEASE</li> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add support for \"profile\" and \"tag\" elements in the resource Meta block when parsing DSTU2 structures."
|
||||
- item:
|
||||
issue: "113"
|
||||
type: "fix"
|
||||
title: "When a user manually creates the list of contained resources in a resource, the encoder fails to encode any resources that don't have a '#' at the start of their ID. This is unintuitive, so we now assume that '123' means '#123'. Thanks to myungchoi for reporting and providing a test case!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add methods for setting the default encoding (XML/JSON) and oretty print behaviour in the Fluent Client. Thanks to Stackoverflow user ewall for the idea."
|
||||
- item:
|
||||
issue: "129"
|
||||
type: "fix"
|
||||
title: "JPA Server did not mark a resource as \"no longer deleted\" if it was updated after being deleted. Thanks to Elliott Lavy and Lloyd McKenzie for reporting!"
|
||||
- item:
|
||||
issue: "128"
|
||||
type: "fix"
|
||||
title: "Fix regression in 0.9 - Server responds with an HTTP 500 and a NullPointerException instead of an HTTP 400 and a useful error message if the client requests an unknown resource type"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add support for <code>_revinclude</code> parameter in client, server, and JPA."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Include constants on resources (such as <code>Observation.INCLUDE_VALUE_STRING</code> ) have been switched in the DSTU2 structures to use the new syntax required in DSTU2: [resource name]:[search param NAME] insead of the DSTU1 style [resource name].[search param PATH]"
|
||||
- item:
|
||||
issue: "124"
|
||||
type: "add"
|
||||
title: "When encoding resources, the parser will now convert any resource references to versionless references automatically (i.e. it will omit the version part automatically if one is present in the reference) since references between resources must be versionless. Additionally, references in server responses will omit the server base URL part of the reference if the base matches the base for the server giving the response."
|
||||
- item:
|
||||
issue: "130"
|
||||
type: "fix"
|
||||
title: "Narrative generator incorrectly sets the Resource.text.status to 'generated' even if the given resource type does not have a template (and therefore no narrative is actually generated). Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Searching in JPA server with no search parameter returns deleted resources when it should exclude them."
|
||||
- item:
|
||||
issue: "135"
|
||||
type: "add"
|
||||
title: "Remove Eclipse and IntelliJ artifacts (.project, *.iml, etc) from version control. Thanks to Doug Martin for the suggestion!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "REST server methods may now have a parameter of type NarrativeModeEnum which will be populated with the value of the _narrative URL parameter if one was supplied. Annotation client methods may also include a parameter of this type, and it will be used to populate this parameter on the request URL if it is not null. Thanks to Neal Acharya for the idea!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Android JAR now includes servlet-API classes, as the project will not work without them. Thanks"
|
||||
- item:
|
||||
issue: "116"
|
||||
type: "fix"
|
||||
title: "Requested _include values are preserved across paging links when the server returns multiple pages. Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
issue: "138"
|
||||
type: "add"
|
||||
title: "Add new server address strategy \"ApacheProxyAddressStrategy\" which uses headers \"x-forwarded-host\" and \"x-forwarded-proto\" to determine the server's address. This is useful if you are deploying a HAPI FHIR server behind an Apache proxy (e.g. for load balancing or other reasons). Thanks to Bill de Beaubien for contributing!"
|
||||
- item:
|
||||
issue: "143"
|
||||
type: "fix"
|
||||
title: "Resource references between separate resources found in a single bundle did not get populated with the actual resource when parsing a DSTU2 style bundle. Thanks to Nick Peterson for reporting and figuring out why none of our unit tests were actually catching the problem!"
|
||||
- item:
|
||||
issue: "146"
|
||||
type: "fix"
|
||||
title: "JSON encoder did not encode contained resources when encoding a DSTU2 style bundle. Thanks to Mohammad Jafari and baopingle for all of their help in tracking this issue down and developing useful unit tests to demonstrate it."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Client now supports invoking transcation using a DSTU2-style Bundle resource as the input."
|
||||
- item:
|
||||
issue: "147"
|
||||
type: "fix"
|
||||
title: "JPA Server $everything operation could sometimes include a duplicate copy of the main focus resource if it was referred to in a deep chain. Thanks to David Hay for reporting!"
|
||||
- item:
|
||||
issue: "148"
|
||||
type: "add"
|
||||
title: "JPA Server $everything operation now allows a _count parameter"
|
||||
- item:
|
||||
issue: "139"
|
||||
type: "fix"
|
||||
title: "JPA server failed to index resources containing ContactPointDt elements with populated values (e.g. Patient.telecom). Thanks to Mohammad Jafari for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add a new configuration method on the parsers, <code>setStripVersionsFromReferences(boolean)</code> which configures the parser to preserve versions in resource reference links when encoding. By default, these are removed."
|
||||
- item:
|
||||
issue: "155"
|
||||
type: "fix"
|
||||
title: "Terser's IModelVisitor now supplies to the path to the element. This is an API change, but I don't think there are many users of the IModelVisitor yet. Please let us know if this is a big hardship and we can find an alternate way of making this change."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Prevent server from returning a Content-Location header for search response when using the DSTU2 bundle format"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server (uhnfhirtest.uhn.ca) sometimes included an empty \"text\" element in Bundles being returned."
|
||||
- item:
|
||||
issue: "162"
|
||||
type: "add"
|
||||
title: "Add a framework for the Web Tester UI to allow its internal FHIR client to be configured (e.g. to add an authorization interceptor so that it adds credentials to client requests it makes). Thanks to Harsha Kumara for the suggestion!"
|
||||
- item:
|
||||
issue: "163"
|
||||
type: "fix"
|
||||
title: "Fix regression in early 1.0 builds where resource type sometimes does not get populated in a resource ID when the resource is parsed. Thanks to Nick Peterson for reporting, and for providing a test case!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Allow fluent/generic client users to execute a transaction using a raw string (containing a bundle resource) as input instead of a Bundle resource class instance."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Disable date validation in the web tester UI, so that it is possible to enter partial dates, or dates without times, or even test out invalid date options."
|
||||
- item:
|
||||
issue: "36"
|
||||
type: "fix"
|
||||
title: "Make BaseElement#getUndeclaredExtensions() and BaseElement#getUndeclaredExtensions() return a mutable list so that it is possible to delete extensions from a resource instance."
|
||||
- item:
|
||||
issue: "168"
|
||||
type: "fix"
|
||||
title: "Server conformance statement check in clients (this is the check where the first time a given FhirContext is used to access a given server base URL, it will first check the server's Conformance statement to ensure that it supports the correct version of FHIR) now uses any registered client interceptors. In addition, IGenericClient now has a method \"forceConformanceCheck()\" which manually triggers this check. Thanks to Doug Martin for reporting and suggesting!"
|
||||
- item:
|
||||
issue: "167"
|
||||
type: "add"
|
||||
title: "Rename the Spring Bean definition for the JPA server EntityManager from \"myEntityManagerFactory\" to just \"entityManagerFactory\" as this is the default bean name expected in other parts of the Spring framework. Thanks to Mohammad Jafari for the suggestion!"
|
||||
- item:
|
||||
issue: "164"
|
||||
type: "add"
|
||||
title: "Improve error message when a user tries to perform a create/update with an invalid or missing Content-Type header. Thanks to wanghaisheng for reporting! (This was actually a three part bug, so the following two fixes also reference this bug number)"
|
||||
- item:
|
||||
issue: "164"
|
||||
type: "add"
|
||||
title: "Add support for :missing qualifier in generic/fluent client."
|
||||
- item:
|
||||
issue: "164"
|
||||
type: "add"
|
||||
title: "Add support for :missing qualifier in JPA server."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add a new configuration method on the parsers, <code>setStripVersionsFromReferences(boolean)</code> which configures the parser to preserve versions in resource reference links when encoding. By default, these are removed."
|
||||
- item:
|
||||
issue: "171"
|
||||
type: "add"
|
||||
title: "Add an exception for RESTful clients/servers to represent the HTTP 403 Forbidden status code. Thanks to Joel Costigliola for the patch!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Transaction server operations incorrectly used the \"Accept\" header instead of the \"Content-Type\" header to determine the POST request encoding. Thanks to Rene Spronk for providing a test case!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2015-04-08"
|
|
@ -0,0 +1,104 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add support for reference implementation structures."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Parsers did not encode the resource meta element if the resource had tags but no other meta elements. Thanks to Bill de Beaubien and Claude Nanjo for finding this."
|
||||
- item:
|
||||
issue: "164"
|
||||
type: "fix"
|
||||
title: "Correct performance issue with :missing=true search requests where the parameter is a resource link. Thanks to wanghaisheng for all his help in testing this."
|
||||
- item:
|
||||
issue: "149"
|
||||
type: "fix"
|
||||
title: "The self link in the Bundle returned by searches on the server does not respect the server's address strategy (which resulted in an internal IP being shown on fhirtest.uhn.ca)"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Introduce ResponseHighlighterInterceptor, which provides syntax highlighting on RESTful server responses if the server detects that the request is coming from a browser. This interceptor has been added to fhirtest.uhn.ca responses."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Performing a create operation in a client used an incorrect URL if the resource had an ID set. ID should be ignored for creates. Thanks to Peter Girard for reporting!"
|
||||
- item:
|
||||
issue: "170"
|
||||
type: "add"
|
||||
title: "Add better addXXX() methods to structures, which take the datatype being added as a parameter. Thanks to Claude Nanjo for the suggestion!"
|
||||
- item:
|
||||
issue: "152"
|
||||
type: "add"
|
||||
title: "Add a new parser validation mechanism (see the <a href=\"./doc_validation.html\">validation page</a> for info) which can be used to validate resources as they are being parsed, and optionally fail if invalid/unexpected elements are found in resource bodies during parsing."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "IParser#parseResource(Class, String) method, which is used to parse a resource into the given structure will now throw a DataFormatException if the structure is for the wrong type of resource for the one actually found in the input String (or Reader). For example, if a Patient resource is being parsed into Organization.class this will now cause an error. Previously, the XML parser would ignore the type and the JSON parser would fail. This also caused operations to not parse correctly if they returned a resource type other than parameters with JSON encoding (e.g. the $everything operation on UHN's test server). Thanks to Avinash Shanbhag for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Web tester UI now supports _revinclude"
|
||||
- item:
|
||||
issue: "178"
|
||||
type: "fix"
|
||||
title: "Support link elements in Bundle.entry when parsing in DSTU2 mode using the old (non-resource) Bundle class. Thanks to GitHub user @joedai for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "LoggingInterceptor for server now supports logging DSTU2 extended operations by name"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Woodstox XML parser has a default setting to limit the maximum length of an attribute to 512kb. This caused issues handling large attachments, so this setting has been increased to 100Mb. Thanks to Nikos Kyriakoulakos for reporting!"
|
||||
- item:
|
||||
issue: "175"
|
||||
type: "fix"
|
||||
title: "Some HTML entities were not correctly converted during parsing. Thanks to Nick Kitto for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In the JPA Server: Transactions creating resources with temporary/placeholder resource IDs and other resources with references to those placeholder IDs previously did not work if the reference did not contain the resource type (e.g. Patient/urn:oid:0.1.2.3 instead of urn:oid:0.1.2.3). The latter is actually the correct way of specifying a reference to a placeholder, but the former was the only way that worked. Both forms now work, in order to be lenient. Thanks to Bill De Beaubien for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When parsing Bundles, if Bundle.entry.base is set to \"cid:\" (for DSTU1) or \"urn:uuid:\" / \"urn:oid:\" (for DSTU2) this is now correctly passed as the base in resource.getId(). Conversely, when encoding bundles, if a resource ID has a base defined, and Bundle.entry.base is empty, it will now be automatically set by the parser."
|
||||
- item:
|
||||
issue: "179"
|
||||
type: "add"
|
||||
title: "Add fluent client method for validate operation, and support the new DSTU2 style extended operation for $validate if the client is in DSTU2 mode. Thanks to Eric from the FHIR Skype Implementers chat for reporting."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Server now supports complete Accept header content negotiation, including q values specifying order of preference. Previously the q value was ignored."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Server in DSTU2 mode now indicates that whether it has support for Transaction operation or not. Thanks to Kevin Paschke for pointing out that this wasn't working!"
|
||||
- item:
|
||||
issue: "166"
|
||||
type: "add"
|
||||
title: "Questionnaire.title now gets correctly indexed in JPA server (it has no path, so it is a special case)"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server now supports ifNoneMatch in GET within a transaction request."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "DateRangeParam now supports null values in the constructor for lower or upper bounds (but still not both)"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Generic/fluent client and JPA server now both support _lastUpdated search parameter which was added in DSTU2"
|
||||
- item:
|
||||
issue: "188"
|
||||
type: "fix"
|
||||
title: "JPA server now supports sorting on reference parameters. Thanks to Vishal Kachroo for reporting that this wasn't working!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Prevent Last-Updated header in responses coming back to the client from overwriting the 'lastUpdated' value in the meta element in DSTU2 resources. This is important because 'lastUpdated' can have more precision than the equivalent header, but the client previously gave the header priority."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server supports _count parameter in transaction containing search URL (nested search)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "DSTU2 servers now indicate support for conditional create/update/delete in their conformance statement."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Support for the Prefer header has been added to the server, client, and JPA modules."
|
||||
- item:
|
||||
issue: "196"
|
||||
type: "fix"
|
||||
title: "JPA server failed to search for deep chained parameters across multiple references, e.g. \"Location.partof.partof.organization\". Thanks to Ismael Sarmento Jr for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Prevent crash when encoding resources with contained resources if the contained resources contained a circular reference to each other"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add $meta, $meta-add, and $meta-delete operations to generic client"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2015-07-13"
|
|
@ -0,0 +1,143 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server now validates QuestionnaireAnswers for conformance to their respective Questionnaire if one is declared."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "SyntaxHighlightingInterceptor now also highlights OperationOutcome responses for errors/exceptions."
|
||||
- item:
|
||||
issue: "126"
|
||||
type: "fix"
|
||||
title: "Model classes do not use BoundCodeableConcept for example bindings that do not actually point to any codes (e.g. Observation.interpretation). Thanks to GitHub user @steve1medix for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Server now exports operations as separate resources instead of as contained resources within Conformance"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add new operation $get-resource-counts which will replace the resource count extensions exported in the Conformance statement by the JPA server."
|
||||
- item:
|
||||
issue: "198"
|
||||
type: "fix"
|
||||
title: "JPA server sorting often returned unexpected orders when multiple indexes of the same type were found on the same resource (e.g. multiple string indexed fields). Thanks to Travis Cummings for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add another method to IServerInterceptor which converts an exception generated on the server into a BaseServerResponseException. This is useful so that servers using ResponseHighlighterInterceptor will highlight exceptions even if they aren't created with an OperationOutcome."
|
||||
- item:
|
||||
issue: "158"
|
||||
type: "fix"
|
||||
title: "XmlParser and JsonParser in DSTU2 mode should not encode empty tags in resource. Thanks to Bill De Beaubien for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "OperationDefinitions generated by server did not properly document their return parameters or the type of their input parameters."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Operations in server generated conformance statement should only appear once per name, since the name needs to be unique."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Resources and datatypes are now serializable. This is an experimental feature which hasn't yet been extensively tested. Please test and give us your feedback!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Switch REST server to using HttpServletRequest#getContextPath() to get the servlet's context path. This means that the server should behave more predictably, and should work in servlet 2.4 environments. Thanks to Ken Zeisset for the suggestion!"
|
||||
- item:
|
||||
issue: "200"
|
||||
type: "add"
|
||||
title: "Vagrant environment now has an apt recipt to ensure that package lists are up to date. Thanks to GitHub user Brian S. Corbin (@corbinbs) for thr contribution!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server and generic client now both support the _tag search parameter"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add support for BATCH mode to JPA server transaction operation"
|
||||
- item:
|
||||
issue: "192"
|
||||
type: "fix"
|
||||
title: "Server was not correctly unescaping URL parameter values with a trailing comma or an escaped backslash. Thanks to GitHub user @SherryH for all of her help in diagnosing this issue!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Avoid crash when parsing if an invalid child element is found in a resource reference."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Create new android specialty libraries for DSTU1 and DSTU2"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Throwing a server exception (e.g. AuthenticationException) in a server interceptor's incomingRequestPreProcessed method resulted in the server returning an HTTP 500 instead of the appropriate error code for the exception being thrown. Thanks to Nagesh Bashyam for reporting!"
|
||||
- item:
|
||||
issue: "207"
|
||||
type: "fix"
|
||||
title: "Fix issue in JSON parser where invalid contained resources (missing a resourceType element) fail to parse with a confusing NullPointerException. Thanks to GitHub user @hugosoares for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server now implements the $validate-code operation"
|
||||
- item:
|
||||
issue: "125"
|
||||
type: "add"
|
||||
title: "HAPI-FHIR now has support for _summary and _elements parameters, in server, client, and JPA server."
|
||||
- item:
|
||||
issue: "209"
|
||||
type: "fix"
|
||||
title: "_revinclude results from JPA server should have a Bundle.entry.search.mode of \"include\" and not \"match\". Thanks to Josh Mandel for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Resource references using resource instance objects instead of resource IDs will correctly qualify the IDs with the resource type if they aren't already qualified"
|
||||
- item:
|
||||
issue: "211"
|
||||
type: "add"
|
||||
title: "Testpage Overlay project now properly allows a custom client factory to be used (e.g. for custom authentication, etc.) Thanks to Chin Huang (@pukkaone) for the pull request!"
|
||||
- item:
|
||||
issue: "212"
|
||||
type: "fix"
|
||||
title: "JPA server should reject IDs containing invalid characters (e.g. \"abc:123\") but should allow client assigned IDs that contain text but do not start with text. Thanks to Josh Mandel for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: ":text modifier on server and JPA server did not work correctly. Thanks to Josh Mandel for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix issue in client where parameter values containing a comma were sometimes double escaped."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "_include parameters now support the new <code>_include:recurse=FOO</code> syntax that has been introduced in DSTU2 in the Client, Server, and JPA Server modules. Non-recursive behaviour is now the default (previously it was recursive) and :recurse needs to be explicitly stated in order to support recursion."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "New operations added to JPA server to force re-indexing of all resources (really only useful after indexes change or bugs are fixed)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server did not correctly index search parameters of type \"URI\". Thanks to David Hay for reporting! Note that if you are using the JPA server, this change means that there are two new tables added to the database schema. Updating existing resources in the database may fail unless you set default values for the resource table by issuing a SQL command similar to the following (false may be 0 or something else, depending on the database platform in use) <br/><code>update hfj_resource set sp_coords_present = false;<br/> update hfj_resource set sp_uri_present = false;</code>"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "FIx issue in JPA server where profile declarations, tags, and security labels were not always properly removed by an update that was trying to remove them. Also don't store duplicates."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Instance $meta operations on JPA server did not previously return the resource version and lastUpdated time"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server responses populate Bundle.entry.fullUrl if possible. Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "XML parser failed to initialize in environments where a very old Woodstox library is in use (earlier than 4.0). Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
issue: "216"
|
||||
type: "fix"
|
||||
title: "Invalid/unexpected attributes found when parsing composite elements should be logged or reported to the parser error handler"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server can now store Conformance resources, per a request from David Hay"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "ResponseHighlightingInterceptor now skips handling responses if it finds a URL parameter of <code>_raw=true</code> (in other words, if this parameter is found, the response won't be returned as HTML even if the request is detected as coming from a browser."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "RestfulServer now supports dynamically adding and removing resource providers at runtime. Thanks to Bill Denton for adding this."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server now correctly suppresses contents of deleted resources in history"
|
||||
- item:
|
||||
issue: "222"
|
||||
type: "fix"
|
||||
title: "JPA server returned deleted resources in search results when using the _tag, _id, _profile, or _security search parameters"
|
||||
- item:
|
||||
issue: "223"
|
||||
type: "fix"
|
||||
title: "Fix issue with build on Windows. Thanks to Bryce van Dyk for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server now supports $validate operation completely, including delete mode and profile validation using the RI InstanceValidator"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2015-09-18"
|
|
@ -0,0 +1,165 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Bump the version of a few dependencies to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Commons-lang3 (Core): 3.3.2 -> 3.4</li> <li>Logback (Core): 1.1.2 -> 1.1.3</li> <li>SLF4j (Core): 1.7.102 -> 1.7.12</li> <li>Springframework (JPA, Web Tester): 4.1.5 -> 4.2.2</li> <li>Hibernate (JPA, Web Tester): 4.2.17 -> 5.\"</li> <li>Hibernate Validator (JPA, Web Tester): 5.2.1 -> 5.2.2</li> <li>Derby (JPA, CLI, Public Server): 10.11.1.1 -> 10.12.1.1 </li> <li>Jetty (JPA, CLI, Public Server): 9.2.6.v20141205 -> 9.3.4.v20151007 </li> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA and Tester Overlay now use Spring Java config files instead of the older XML config files. All example projects have been updated."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server removes duplicate resource index entries before storing them (e.g. if a patient has the same name twice, only one index entry is created for that name)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server did not correctly index search parameters of type \"reference\" where the path had multiple entries (i.e. \"Resource.path1 | Resource.path2\")"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server _history operations (server, type, instance) not correctly set the Bundle.entry.request.method to POST or PUT for create and updates of the resource."
|
||||
- item:
|
||||
issue: "225"
|
||||
type: "add"
|
||||
title: "Support AND/OR on _id search parameter in JPA"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Constructor for DateRanfeParam which dates in two DateParam instances was ignoring comparators on the DateParam."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In JSON parsing, finding an object where an array was expected led to an unhelpful error message. Thanks to Avinash Shanbhag for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server gave an unhelpful error message if $meta-add or $meta-delete were called with no meta elements in the input Parameters"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Narrative generator did not include OperationOutcome.issue.diagnostics in the generated narrative."
|
||||
- item:
|
||||
issue: "250"
|
||||
type: "add"
|
||||
title: "Clients (generic and annotation) did not populate the Accept header on outgoing requests. This is now populated to indicate that the client supports both XML and JSON unless the user has explicitly requested one or the other (in which case the appropriate type only will be send in the accept header). Thanks to Avinash Shanbhag for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "QuestionnaireResponse validator now allows responses to questions of type OPENCHOICE to be of type 'string'"
|
||||
- item:
|
||||
issue: "227"
|
||||
type: "fix"
|
||||
title: "JPA server should reject resources with a reference that points to an incorrectly typed resource (e.g. points to Patient/123 but resource 123 is actually an Observation) or points to a resource that is not valid in the location it is found in (e.g. points to Patient/123 but the field supposed to reference an Organization). Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In server, if a client request is received and it has an Accept header indicating that it supports both XML and JSON with equal weight, the server's default is used instead of the first entry in the list."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server now supports searching with sort by token, quantity, number, Uri, and _lastUpdated (previously only string, date, and _id were supported)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix issue in JPA where a search with a _lastUpdated filter which matches no results would crash if the search also had a _sort"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix several cases where invalid requests would cause an HTTP 500 instead of a more appropriate 400/404 in the JPA server (vread on invalid version, delete with no ID, etc.)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix narrative generation for DSTU2 Medication resource"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Profile validator now works for valuesets which use v2 tables"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server Patient/[id]/$everything operation now supports _lastUpdated filtering and _sort'ing of results."
|
||||
- item:
|
||||
issue: "233"
|
||||
type: "fix"
|
||||
title: "Fix parser issue where profiled choice element datatypes (e.g. value[x] where one allowable type is Duration, which is a profile of Quantity) get incorrectly encoded using the profiled datatype name instead of the base datatype name as required by the FHIR spec. Thanks to Nehashri Puttu Lokesh for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Some generated Enum types in DSTU2 HAPI structures did not have latest valueset definitions applied. Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server can now successfully search for tokens pointing at code values (values with no explicit system but an implied one, such as Patient.gender) even if the system is supplied in the query."
|
||||
- item:
|
||||
issue: "235"
|
||||
type: "fix"
|
||||
title: "Correct issues with Android library. Thanks to Thomas Andersen for the submission!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server incorrectly rejected match URLs if they did not contain a question mark. Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
issue: "234"
|
||||
type: "fix"
|
||||
title: "Remove invalid entries in OSGi Manifest. Thanks to Alexander Kley for the fix!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server now supports $everything on Patient and Encounter types (patient and encounter instance was already supported)"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Generic client operation invocations now have an additional inline method for generating the input Parameters using chained method calls instead of by passing a Parameters resource in"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Parsing an XML resource where the XHTML namespace was declared before the beginning of the narrative section caused an invalid re-encoding when encoding to JSON."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Conditional deletes in JPA did not correctly process if the condition had a chain or a qualifier, e.g. \"Patient?organization.name\" or \"Patient.identifier:missing\""
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Generic/fluent client search can now be performed using a complete URL supplied by user code. Thanks to Simone Heckmann pointing out that this was needed!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Refactor JPA $everything operations so that they perform better"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Server operation methods can now declare the ID optional, via @IdParam(optional=true) meaning that the same operation can also be invoked at the type level."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Make JPA search queries with _lastUpdated parameter a bit more efficient"
|
||||
- item:
|
||||
issue: "239"
|
||||
type: "add"
|
||||
title: "Clean up Android project to make it more lightweight and remove a number of unneeded dependencies. Thanks to Thomas Andersen for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix a crash when encoding a Binary resource in JSON encoding if the resource has no content-type"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server now supports read/history/search in transaction entries by calling the actual implementing method in the server (previously the call was simulated, which meant that many features did not work)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "ResourceReferenceDt#loadResource(IRestfulClient) did not use the client's read functionality, so it did not handle JSON responses or use interceptors. Thanks to JT for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server maximumn length for a URI search parameter has been reduced from 256 to 255 in order to accomodate MySQL's indexing requirements"
|
||||
- item:
|
||||
issue: "242"
|
||||
type: "fix"
|
||||
title: "Server failed to respond correctly to compartment search operations if the same provider also contained a read operation. Thanks to GitHub user @am202 for reporting!"
|
||||
- item:
|
||||
issue: "245"
|
||||
type: "fix"
|
||||
title: "Fix issue in testpage-overlay's new Java configuration where only the first configured server actually gets used."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Introduce <a href=\"./apidocs-jpaserver/ca/uhn/fhir/jpa/dao/IJpaServerInterceptor.html\">IJpaServerInterceptor</a> interceptors for JPA server which can be used for more fine grained operations."
|
||||
- item:
|
||||
issue: "241"
|
||||
type: "fix"
|
||||
title: "Parser (XML and JSON) shouldn't encode an ID tag in resources which are part of a bundle when the resource has a UUID/OID ID."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add ability for a server REST resource provider @Search method to declare that it should allow even parameters it doesn't understand."
|
||||
- item:
|
||||
issue: "247"
|
||||
type: "fix"
|
||||
title: "Correctly set the Bundle.type value on all pages of a search result in the server, and correcltly set the same value in JPA server $everything results."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA $everything operations now support new parameters _content and _text, which work the same way as the same parameters on a search. This is experimental, since it is not a part of the core FHIR specification."
|
||||
- item:
|
||||
issue: "250"
|
||||
type: "add"
|
||||
title: "Process \"Accept: text/xml\" and \"Accept: text/json\" headers was wanting the equivalent FHIR encoding styles. These are not correct, but the intention is clear so we will honour them just to be helpful."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Generated Enum types for some ValueSets did not include all codes (specifically, ValueSets which defined concepts containing child concepts did not result in Enum values for the child concepts)"
|
||||
- item:
|
||||
issue: "253"
|
||||
type: "fix"
|
||||
title: "In the JPA server, order of transaction processing should be DELETE, POST, PUT, GET, and the order should not matter within entries with the same verb. Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
issue: "254"
|
||||
type: "add"
|
||||
title: "Add the ability to wire JPA conformance providers using Spring (basically, add default constructors and setters to the conformance providers). Thanks to C. Mike Bylund for the pull request!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2015-11-14"
|
|
@ -0,0 +1,88 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Bump the version of a few dependencies to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Hibernate (JPA, Web Tester): 5.0.3 -> 5.0.7</li> <li>Springframework (JPA, Web Tester): 4.2.2 -> 4.2.4</li> <li>Phloc-Commons (Schematron Validator): 4.3.6 -> 4.4.4</li> <li>Apache httpclient (Client): 4.4 -> 4.5.1</li> <li>Apache httpcore (Client): 4.4 -> 4.4.4</li> <li>SLF4j (All): 1.7.13 -> 1.7.14</li> </ul>"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Remove a dependency on a Java 1.7 class (ReflectiveOperationException) in several spots in the codebase. This dependency was accidentally introduced in 1.3, and animal-sniffer-plugin failed to detect it (sigh)."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add two new server interceptors: <a href=\"./apidocs/ca/uhn/fhir/rest/server/interceptor/RequestValidatingInterceptor.html\">RequestValidatingInterceptor</a> and <a href=\"./apidocs/ca/uhn/fhir/rest/server/interceptor/ResponseValidatingInterceptor.html\">ResponseValidatingInterceptor</a> which can be used to validate incoming requests or outgoing responses using the standard FHIR validation tools. See the <a href=\"./doc_rest_server_interceptor.html#RequestResponse_Validation\">Server Validation Page</a> for examples of how to use these interceptors. These intereptors have both been enabled on the <a href=\"http://fhirtest.uhn.ca\">public test page</a>."
|
||||
- item:
|
||||
issue: "259"
|
||||
type: "fix"
|
||||
title: "Make IBoundCodeableConcept and IValueSetEnumBinder serializable, fixing an issue when trying to serialize model classes containing bound codes. Thanks to Nick Peterson for the Pull Request!"
|
||||
- item:
|
||||
issue: "251"
|
||||
type: "add"
|
||||
title: "Introduce a JAX-RS version of the REST server, which can be used to deploy the same resource provider implementations which work on the existing REST server into a JAX-RS (e.g. Jersey) environment. Thanks to Peter Van Houte from Agfa for the amazing work!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "CLI now supports writing to file:// URL for 'upload-examples' command"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "GZipped content is now supported for client-to-server uploads (create, update, transaction, etc.). The server will not automatically detect compressed incoming content and decompress it (this can be disabled using a RestfulServer configuration setting). A new client interceptor has been added which compresses outgoing content from the client."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server transaction attempted to validate resources twice each, with one of these times being before anything had been committed to the database. This meant that if a transaction contained both a Questionnaire and a QuestionnaireResponse, it would fail because the QuestionnaireResponse validator wouldn't be able to find the questionnaire. This is now corrected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add a new method to the generic/fluent client for searching: <code>.count(int)</code><br/> This replaces the existing \".limitTo(int)\" method which has now been deprocated because it was badly named and undocumented."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Profile validator has been configured to allow extensions even if they aren't explicitly declared in the profile."
|
||||
- item:
|
||||
issue: "265"
|
||||
type: "add"
|
||||
title: "Add a constraint that the Maven build will only run in JDK 8+. HAPI remains committed to supporting JDK 6+ in the compiled library, but these days it can only be built using JDK 8. Thanks to joelsch for the PR!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When serializing a value[x] field, if the value type was a profiled type (e.g. markdown is a profile of string) HAPI 1.3 would use the base type in the element name, e.g. valueString instead of valueMarkdown. After discussion with Grahame, this appears to be incorrect behaviour so it has been fixed."
|
||||
- item:
|
||||
issue: "240"
|
||||
type: "add"
|
||||
title: "Support target parameter type in _include / _revinclude values, e.g. _include=Patient:careProvider:Organization. Thanks to Joe Portner for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Use ResponseHighlighterInterceptor in the hapi-fhir-jpaserver-example project to provide nice syntax highlighting. Thanks to Rob Hausam for noting that this wasn't there."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Introduce custom @CoverageIgnore annotation to hapi-fhir-base in order to remove dependency on cobertura during build and in runtime."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server-generated conformance statements incorrectly used /Profile/ instead of /StructureDefinition/ in URL links to structures."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JsonParser has been changed so that when serializing numbers it will use plain format (0.001) instead of scientific format (1e-3). The latter is valid JSON, and the parser will still correctly parse either format (all clients should be prepared to) but this change makes serialized resources appear more consistent between XML and JSON. As a result of this change, trailing zeros will now be preserved when serializing as well."
|
||||
- item:
|
||||
issue: "278"
|
||||
type: "add"
|
||||
title: "Add DSTU3 example to hapi-fhir-jpaserver-example. Thanks to Karl Davis for the Pull Request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "RestfulServer#setUseBrowserFriendlyContentTypes has been deprecated and its functionality removed. The intention of this feature was that if it detected a request coming in from a browser, it would serve up JSON/XML using content types that caused the browsers to pretty print. But each browser has different rules for when to pretty print, and after we wrote that feature both Chrome and FF changed their rules to break it anyhow. ResponseHighlightingInterceptor provides a better implementation of this functionality and should be used instead."
|
||||
- item:
|
||||
type: "remove"
|
||||
title: "Narrative generator framework has removed the ability to generate resource titles. This functionality was only useful for DSTU1 implementations and wasn't compatible with coming changes to that API."
|
||||
- item:
|
||||
issue: "283"
|
||||
type: "fix"
|
||||
title: "Remove dependency on Servlet-API 3.0+ by using methods available in 2.5 where possible. Note that we continue to use Servlet-API 3.0+ features in some parts of the JPA API, so running in an old serlvet container should be tested well before use. Thanks to Bill Denton for reporting!"
|
||||
- item:
|
||||
issue: "288"
|
||||
type: "add"
|
||||
title: "Add new methods to RestfulClientFactory allowing you to configure the size of the client pool used by Apache HttpClient. Thanks to Matt Blanchette for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add support for new modifier types on Token search params in Server and annotation client."
|
||||
- item:
|
||||
issue: "286"
|
||||
type: "fix"
|
||||
title: "Server conformance statement should include search parameter chains if the chains are explicitly defined via @Search(whitelist={....}). Thanks to lcamilo15 for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Remove afterPropertiesSet() call in Java config for JPA server's EntityManagerFactory. This doesn't need to be called manually, the the manual call led to a warning about the EntityManager being created twice."
|
||||
- item:
|
||||
issue: "289"
|
||||
type: "add"
|
||||
title: "Allow server to correctly figure out it's own address even if the container provides a Servlet Context Path which does not include the root. Thanks to Petro Mykhaylyshyn for the pull request!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2016-02-04"
|
|
@ -0,0 +1,213 @@
|
|||
---
|
||||
- item:
|
||||
issue: "339"
|
||||
type: "fix"
|
||||
title: "Security Fix: XML parser was vulnerable to XXE (XML External Entity) processing, which could result in local files on disk being disclosed. See <a href=\"https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing\">this page</a> for more information. Thanks to Jim Steel for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Bump the version of a few dependencies to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Hibernate (JPA, Web Tester): 5.0.7 -> 5.1.0</li> <li>Spring (JPA, Web Tester): 4.2.4 -> 4.2.5</li> <li>SLF4j (All): 1.7.14 -> 1.7.21</li> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Support comments when parsing and encoding both JSON and XML. Comments are retrieved and added to the newly created methods IBase#getFormatCommentsPre() and IBase#getFormatCommentsPost()"
|
||||
- item:
|
||||
issue: "293"
|
||||
type: "add"
|
||||
title: "Added options to the CLI upload-examples command which allow it to cache the downloaded content file, or use an arbitrary one. Thanks to Adam Carbone for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "REST search parameters with a prefix/comparator had not been updated to use the DSTU2 style prefixes (gt2011-01-10) instead of the DSTU1 style prefixes (>2011-01-01). The client has been updated so that it uses the new prefixes if the client has a DSTU2+ context. The server has been updated so that it now supports both styles. <br/><br/> As a part of this change, a new enum called <a href=\"./apidocs/ca/uhn/fhir/rest/param/ParamPrefixEnum.html\">ParamPrefixEnum</a> has been introduced. This enum replaces the old <a href=\"./apidocs/ca/uhn/fhir/model/dstu/valueset/QuantityCompararatorEnum.html\">QuantityCompararatorEnum</a> which has a typo in its name and can not represent several new prefixes added since DSTU1."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server number and quantity search params now follow the rules for the use of precision in search terms outlined in the <a href=\"https://www.hl7.org/fhir/search.html\">search page</a> of the FHIR specification. For example, previously a 1% tolerance was applied for all searches (10% for approximate search). Now, a tolerance which respects the precision of the search term is used (but still 10% for approximate search)."
|
||||
- item:
|
||||
issue: "291"
|
||||
type: "fix"
|
||||
title: "Fix a failure starting the REST server if a method returns an untyped List, which among other things prevented resource provider added to the server as CDI beans in a JBoss enviroment. Thanks to GitHub user fw060 (Fei) for reporting and figuring out exactly why this wasn't working!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server now supports :above and :below qualifiers on URI search params"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add optional support (disabled by default for now) to JPA server to support inline references containing search URLs. These URLs will be resolved when a resource is being created/updated and replaced with the single matching resource. This is being used as a part of the May 2016 Connectathon for a testing scenario."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The server no longer adds a <code>WWW-Authenticate</code> header to the response if any resource provider code throws an <code>AuthenticationException</code> . This header is used for interactive authentication, which isn't generally appropriate for FHIR. We added code to add this header a long time ago for testing purposes and it never got removed. Please let us know if you need the ability to add this header automatically. Thanks to Lars Kristian Roland for pointing this out."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In the client, the create/update operations on a Binary resource (which use the raw binary's content type as opposed to the FHIR content type) were not including any request headers (Content-Type, User-Agent, etc.) Thanks to Peter Van Houte of Agfa Healthcare for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Handling of Binary resources containing embedded FHIR resources for create/update/etc operations has been corrected per the FHIR rules outlined at <a href=\"http://hl7.org/fhir/binary.html\">Binary Resource</a> in both the client and server. <br/><br/> Essentially, if the Binary contains something that isn't FHIR (e.g. an image with an image content-type) the client will send the raw data with the image content type to the server. The server will place the content type and raw data into a Binary resource instance and pass those to the resource provider. This part was already correct previous to 1.5. <br/><br/> On the other hand, if the Binary contains a FHIR content type, the Binary is now sent by the client to the server as a Binary resource with a FHIR content-type, and the embedded FHIR content is contained in the appropriate fields. The server will pass this \"outer\" Binary resource to the resource provider code."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The RequestDetails and ActionRequestDetails objects which are passed to server interceptor methods and may also be used as server provider method arguments now has a new method <code>Map<String, String> getUserData()</code> which can be used to pass data and objects between interceptor methods to to providers. This can be useful, for instance, if an authorization interceptor wants to pass the logged in user's details to other parts of the server."
|
||||
- item:
|
||||
issue: "297"
|
||||
type: "fix"
|
||||
title: "When <code>IServerInterceptor#incomingRequestPreHandled()</code> is called for a <code>@Validate</code> method, the resource was not populated in the <code>ActionRequestDetails</code> argument. Thanks to Ravi Kuchi for reporting!"
|
||||
- item:
|
||||
issue: "298"
|
||||
type: "fix"
|
||||
title: "Request to server at <code>[baseUrl]/metadata</code> with an HTTP method other than GET (e.g. POST, PUT) should result in an HTTP 405. Thanks to Michael Lawley for reporting!"
|
||||
- item:
|
||||
issue: "302"
|
||||
type: "fix"
|
||||
title: "Fix a server exception when trying to automatically add the profile tag to a resource which already has one or more profiles set. Thanks to Magnus Vinther for reporting!"
|
||||
- item:
|
||||
issue: "296"
|
||||
type: "fix"
|
||||
title: "QuantityParam parameters being used in the RESTful server were ignoring the <code>:missing</code> qualifier. Thanks to Alexander Takacs for reporting!"
|
||||
- item:
|
||||
issue: "299"
|
||||
type: "fix"
|
||||
title: "Annotation client failed with an exception if the response contained extensions on fields in the resonse Bundle (e.g. Bundle.entry.search). Thanks to GitHub user am202 for reporting!"
|
||||
- item:
|
||||
issue: "274"
|
||||
type: "fix"
|
||||
title: "Primitive elements with no value but an extension were sometimes not encoded correctly in XML, and sometimes not parsed correctly in JSON. Thanks to Bill de Beaubien for reporting!"
|
||||
- item:
|
||||
issue: "280"
|
||||
type: "fix"
|
||||
title: "The Web Testing UI has long had an issue where if you click on a button which navigates to a new page (e.g. search, read, etc) and then click the back button to return to the original page, the button you clicked remains disabled and can't be clicked again (on Firefox and Safari). This is now fixed. Unfortunately the fix means that the buttom will no longer show a \"loading\" spinner, but there doesn't seem to be another way of fixing this. Thanks to Mark Scrimshire for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Extensions found while parsing an object that doesn't support extensions are now reported using the IParserErrorHandler framework in the same way that other similar errors are handled. This allows the parser to be more lenient when needed."
|
||||
- item:
|
||||
issue: "304"
|
||||
type: "add"
|
||||
title: "Improve error message if incorrect type is placed in a list field in the data model. Java uses generics to prevent this at compile time, but if someone is in an environment without generics this helps improve the error message at runtime. Thanks to Hugo Soares for suggesting."
|
||||
- item:
|
||||
issue: "308"
|
||||
type: "fix"
|
||||
title: "Prevent an unneeded warning when parsing a resource containing a declared extension. Thanks to Matt Blanchette for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Web Tester UI did not invoke VRead even if a version ID was specified. Thanks to Poseidon for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Per discussion on the FHIR implementer chat, the JPA server no longer includes _revinclude matches in the Bundle.total count, or the page size limit."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server now persists search results to the database in a new table where they can be temporaily preserved. This makes the JPA server much more scalable, since it no longer needs to store large lists of pages in memory between search invocations. <br/><br/> Old searches are deleted after an hour by default, but this can be changed via a setting in the DaoConfig."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA servers' resource version history mechanism has been adjusted so that the history table keeps a record of all versions including the current version. This has the very helpful side effect that history no longer needs to be paged into memory as a complete set. Previously history had a hard limit of only being able to page the most recent 20000 entries. Now it has no limit."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server returned the wrong Bundle.type value (COLLECTION, should be SEARCHSET) for $everything operation responses. Thanks to Sonali Somase for reporting!"
|
||||
- item:
|
||||
issue: "305"
|
||||
type: "fix"
|
||||
title: "REST and JPA server should reject update requests where the resource body does not contain an ID, or contains an ID which does not match the URL. Previously these were accepted (the URL ID was trusted) which is incorrect according to the FHIR specification. Thanks to GitHub user ametke for reporting! <br/><br/> As a part of this change, server error messages were also improved for requests where the URL does not contain an ID but needs to (e.g. for an update) or contains an ID but shouldn't (e.g. for a create)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When fields of type BoundCodeDt (e.g. Patient.gender) are serialized and deserialized using Java's native object serialization, the enum binder was not serialized too. This meant that values for the field in the deserialized object could not be modified. Thanks to Thomas Andersen for reporting!"
|
||||
- item:
|
||||
issue: "313"
|
||||
type: "fix"
|
||||
title: "REST Server responded to HTTP OPTIONS requests with any URI as being a request for the server's Conformance statement. This is incorrect, as only a request for <code>OPTIONS [base url]</code> should be treated as such. Thanks to Michael Lawley for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "REST annotation style client was not able to handle extended operations ($foo) where the response from the server was a raw resource instead of a Parameters resource. Thanks to Andrew Michael Martin for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server applies _lastUpdated filter inline with other searches wherever possible instead of applying this filter as a second query against the results of the first query. This should improve performance when searching against large datasets."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Parsers have new method <code>setDontEncodeElements</code> which can be used to force the parser to not encode certain elements in a resource when serializing. For example this can be used to omit sensitive data or skip the resource metadata."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server database design has been adjusted so that different tables use different sequences to generate their indexes, resulting in more sequential resource IDs being assigned by the server"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server now correctly serves up Binary resources using their native content type (instead of as a FHIR resource) if the request contains an accept header containing \"application/xml\" as some browsers do."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "DSTU2 resources now have a <code>getMeta()</code> method which returns a modifiable view of the resource metadata for convenience. This matches the equivalent method in the DSTU3 structures."
|
||||
- item:
|
||||
issue: "315"
|
||||
type: "add"
|
||||
title: "Add a new method to FhirContext called <code><a href=\"./apidocs/ca/uhn/fhir/context/FhirContext.html#setDefaultTypeForProfile-java.lang.String-java.lang.Class-\">setDefaultTypeForProfile</a></code> which can be used to specify that when recources are received which declare support for specific profiles, a specific custom structures should be used instead of the default. For example, if you have created a custom Observation class for a specific profile, you could use this method to cause your custom type to be used by the parser for resources in a search bundle you receive. <br/><br/> See the documentation page on <a href=\"./doc_extensions.html\">Profiles and Extensions</a> for more information."
|
||||
- item:
|
||||
issue: "315"
|
||||
type: "fix"
|
||||
title: "Parsing/Encoding a custom resource type which extends a base type sometimes caused the FhirContext to treat all future parses of the same resource as using the custom type even when this was not wanted. <br/><br/> Custom structures may now be explicitly declared by profile using the <code><a href=\"./apidocs/ca/uhn/fhir/context/FhirContext.html#setDefaultTypeForProfile-java.lang.String-java.lang.Class-\">setDefaultTypeForProfile</a></code> method. <br/><br/> This issue was discovered and fixed as a part of the implementation of issue #315."
|
||||
- item:
|
||||
issue: "321"
|
||||
type: "add"
|
||||
title: "Set up the tinder plugin to work as an ant task as well as a Maven plugin, and to use external sources. Thanks to Bill Denton for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server now allows searching by token parameter using a system only and no code, giving a search for any tokens which match the given token with any code. Previously the expected behaviour for this search was not clear in the spec and HAPI had different behaviour from the other reference servers."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Introduce a JAX-RS client provider which can be used instead of the default Apache HTTP Client provider to provide low level HTTP services to HAPI's REST client. See <a href=\"./doc_rest_client_alternate_provider.html\">JAX-RS & Alternate HTTP Client Providers</a> for more information. <br/><br/> This is useful in cases where you have other non-FHIR REST clients using a JAX-RS provider and want to take advantage of the rest of the framework. <br/><br/> Thanks to Peter Van Houte from Agfa for the amazing work!"
|
||||
- item:
|
||||
issue: "312"
|
||||
type: "fix"
|
||||
title: "Parser failed with a NPE while encoding resources if the resource contained a null extension. Thanks to steve1medix for reporting!"
|
||||
- item:
|
||||
issue: "320"
|
||||
type: "fix"
|
||||
title: "In generated model classes (DSTU1/2) don't use BoundCodeDt and BoundCodeableConceptDt for coded fields which use example bindings. Thanks to GitHub user Ricq for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Operations methods defined using <code>@Operation</code> will now infer the maximum number of repetitions of their parameters by the type of the parameter. Previously if a default <code>max()</code> value was not specified in the <code>@OperationParam</code> annotation on a parameter, the maximum was assumed to be 1. Now, if a max value is not explicitly specified and the type of the parameter is a basic type (e.g. <code>StringDt</code>) the max will be 1. If the parameter is a collection type (e.g. <code>List<StringDt></code>) the max will be *"
|
||||
- item:
|
||||
issue: "317"
|
||||
type: "add"
|
||||
title: "Operation methods defined using <code>@Operation</code> may now use search parameter types, such as <code>TokenParam</code> and <code>TokenAndListParam</code> as values. Thanks to Christian Ohr for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add databases indexes to JPA module search index tables for the RES_ID column on each. This should help performance when searching over large datasets. Thanks to Emmanuel Duviviers for the suggestion!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "DateTimeType should fail to parse 1974-12-25+10:00 as this is not a valid time in FHIR. Thanks to Grahame Grieve for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When parsing a Bundle resource, if the Bundle.entry.request.url contains a UUID but the resource body has no ID, the Resource.id will be populated with the ID from the Bundle.entry.request.url. This is helpful when round tripping Bundles containing UUIDs."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When parsing a DSTU3 bundle, references between resources did not have the actual resource instance populated into the reference if the IDs matched as they did in DSTU1/2."
|
||||
- item:
|
||||
issue: "326"
|
||||
type: "fix"
|
||||
title: "Contained resource references on DSTU3 resources were not serialized correctly when using the Json Parser. Thanks to GitHub user @fw060 for reporting and supplying a patch which corrects the issue!"
|
||||
- item:
|
||||
issue: "325"
|
||||
type: "fix"
|
||||
title: "DSTU3 model classes equalsShallow and equalsDeep both did not work correctly if a field was null in one object, but contained an empty object in the other (e.g. a StringType with no actual value in it). These two should be considered equal, since they would produce the exact same wire format. <br/><br/> Thanks to GitHub user @ipropper for reporting and providing a test case!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server now supports searching for <code>_tag:not=[tag]</code> which enables finding resources that to not have a given tag/profile/security tag. Thanks to Lars Kristian Roland for the suggestion!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Extensions containing resource references did not get encoded correctly some of the time. Thanks to Poseidon for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Parsers (both XML and JSON) encoded the first few elements of DSTU3 structures in the wrong order: Extensions were placed before any other content, which is incorrect (several elements come first: meta, text, etc.)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In server implementations, the Bundle.entry.fullUrl was not getting correctly populated on Hl7OrgDstu2 servers. Thanks to Christian Ohr for reporting!"
|
||||
- item:
|
||||
issue: "335"
|
||||
type: "fix"
|
||||
title: "Ensure that element IDs within resources (i.e. IDs on elements other than the resource itself) get serialized and parsed correctly. Previously, these didn't get serialized in a bunch of circumstances. Thanks to Vadim Peretokin for reporting and providing test cases!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Improve CLI error message if the tool can't bind to the requested port. Thanks to Claude Nanjo for the suggestion!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server param of <code>_summary=text</code> did not include mandatory elements in return as well as the text element, even though the FHIR specification required it."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Remove invalid resource type \"Documentation\" from DSTU2 structures."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server did not respect target types for search parameters. E.g. Appointment:patient has a path of \"Appointment.participant.actor\" and a target type of \"Patient\". The search path was being correctly handled, but the target type was being ignored."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "RestfulServer now manually parses URL parameters instead of relying on the container's parsed parameters. This is useful because many Java servlet containers (e.g. Tomcat, Glassfish) default to ISO-8859-1 encoding for URLs insetad of the UTF-8 encoding specified by FHIR."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "ResponseHighlightingInterceptor now doesn't highlight if the request has an Origin header, since this probably denotes an AJAX request."
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2016-04-20"
|
|
@ -0,0 +1,220 @@
|
|||
---
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Performance has been improved for the initial FhirContext object creation by avoiding a lot of unnecessary reflection. HAPI FHIR 1.5 had a regression compared to previous releases and this has been corrected, but other improvements have been made so that this release is faster than previous releases too. <br/><br/> In addition, a new \"deferred scan\" mode has been implemented for even faster initialization on slower environments (e.g. Android). See the <a href=\"./doc_rest_client_http_config.html#performance\">performance documentation</a> for more information. <br/><br/> The following shows our benchmarks for context initialization across several versions of HAPI: <ul> <li>Version 1.4: <b>560ms</b></li> <li>Version 1.5: <b>800ms</b></li> <li>Version 1.6: <b>340ms</b></li> <li>Version 1.6 (deferred mode): <b>240ms</b></li> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Bump the version of a few dependencies to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Spring (JPA, Web Tester): 4.2.5 -> 4.3.0</li> <li>Spring-Data (JPA): 1.9.2 -> 1.10.1</li> <!--<li>Hibernate ORM (JPA): 5.1.0 -> 5.2.0</li>--> <li>Hibernate Search (JPA): 5.5.2 -> 5.5.3</li> <li>Jetty (CLI): 9.3.9 -> 9.3.10</li> </ul>"
|
||||
- item:
|
||||
type: "remove"
|
||||
title: "Remove some clases that were deprecated over a year ago and have suitable replacements: <ul> <li>QualifiedDateParam has been removed, but DateParam may be used instead</li> <li>PathSpecification has been removedm but Include may be used instead</li> </ul>"
|
||||
- item:
|
||||
issue: "345"
|
||||
type: "fix"
|
||||
title: "ResponseValidatingInterceptor threw an InternalErrorException (HTTP 500) for operations that do not return any content (e.g. delete). Thanks to Mohammad Jafari for reporting!"
|
||||
- item:
|
||||
issue: "342"
|
||||
type: "fix"
|
||||
title: "REST server now throws an HTTP 400 instead of an HTTP 500 if an operation which takes a FHIR resource in the request body (e.g. create, update) contains invalid content that the parser is unable to parse. Thanks to Jim Steel for the suggestion!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Deprecate fluent client search operations without an explicit declaration of the bundle type being used. This also means that in a client <code>.search()</code> operation, the <code>.returnBundle(Bundle.class)</code> needs to be the last statement before <code>.execute()</code>"
|
||||
- item:
|
||||
issue: "346"
|
||||
type: "add"
|
||||
title: "Server now respects the parameter <code>_format=application/xml+fhir\"</code> which is technically invalid since the + should be escaped, but is likely to be used. Also, a parameter of <code>_format=html</code> can now be used, which forces SyntaxHighlightingInterceptor to use HTML even if the headers wouldn't otherwise trigger it. Thanks to Jim Steel for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Improve performance when parsing large bundles by fixing a loop over all of the entries inthe bundle to stitch together cross-references, which was happening once per entry instead of once overall. Thanks to Erick on the HAPI FHIR Google Group for noticing that this was an issue!"
|
||||
- item:
|
||||
type: "remove"
|
||||
title: "JSON parser no longer allows the resource ID to be specified in an element called \"_id\" (the correct one is \"id\"). Previously _id was allowed because some early FHIR examples used that form, but this was never actually valid so it is now being removed."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server now allows \"forced IDs\" (ids containing non-numeric, client assigned IDs) to use the same logical ID part on different resource types. E.g. A server may now have both Patient/foo and Obervation/foo on the same server. <br/><br/> Note that existing databases will need to modify index \"IDX_FORCEDID\" as it is no longer unique, and perform a reindexing pass."
|
||||
- item:
|
||||
issue: "350"
|
||||
type: "fix"
|
||||
title: "When serializing/encoding custom types which replace exsting choice fields by fixing the choice to a single type, the parser would forget that the field was a choice and would use the wrong name (e.g. \"abatement\" instead of \"abatementDateType\"). Thanks to Yaroslav Kovbas for reporting and providing a unit test!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server transactions sometimes created an incorrect resource reference if a resource being saved contained references that had a display value but not an actual reference. Thanks to David Hay for reporting!"
|
||||
- item:
|
||||
issue: "352"
|
||||
type: "add"
|
||||
title: "When performing a REST Client create or update with <code>Prefer: return=representation</code> set, if the server does not honour the Prefer header, the client will automatically fetch the resource before returning. Thanks to Ewout Kramer for the idea!"
|
||||
- item:
|
||||
issue: "354"
|
||||
type: "add"
|
||||
title: "DSTU3 structures now have <code>setFoo(List)</code> and <code>setGetFooFirstRep()</code> methods, bringing them back to parity with the HAPI DSTU2 structures. Thanks to Rahul Somasunderam and Claude Nanjo for the suggestions!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server has now been refactored to use the new FluentPath search parameter definitions for DSTU3 resources."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "RequestValidatingInterceptor and ResponseValidatingInterceptor both have new method <code>setIgnoreValidatorExceptions</code> which causes validator exceptions to be ignored, rather than causing processing to be aborted."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "LoggingInterceptor on server has a new parameter <code>${requestBodyFhir}</code> which logs the entire request body."
|
||||
- item:
|
||||
issue: "355"
|
||||
type: "add"
|
||||
title: "JAX-RS server module now supports DSTU3 resources (previously it only supported DSTU2). Thanks to Phillip Warner for implementing this, and providing a pull request!"
|
||||
- item:
|
||||
issue: "356"
|
||||
type: "fix"
|
||||
title: "Generated conformance statements for DSTU3 servers did not properly reference their OperationDefinitions. Thanks to Phillip Warner for implementing this, and providing a pull request!"
|
||||
- item:
|
||||
issue: "359"
|
||||
type: "fix"
|
||||
title: "Properly handle null arrays when parsing JSON resources. Thanks to Subhro for fixing this and providing a pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "STU3 validator failed to validate codes where the code was a child code within the code system that contained it (i.e. not a top level code). Thanks to Jon Zammit for reporting!"
|
||||
- item:
|
||||
issue: "361"
|
||||
type: "fix"
|
||||
title: "Restore the setType method in the DSTU1 Bundle class, as it was accidentally commented out. Thanks to GitHub user @Virdulys for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server now supports composite search parameters where the type of the composite parameter is a quantity (e.g. Observation:component-code-component-value-quantity)"
|
||||
- item:
|
||||
type: "remove"
|
||||
title: "Remove the Remittance resource from DSTU2 structures, as it is not a real resource and was causing issues with interoperability with the .NET client."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "CLI tool cache feature (-c) for upload-example task sometimes failed to write cache file and exited with an exception."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix error message in web testing UI when loading pages in a search result for STU3 endpoints."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When encoding JSON resource, the parser will now always ensure that XHTML narrative content has an XHTML namespace declaration on the first DIV tag. This was preventing validation for some resources using the official validator rules."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server failed to invoke operations when the name was escaped (%24execute instead of $execute). Thanks to Michael Lawley for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server transactions containing a bundle that has multiple entries trying to delete the same resource caused a 500 internal error"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA module failed to index search parameters that mapped to a Timing datatype, e.g. CarePlan:activitydate"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add a new option to the CLI run-server command called <code>--lowmem</code> . This option disables some features (e.g. fulltext search) in order to allow the server to start in memory-constrained environments (e.g Raspberry Pi)"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When updating a resource via an update operation on the server, if the ID of the resource is not present in the resource body but is present on the URL, this will now be treated as a warning instead of as a failure in order to be a bit more tolerant of errors. If the ID is present in the body but does not agree with the ID in the URL this remains an error."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server / JPA server date range search params (e.g. Encounter:date) now treat a single date with no comparator (or the eq comparator) as requiring that the value be completely contained by the range specified. Thanks to Chris Moesel for the suggestion."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In server, if a parameter was annotated with the @Count annotation, the count would not appear in the self/prev/next links and would not actually be applied to the search results by the server. Thanks to Jim Steele for letting us know!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Conditional update on server failed to process if the conditional URL did not have any search parameters that did not start with an underscore. E.g. \"Patient?_id=1\" failed even though this is a valid conditional reference."
|
||||
- item:
|
||||
issue: "363"
|
||||
type: "add"
|
||||
title: "JPA server can now be configured to allow external references (i.e. references that point to resources on other servers). See <a href=\"./doc_jpa.html\">JPA Documentation</a> for information on how to use this. Thanks to Naminder Soorma for the suggestion!"
|
||||
- item:
|
||||
issue: "366"
|
||||
type: "fix"
|
||||
title: "When posting a resource to a server that contains an invalid value in a boolean field (e.g. Patient with an active value of \"1\") the server should return an HTTP 400, not an HTTP 500. Thanks to Jim Steel for reporting!"
|
||||
- item:
|
||||
issue: "364"
|
||||
type: "fix"
|
||||
title: "Enable parsers to parse and serialize custom resources that contain custom datatypes. An example has been added which shows how to do this <a href=\"./doc_custom_structures.html\">here</a>"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JSON parser was incorrectly encoding resource language attribute in JSON as an array instead of a string. Thanks to David Hay for reporting!"
|
||||
- item:
|
||||
issue: "367"
|
||||
type: "add"
|
||||
title: "Sébastien Rivière contributed an excellent pull request which adds a number of enhancements to JAX-RS module: <ul> <li>Enable the conditional update and delete</li> <li>Creation of a bundle provider, and support of the @Transaction</li> <li>Bug fix on the exceptions handling as some exceptions throw outside bean context were not intercept.</li> <li>Add the possibility to have the stacktrace in the jaxrsException</li> </ul>"
|
||||
- item:
|
||||
issue: "369"
|
||||
type: "fix"
|
||||
title: "FhirTerser.cloneInto method failed to clone correctly if the source had any extensions. Thanks to GitHub user @Virdulys for submitting and providing a test case!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Update DSTU2 InstanceValidator to latest version from upstream"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Web Testing UI was not able to correctly post an STU3 transaction"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "DateTime parser incorrectly parsed times where more than 3 digits of precision were provided on the seconds after the decimal point"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Improve error messages when the $validate operation is called but no resource is actually supplied to validate"
|
||||
- item:
|
||||
type: "remove"
|
||||
title: "DSTU2+ servers no longer return the Category header, as this has been removed from the FHIR specification (and tags are now available in the resource body so the header was duplication/wasted bandwidth)"
|
||||
- item:
|
||||
issue: "374"
|
||||
type: "fix"
|
||||
title: "Create and Update operations in server did not include ETag or Last-Modified headers even though the spec says they should. Thanks to Jim Steel for reporting!"
|
||||
- item:
|
||||
issue: "371"
|
||||
type: "fix"
|
||||
title: "Update STU3 client and server to use the new sort parameter style (param1,-param2,param). Thanks to GitHub user @euz1e4r for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "QuantityClientParam#withUnit(String) put the unit into the system part of the parameter value"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fluent client searches with date parameters were not correctly using new prefix style (e.g. gt) instead of old one (e.g. >)"
|
||||
- item:
|
||||
issue: "370"
|
||||
type: "fix"
|
||||
title: "Some built-in v3 code systems for STU3 resources were missing certain codes, which caused false failures when validating resources. Thanks to GitHub user @Xoude for reporting!"
|
||||
- item:
|
||||
issue: "365"
|
||||
type: "fix"
|
||||
title: "Some methods on DSTU2 model structures have JavaDocs that incorrectly claim that the method will not return null when in fact it can. Thanks to Rick Riemer for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "ResponseHighlightingInterceptor has been modified based on consensus on Zulip with Grahame that requests that have a parameter of <code>_format=json</code> or <code>_format=xml</code> will output raw FHIR content instead of HTML highlighting the content as they previously did. HTML content can now be forced via the (previously existing) <code>_format=html</code> or via the two newly added values <code>_format=html/json</code> and <code>_format=html/xml</code> . Because of this change, the custom <code>_raw=true</code> mode has been deprecated and will be removed at some point."
|
||||
- item:
|
||||
issue: "267"
|
||||
type: "fix"
|
||||
title: "Operation definitions (e.g. for $everything operation) in the generated server conformance statement should not include the $ prefix in the operation name or code. Thanks to Dion McMurtrie for reporting!"
|
||||
- item:
|
||||
issue: "378"
|
||||
type: "fix"
|
||||
title: "Server generated OperationDefinition resources did not validate due to some missing elements (kind, status, etc.). Thanks to Michael Lawley for reporting!"
|
||||
- item:
|
||||
issue: "379"
|
||||
type: "fix"
|
||||
title: "Operations that are defined on multiple resource provider types with the same name (e.g. \"$everything\") are now automatically exposed by the server as separate OperationDefinition resources per resource type. Thanks to Michael Lawley for reporting!"
|
||||
- item:
|
||||
issue: "380"
|
||||
type: "fix"
|
||||
title: "OperationDefinition resources generated automatically by the server for operations that are defined within resource/plain providers incorrectly stated that the maximum cardinality was \"*\" for non-collection types with no explicit maximum stated, which is not the behaviour that the JavaDoc on the @OperationParam annotation describes. Thanks to Michael Lawley for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server parameters annotated with <code>@Since</code> or <code>@Count</code> which are of a FHIR type such as IntegerDt or DateTimeType will now be set to null if the client's URL does not contain this parameter. Previously they would be populated with an empty instance of the FHIR type, which was inconsistent with the way other server parameters worked."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Server now supports the _at parameter (including multiple repetitions) for history operation"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "AuthorizationInterceptor can now allow or deny requests to extended operations (e.g. $everything)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "DecimalType used BigDecimal constructor instead of valueOf method to create a BigDecimal from a double, resulting in weird floating point conversions. Thanks to Craig McClendon for reporting!"
|
||||
- item:
|
||||
issue: "394"
|
||||
type: "fix"
|
||||
title: "Remove the depdendency on a method from commons-lang3 3.3 which was causing issues on some Android phones which come with an older version of this library bundled. Thanks to Paolo Perliti for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Parser is now better able to handle encoding fields which have been populated with a class that extends the expected class"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When declaring a child with <code>order=Child.REPLACE_PARENT</code> the serialized form still put the element at the end of the resource instead of in the correct order"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix STU3 JPA resource providers to allow validate operation at instance level"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2016-07-07"
|
|
@ -0,0 +1,110 @@
|
|||
---
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JSON parsing in HAPI FHIR has been switched from using JSR353 (javax.json) to using Google Gson. For this reason we are bumping the major release number to 2.0. Theoretically this should not affect projects in any major way, but Gson does have subtle differences. Two differences which popped up a fair bit in our own testing: <ul> <ul> A space is placed after the : in keys, e.g. what was previously encoded as <code>\"resourceType\":\"Patient\"</code> is now encoded as <code>\"resourceType\": \"Patient\"</code> (this broke a number of our unit tests with hardcoded resource definitions) </ul> <ul> Trailing content after a valid json resource is rejected by Gson (it was ignored by the Glassfish parser we were previously using even though it was invalid) </ul> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "STU3 structure definitions have been updated to the STU3 ballot candidate versions (1.6.0 - SVN 9663)"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Both client and server now support the new Content Types decided in <a href=\"http://gforge.hl7.org/gf/project/fhir/tracker/?action=TrackerItemEdit&tracker_id=677&tracker_item_id=10199\">FHIR #10199</a> . <br/><br/> This means that the server now supports <code>application/fhir+xml</code> and <code>application/fhir+json</code> in addition to the older style <code>application/xml+fhir</code> and <code>application/json+fhir</code> . In order to facilitate migration by implementors, the old style remains the default for now, but the server will respond using the new style if the request contains it. The client now uses an <code>Accept</code> header value which requests both styles with a preference given to the new style when running in DSTU3 mode. <br/><br/> As a part of this change, the server has also been enhanced so that if a request contains a Content-Type header but no Accept header, the response will prefer the encoding specified by the Content-Type header."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Bump the version of a few dependencies to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Logback (used in sample projects): 1.1.5 -> 1.1.7</li> <li>Phloc Commons (used by schematron validator): 4.4.4 -> 4.4.5</li> <li>Commons-IO: 2.4 -> 2.5</li> <li>Apache HTTPClient: 4.5.1 -> 4.5.2</li> <li>Apache HTTPCore: 4.4.4 -> 4.4.5</li> <li>Jersey (JAX-RS tests): 2.22.2 -> 2.23.1</li> <li>Spring (JPA, Web Tester): 4.3.0 -> 4.3.1</li> <!--<li>Hibernate ORM (JPA): 5.1.0 -> 5.2.1</li>--> <li>Hibernate Search (JPA): 5.5.2 -> 5.5.4</li> <li>Thymeleaf (Narrative Generator / Web Tester): 2.1.4 ->3.0.1</li> </ul>"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix issue in DSTU1 Bundle parsing where unexpected elements in the bundle resulted in a failure to parse."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "DSTU2 QuestionnaireResponse validator failed with an exception if the QuestionnaireResponse contained certain groups with no content"
|
||||
- item:
|
||||
issue: "150"
|
||||
type: "add"
|
||||
title: "Fluent client should ignore parameter values which are null instead of including them as <code>?foo=null</code>"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When using <code>_elements</code> parameter on server, the server was not automatically adding the <code>SUBSETTED</code> tag as it should"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server should now automatically detect if Hibernate Search (Lucene) is configured to be disabled and will not attempt to use it. This prevents a crash for some operations."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new server interceptor \"BanUnsupprtedHttpMethodsInterceptor\" has been added which causes the server to return an HTTP 405 if an unsupported HTTP verb is received from the client"
|
||||
- item:
|
||||
issue: "404"
|
||||
type: "fix"
|
||||
title: "Fix an issue where resource IDs were not correctly set when using DSTU2 HL7org structures with the JAX-RS module. Thanks to Carlo Mion for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "hapi-fhir-testpage-overlay project contained an unneccesary dependency on hapi-fhir-jpaserver-base module, which resulted in projects using the overlay having a large number of unnneded JARs included"
|
||||
- item:
|
||||
issue: "403"
|
||||
type: "add"
|
||||
title: "It is not possible to configure both the parser and the context to preserve versions in resource references (default behaviour is to strip versions from references). Thanks to GitHub user @cknaap for the suggestion!"
|
||||
- item:
|
||||
issue: "409"
|
||||
type: "fix"
|
||||
title: "<code>Tag#setCode(String)</code> did not actually set the code it was supposed to set. Thanks to Tim Tschampel for reporting!"
|
||||
- item:
|
||||
issue: "401"
|
||||
type: "fix"
|
||||
title: "JPA server's <code>/Bundle</code> endpoint cleared the <code>Bundle.entry.fullUrl</code> field on stored bundles, resulting in invalid content being saved. Thanks to Mirjam Baltus for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server now returns HTTP 200 instead of HTTP 404 for conditional deletes which did not find any matches, per FHIR-I decision."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Client that declares explicitly that it is searching/reading/etc for a custom type did not automatically parse into that type."
|
||||
- item:
|
||||
issue: "406"
|
||||
type: "add"
|
||||
title: "Allow servers to specify the authentication realm of their choosing when throwing an AuthenticationException. Thanks to GitHub user @allanbrohansen for the suggestion!"
|
||||
- item:
|
||||
issue: "416"
|
||||
type: "add"
|
||||
title: "Add a new client implementation which uses the <a href=\"http://square.github.io/okhttp/\">OkHttp</a> library as the HTTP client implementation (instead of Apache HttpClient). This is particularly useful for Android (where HttpClient is a pain) but could also be useful in other places too. Thanks to Matt Clarke of Orion Health for the contribution!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix a regression when parsing resources that have contained resources, where the reference in the outer resource which links to the contained resource sometimes did does not get populated with the actual target resource instance. Thanks to Neal Acharya for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "hapi-fhir-cli upload-terminology command now has an argument \"-b FOO\" that lets you add an authorization header in the form <code>Authorization: Bearer FOO</code>"
|
||||
- item:
|
||||
issue: "423"
|
||||
type: "fix"
|
||||
title: "Parser failed to successfully encode a custom resource if it contained custom fields that also used custom types. Thanks to GitHub user @sjanic for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Inprove handling of _text and _content searches in JPA server to do better matching on partial strings"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Servers in STU3 mode will now ignore any ID or VersionID found in the resource body provided by the client when processing FHIR <code>update</code> operations. This change has been made because the FHIR specification now requires servers to ignore these values. Note that as a result of this change, resources passed to <code>@Update</code> methods will always have <code>null</code> ID"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add new methods to <code>AuthorizationInterceptor</code> which allow user code to declare support for conditional create, update, and delete."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When encoding a resource with a reference to another resource that has a placeholder ID (e.g. urn:uuid:foo), the urn prefix was incorrectly stripped from the reference."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Servers for STU3 (or newer) will no longer include a <code>Location:</code> header on responses for <code>read</code> operations. This header was required in earlier versions of FHIR but has been removed from the specification."
|
||||
- item:
|
||||
issue: "428"
|
||||
type: "fix"
|
||||
title: "Fix NullPointerException when encoding an extension containing CodeableConcept with log level set to TRACE. Thanks to Bill Denton for the report!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add two new methods to the parser error handler that let users trap invalid contained resources with no ID, as well as references to contained resource that do not exist."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Improve performance when parsing resources containing contained resources by eliminating a step where references were woven twice"
|
||||
- item:
|
||||
issue: "426"
|
||||
type: "fix"
|
||||
title: "Parser failed to parse resources containing an extension with a value type of \"id\". Thanks to Raphael Mäder for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When committing a transaction in JPA server where the transaction contained placeholder IDs for references between bundles, the placeholder IDs were not substituted with viewing resources using the _history operation"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "HAPI root pom shouldn't include animal-sniffer plugin, since that causes any projects which extend this to be held to Java 6 compliance."
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2016-08-30"
|
|
@ -0,0 +1,152 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "STU3 structure definitions have been updated to the STU3 latest definitions (1.7.0 - SVN 10129). In particular, this version supports the new CapabilityStatement resource which replaces the previous Conformance resource (in order to reduce upgrade pain, both resource types are included in this version of HAPI)"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Bump the version of a few dependencies to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>spring-data-orm (JPA): 1.10.2 -> 1.10.4</li> </ul>"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix a fairly significant issue in JPA Server when using the <code>DatabaseBackedPagingProvider</code> : When paging over the results of a search / $everything operation, under certain circumstances resources may be missing from the last page of results that is returned. Thanks to David Hay for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Client, Server, and JPA server now support experimental support for HTTP PATCH using the XML Patch and JSON Patch syntax as explored during the September 2016 Baltimore Connectathon. See <a href=\"http://wiki.hl7.org/index.php?title=201609_PATCH_Connectathon_Track_Proposal\">this wiki page</a> for a description of the syntax. <br/> Thanks to Pater Girard for all of his help during the connectathon in implementing this feature!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Android library now uses OkHttp client by default instead of Apache HttpClient. This should lead to much simpler support for Android in the future."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Both client and server now use the new STU3 mime types by default if running in STU3 mode (in other words, using an STU3 FhirContext)."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In server, when returning a list of resources, the server sometimes failed to add <code>_include</code> resources to the response bundle if they were referred to by a contained resource. Thanks to Neal Acharya for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix regression in web testing UI where \"prev\" and \"next\" buttons don't work when showing a result bundle"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server should not attempt to resolve built-in FHIR StructureDefinitions from the database (this causes a significant performance hit when validating)"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "BanUnsupportedHttpMethodsInterceptor was erroring out when a client attempts HTTP HEAD requests"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Conditional URLs in JPA server (e.g. for delete or update) did not support the <code>_has</code> parameter"
|
||||
- item:
|
||||
issue: "440"
|
||||
type: "add"
|
||||
title: "Remove Maven dependency on Saxon library, as it is not actually used. Thanks to Lem Edmondson for the suggestion!"
|
||||
- item:
|
||||
issue: "444"
|
||||
type: "fix"
|
||||
title: "Times before 1970 with fractional milliseconds were parsed incorrectly. Thanks to GitHub user @CarthageKing for reporting!"
|
||||
- item:
|
||||
issue: "448"
|
||||
type: "fix"
|
||||
title: "Prevent crash in parser when parsing resource with multiple profile declarations when default type for profile is used. Thanks to Filip Domazet for the pull request!"
|
||||
- item:
|
||||
issue: "445"
|
||||
type: "fix"
|
||||
title: "STU3 servers were adding the old MimeType strings to the <code>Conformance.format</code> part of the generated server conformance statement"
|
||||
- item:
|
||||
issue: "446"
|
||||
type: "fix"
|
||||
title: "When performing an update using the client on a resource that contains other resources (e.g. Bundle update), all child resources in the parent bundle were incorrectly given the ID of the parent. Thanks to Filip Domazet for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "STU clients now use an Accept header which indicates support for both the old MimeTypes (e.g. <code>application/xml+fhir</code> ) and the new MimeTypes (e.g. <code>application/fhir+xml</code> )"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server now sends correct <code>HTTP 409 Version Conflict</code> when a DELETE fails because of constraint issues, instead of <code>HTTP 400 Invalid Request</code>"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server history operation did not populate the Bundle.entry.request.url field, which is required in order for the bundle to pass validation. Thanks to Richard Ettema for spotting this!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add a new method to the server interceptor framework which will be called after all other processing is complete (useful for performance tracking). The server LoggingInterceptor has been switched to using this method which means that log lines will be created when processing is finished, instead of when it started."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "STU3 clients were not sending the new mimetype values in the <code>Content-Type</code> header. Thanks to Claude Nanjo for pointing this out!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JAX-RS server was not able to handle the new mime types defined in STU3"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server did not handle custom types when being called programatically (I.e. not through HTTP interface). Thanks to Anthony Mei for pointing this out!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "CLI was not correctly able to upload DSTU2 examples to any server"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "STU3 validator has been upgrated to include fixes made since the 1.6.0 ballot"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Prevent JPA server from creating a bunch of FhirContext objects for versions of FHIR that aren't actually being used"
|
||||
- item:
|
||||
issue: "443"
|
||||
type: "fix"
|
||||
title: "XhtmlNode.equalsDeep() contained a bug which caused resources containing a narrative to always return <code>false</code> for STU3 <code>Resource#equalsDeep()</code> . Thanks to GitHub user @XcrigX for reporting!"
|
||||
- item:
|
||||
issue: "441"
|
||||
type: "fix"
|
||||
title: "JPA server did not correctly process searches for chained parameters where the chain passed across a field that was a choice between a reference and a non-reference type (e.g. <code>MedicationAdministration.medication[x]</code> . Thanks to GitHub user @Crudelus for reporting!"
|
||||
- item:
|
||||
issue: "414"
|
||||
type: "fix"
|
||||
title: "Handle parsing an extension without a URL more gracefully. In HAPI FHIR 2.0 this caused a NullPointerException to be thrown. Now it will trigger a warning, or throw a DataFormatException if the StrictErrorHandler is configured on the parser."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Calling a HAPI server URL with a chain on a parameter that shouldn't accept chains (e.g. <code>GET [base]/Patient?name.foo=smith</code> ) did not return an error and instead just ignored the chained part and treated the parameter as though it did not have the chain. This led to confusing and potentially unsafe behaviour. This has been corrected to return an error to the client. Thanks to Kevin Tallevi for finding this!"
|
||||
- item:
|
||||
issue: "411"
|
||||
type: "fix"
|
||||
title: "Fix #411 - Searching by <code>POST [base]/_search</code> with urlencoded parameters doesn't work correctly if interceptors are accessing the parameters and there is are also parameters on the URL. Thanks to Jim Steel for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Fluent client can now return types other than Parameters when invoking operations."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server shouldn't report a totalCount in Bundle of \"-1\" when there are no results"
|
||||
- item:
|
||||
issue: "454"
|
||||
type: "fix"
|
||||
title: "JPA server was not correctly normalizing strings with non-latin characters (e.g. Chinese chars). Thanks to GitHub user @YinAqu for reporting and providing some great analysis of the issue!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add a new method to ReferenceClientParam which allows you to pass in a number of IDs by a collection of Strings. Thanks to Thomas Andersen for the pul request!"
|
||||
- item:
|
||||
issue: "327"
|
||||
type: "fix"
|
||||
title: "When encoding a resource in JSON where the resource has an extension with a value where the value is a reference to a contained resource, the reference value (e.g. \"#1\") did not get serialized. Thanks to GitHub user @fw060 for reporting!"
|
||||
- item:
|
||||
issue: "464"
|
||||
type: "fix"
|
||||
title: "ResponseHighlighterInterceptor now pretty-prints responses by default unless the user has explicitly requested a non-pretty-printed response (ie. using <code>?_pretty=false</code> . Thanks to Allan Brohansen and Jens Villadsen for the suggestion!"
|
||||
- item:
|
||||
issue: "469"
|
||||
type: "add"
|
||||
title: "Add a new JSON library abstraction layer to the JSON parser. This contribution shouldn't have any end-user impact but does make it easier to use the JSON parser to generate custom structures for other purposes, and should allow us to support RDF more easily at some point. Thanks to Bill Denton for the pull request and the contribution!"
|
||||
- item:
|
||||
issue: "455"
|
||||
type: "add"
|
||||
title: "DSTU1 Bundle encoder did not include the Bundle entry author in the generated bundle. Thanks to Hannes Venter for the pull request and contribution!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Remove unused field (myIsContained) from ResourceTable in JPA server."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "AuthorizationInterceptor is now a bit more aggressive at blocking read operations, stopping them on the way in if there is no way they will be accepted to the resource check on the way out. In addition it can now be configured to allow/deny operation invocations at the instance level on any instance of a given type"
|
||||
- item:
|
||||
issue: "472"
|
||||
type: "fix"
|
||||
title: "STU3 servers were incorrectly returning the <code>Content-Location</code> header instead of the <code>Content</code> header. The former has been removed from the FHIR specification in STU3, but the latter got removed in HAPI's code base. Thanks to Jim Steel for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Correct several documentation issues. Thanks to Vadim Peretokin for the pull requests!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Remove an unneccesary database flush from JPA persistence operations"
|
||||
- item:
|
||||
issue: "470"
|
||||
type: "add"
|
||||
title: "Add method to fluent client to allow OR search across several profiles. Thanks to Thomas Andersen for the pull request!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2016-11-11"
|
|
@ -0,0 +1,146 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Bump the version of a few dependencies to the latest versions (dependent HAPI modules listed in brackets): <ul> <!--<li>spring (JPA): 4.3.1 -> 4.3.4</li>--> <li>Derby (CLI): 10.12.1.1 -> 10.13.1.1</li> <li>Jetty (CLI): 9.3.10.v20160621 -> 9.3.14.v20161028</li> <li>JAnsi (CLI): 1.13 -> 1.14</li> <li>Phloc Commons (SCH Validator): 4.4.5 -> 4.4.6</li> </ul>"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix issue in AuthorizationIntetceptor where transactions are blocked even when they should not be"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix regression in HAPI FHIR 2.1 JPA server where some search parameters on metadata resources did not appear (e.g. \"StructureDefinition.url\"). Thanks to David Hay for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add ability to JPA server for disabling stale search expiry. This is useful if you are deploying the server to a cluster."
|
||||
- item:
|
||||
issue: "495"
|
||||
type: "fix"
|
||||
title: "RestfulServer with no explicitly set FhirContext fails to detect the presents of DSTU3 structures. Thanks to GitHub user @vijayt27 for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "As the <a href=\"https://github.com/eBay/cors-filter\">eBay CORS interceptor</a> project has gone dormant, we have introduced a new HAPI server interceptor which can be used to implement CORS support instead of using the previously recommended Servlet Filter. All server examples as well as the CLI have been switched to use this new interceptor. See the <a href=\"./doc_cors.html\">CORS Documentation</a> for more information."
|
||||
- item:
|
||||
issue: "480"
|
||||
type: "fix"
|
||||
title: "Make the parser configurable so that when parsing an invalid empty value (e.g. <code>{\"status\":\"\"}</code> ) the parser will either throw a meaningful exception or log a warning depending on the configured error handler."
|
||||
- item:
|
||||
issue: "276"
|
||||
type: "fix"
|
||||
title: "Fix issue when serializing resources that have contained resources which are referred to from multiple places. Sometimes when serializing these resources the contained resource section would contain duplicates. Thanks to Hugo Soares and Stefan Evinance for reporting and providing a test case!"
|
||||
- item:
|
||||
issue: "518"
|
||||
type: "add"
|
||||
title: "Allow client to gracefully handle running in DSTU3 mode but with a structures JAR that does not contain a CapabilityStatement resource. Thanks to Michael Lawley for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix a crash in JPA server when searching using an _include if _include targets are external references (and therefore can't be loaded by the server). Thanks to Hannes Ulrich for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "HAPI FHIR CLI failed to delete a file when uploading example resources while running under Windows."
|
||||
- item:
|
||||
issue: "521"
|
||||
type: "fix"
|
||||
title: "Server should reject update if the resource body does not contain an ID, or the ID does not match the request URL. Thanks to Jim Steel for reporting!"
|
||||
- item:
|
||||
issue: "500"
|
||||
type: "fix"
|
||||
title: "Web Testing UI's next and previous buttons for paging through paged results did not work after the migration to using Thymeleaf 3. Thanks to GitHub user @gsureshkumar for reporting!"
|
||||
- item:
|
||||
issue: "525"
|
||||
type: "add"
|
||||
title: "When parsing invalid enum values in STU3, report errors through the parserErrorHandler, not by throwing an exception. Thanks to Michael Lawley for the pull request!"
|
||||
- item:
|
||||
issue: "516"
|
||||
type: "add"
|
||||
title: "When parsing DSTU3 resources with enumerated types that contain invalid values, the parser will now invoke the parserErrorHandler. For example, when parsing <code>{\"resourceType\":\"Patient\", \"gender\":\"foo\"}</code> the previous behaviour was to throw an InvalidArgumentException. Now, the parserErrorHandler is invoked. In addition, thw LenientErrorHandler has been modified so that this one case will result in a DataFormatException. This has the effect that servers which receive an invalid enum velue will return an HTTP 400 instead of an HTTP 500. Thanks to Jim Steel for reporting!"
|
||||
- item:
|
||||
issue: "520"
|
||||
type: "add"
|
||||
title: "DSTU3 context now pulls the FHIR version from the actual model classes. Thanks to Michael Lawley for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Enhancements to the tinder-plugin's generic template features of the <i>generate-multi-files</i> and <i>generate-single-file</i> Maven goals as well as the Ant <i>hapi-tinder</i> task. <ul> <li>Provides the full Tinder data model by adding composites, valuesets, and profiles to resourcesw.</li> <li>Supports generating files for resources, composites, valuesets, and profiles</li> <li>Supports Velocimacro files outside the tinder-plugin JAR</li> <li>Provides filename prefix as well as suffix properties</li> <li>Can specify any of the Velocity configuration parameters such as <i>macro.provide.scope.control</i> which allows safe macro recursion</li> <li>Templates can now drill down into the referenced children for a ResourceBlockCopy</li> <li>Normalization of properties across all three generic tasks</li> </ul>"
|
||||
- item:
|
||||
issue: "523"
|
||||
type: "fix"
|
||||
title: "Fix ordering of validator property handling when an element has a name that is similar to a shorter name[x] style name. Thanks to CarthageKing for the pull request!"
|
||||
- item:
|
||||
issue: "510"
|
||||
type: "add"
|
||||
title: "Add a docker configuration to the hapi-fhir-jpaservr-example module. Thanks to Gijsbert van den Brink for the pull request!"
|
||||
- item:
|
||||
issue: "507"
|
||||
type: "add"
|
||||
title: "Add utility constructors to MoneyDt. Thanks to James Ren for the contribution!"
|
||||
- item:
|
||||
issue: "528"
|
||||
type: "fix"
|
||||
title: "AuthorizationInterceptor was failing to allow read requests to pass when a rule authorized those resources by compartment. Thanks to GitHub user @mattiuusitalo for reporting and supplying a test case!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Correct a typo in client <code>IHttpRequest</code> class: \"bufferEntitity\" should be \"bufferEntity\"."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "ErrorHandler is now called (resulting in a warning by default, but can also be an exception) when arsing JSON if the resource ID is not a JSON string, or an object is found where an array is expected (e.g. repeating field). Thanks to Jenni Syed of Cerner for providing a test case!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix Web Testing UI to be able to handle STU3 servers which return CapabilityStatement instead of the previously used \"Conformance\" resource"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "CLI example uploader couldn't find STU3 examples after CI server was moved to build.fhir.org"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix issue in JPA subscription module that prevented purging stale subscriptions when many were present on Postgres"
|
||||
- item:
|
||||
issue: "532"
|
||||
type: "fix"
|
||||
title: "Server interceptor methods were being called twice unnecessarily by the JPA server, and the DaoConfig interceptor registration framework was not actually useful. Thanks to GitHub user @mattiuusitalo for reporting!"
|
||||
- item:
|
||||
issue: "503"
|
||||
type: "fix"
|
||||
title: "AuthorizationInterceptor on JPA server did not correctly apply rules on deleting resources in a specific compartment because the resource metadata was stripped by the JPA server before the interceptor could see it. Thanks to Eeva Turkka for reporting!"
|
||||
- item:
|
||||
issue: "519"
|
||||
type: "fix"
|
||||
title: "JPA server exported CapabilityStatement includes double entries for the _id parameter and uses the wrong type (string instead of token). Thanks to Robert Lichtenberger for reporting!"
|
||||
- item:
|
||||
issue: "504"
|
||||
type: "add"
|
||||
title: "Custom resource types which extend Binary must not have declared extensions since this is invalid in FHIR (and HAPI would just ignore them anyhow). Thanks to Thomas S Berg for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Standard HAPI zip/tar distributions did not include the project sources and JavaDoc JARs. Thanks to Keith Boone for pointing this out!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server AuthorizationInterceptor always rejects history operation at the type level even if rules should allow it."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server terminology service was not correctly validating or expanding codes in SNOMED CT or LOINC code systems. Thanks to David Hay for reporting!"
|
||||
- item:
|
||||
issue: "539"
|
||||
type: "fix"
|
||||
title: "Attempting to search for an invalid resource type (e.g. GET base/FooResource) should return an HTTP 404 and not a 400, per the HTTP spec. Thanks to GitHub user @CarthageKing for the pull request!"
|
||||
- item:
|
||||
issue: "544"
|
||||
type: "fix"
|
||||
title: "When parsing a Bundle containing placeholder fullUrls and references (e.g. \"urn:uuid:0000-0000\") the resource reference targets did not get populated with the given resources. Note that as a part of this change, <code>IdType</code> and <code>IdDt</code> have been modified so that when parsing a placeholder ID, the complete placeholder including the \"urn:uuid:\" or \"urn:oid:\" prefix will be placed into the ID part. Previously, the prefix was treated as the base URL, which led to strange behaviour like the placeholder being treated as a real IDs. Thanks to GitHub user @jodue for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Declared extensions with multiple type() options listed in the @Child annotation caused a crash on startup. Now this is supported."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "STU3 XHTML parser for narrative choked if the narrative contained an <code>&rsquot;</code> entity string."
|
||||
- item:
|
||||
issue: "538"
|
||||
type: "fix"
|
||||
title: "When parsing a quantity parameter on the server with a value and units but no system (e.g. <code>GET [base]/Observation?value=5.4||mg</code> ) the unit was incorrectly treated as the system. Thanks to @CarthageKing for the pull request!"
|
||||
- item:
|
||||
issue: "533"
|
||||
type: "fix"
|
||||
title: "Correct a typo in the JPA ValueSet ResourceProvider which prevented successful operation under Spring 4.3. Thanks to Robbert van Waveren for the pull request!"
|
||||
- item:
|
||||
type: "remove"
|
||||
title: "Deprecate the method <code>ICompositeElement#getAllPopulatedChildElementsOfType(Class)</code> as it is no longer used by HAPI and is just an annoying step in creating custom structures. Thanks to Allan Bro Hansen for pointing this out."
|
||||
- item:
|
||||
issue: "547"
|
||||
type: "fix"
|
||||
title: "CapturingInterceptor did not buffer the response meaning that in many circumstances it did not actually capture the response. Thanks to Jenny Syed of Cerner for the pull request and contribution!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2016-12-20"
|
|
@ -0,0 +1,129 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Bump the version of a few dependencies to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Hibernate (JPA): 5.1.0 -> 5.2.7</li> <li>Hibernate Search (JPA): 5.5.4 ->p; 5.7.0.CR1</li> <li>Hibernate Validator (JPA): 5.2.4 ->p; 5.3.4</li> <li>Spring (JPA): 4.3.1 -> 4.3.6</li> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server now supports custom search parameters in DSTU3 mode. This allows users to create search parameters which contain custom paths, or even override and disable existing search parameters."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "CLI example uploader couldn't find STU3 examples after CI server was moved to build.fhir.org"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix issue in JPA subscription module that prevented purging stale subscriptions when many were present on Postgres"
|
||||
- item:
|
||||
issue: "532"
|
||||
type: "fix"
|
||||
title: "Server interceptor methods were being called twice unnecessarily by the JPA server, and the DaoConfig interceptor registration framework was not actually useful. Thanks to GitHub user @mattiuusitalo for reporting!"
|
||||
- item:
|
||||
issue: "503"
|
||||
type: "fix"
|
||||
title: "AuthorizationInterceptor on JPA server did not correctly apply rules on deleting resources in a specific compartment because the resource metadata was stripped by the JPA server before the interceptor could see it. Thanks to Eeva Turkka for reporting!"
|
||||
- item:
|
||||
issue: "519"
|
||||
type: "fix"
|
||||
title: "JPA server exported CapabilityStatement includes double entries for the _id parameter and uses the wrong type (string instead of token). Thanks to Robert Lichtenberger for reporting!"
|
||||
- item:
|
||||
issue: "504"
|
||||
type: "add"
|
||||
title: "Custom resource types which extend Binary must not have declared extensions since this is invalid in FHIR (and HAPI would just ignore them anyhow). Thanks to Thomas S Berg for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Standard HAPI zip/tar distributions did not include the project sources and JavaDoc JARs. Thanks to Keith Boone for pointing this out!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server AuthorizationInterceptor always rejects history operation at the type level even if rules should allow it."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server terminology service was not correctly validating or expanding codes in SNOMED CT or LOINC code systems. Thanks to David Hay for reporting!"
|
||||
- item:
|
||||
issue: "539"
|
||||
type: "fix"
|
||||
title: "Attempting to search for an invalid resource type (e.g. GET base/FooResource) should return an HTTP 404 and not a 400, per the HTTP spec. Thanks to GitHub user @CarthageKing for the pull request!"
|
||||
- item:
|
||||
issue: "544"
|
||||
type: "fix"
|
||||
title: "When parsing a Bundle containing placeholder fullUrls and references (e.g. \"urn:uuid:0000-0000\") the resource reference targets did not get populated with the given resources. Note that as a part of this change, <code>IdType</code> and <code>IdDt</code> have been modified so that when parsing a placeholder ID, the complete placeholder including the \"urn:uuid:\" or \"urn:oid:\" prefix will be placed into the ID part. Previously, the prefix was treated as the base URL, which led to strange behaviour like the placeholder being treated as a real IDs. Thanks to GitHub user @jodue for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Declared extensions with multiple type() options listed in the @Child annotation caused a crash on startup. Now this is supported."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "STU3 XHTML parser for narrative choked if the narrative contained an <code>&rsquot;</code> entity string."
|
||||
- item:
|
||||
issue: "538"
|
||||
type: "fix"
|
||||
title: "When parsing a quantity parameter on the server with a value and units but no system (e.g. <code>GET [base]/Observation?value=5.4||mg</code> ) the unit was incorrectly treated as the system. Thanks to @CarthageKing for the pull request!"
|
||||
- item:
|
||||
issue: "533"
|
||||
type: "fix"
|
||||
title: "Correct a typo in the JPA ValueSet ResourceProvider which prevented successful operation under Spring 4.3. Thanks to Robbert van Waveren for the pull request!"
|
||||
- item:
|
||||
type: "remove"
|
||||
title: "Deprecate the method <code>ICompositeElement#getAllPopulatedChildElementsOfType(Class)</code> as it is no longer used by HAPI and is just an annoying step in creating custom structures. Thanks to Allan Bro Hansen for pointing this out."
|
||||
- item:
|
||||
issue: "547"
|
||||
type: "fix"
|
||||
title: "CapturingInterceptor did not buffer the response meaning that in many circumstances it did not actually capture the response. Thanks to Jenny Syed of Cerner for the pull request and contribution!"
|
||||
- item:
|
||||
issue: "548"
|
||||
type: "fix"
|
||||
title: "Clean up dependencies and remove Eclipse project files from git. Thanks to @sekaijin for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When performing a conditional create in a transaction in JPA server, if a resource already existed matching the conditional expression, the server did not change the version of the resource but did update the body with the passed in body. Thanks to Artem Sopin for reporting and providing a test case for this!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Client revincludes did not include the :recurse modifier. Thanks to Jenny Meinsma for pointing this out on Zulip!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server did not return an OperationOutcome in the response for a normal delete operation."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix an issue in JPA server where _history results were kept in memory instead of being spooled to the database as they should be. Note that as a part of this fix a new method was added to <code>IBundleProvider</code> called <code>getUuid()</code> . This method may return <code>null</code> in any current cases."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Expanding a ValueSet in JPA server did not correctly apply <code>?filter=</code> parameter when the ValueSet being expanded had codes included explicitly (i.e. not by is-a relationship). Thanks to David Hay for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA validator incorrectly returned an HTTP 400 instead of an HTTP 422 when the resource ID was not present and required, or vice versa. Thanks to Brian Postlethwaite for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When using an annotation based client, a ClassCastException would occur under certain circumstances when the response contained contained resources"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server interceptor methods for create/update/delete provided the wrong version ID to the interceptors"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A post-processing hook for subclasses of BaseValidatingInterceptor is now available."
|
||||
- item:
|
||||
issue: "585"
|
||||
type: "add"
|
||||
title: "AuthorizationInterceptor can now authorize (allow/deny) extended operations on instances and types by wildcard (on any type, or on any instance)"
|
||||
- item:
|
||||
issue: "595"
|
||||
type: "add"
|
||||
title: "When RequestValidatingInterceptor is used, the validation results are now populated into the OperationOutcome produced by create and update operations"
|
||||
- item:
|
||||
issue: "542"
|
||||
type: "add"
|
||||
title: "Add support for the $process-message operation to fluent client. Thanks to Hugo Soares for the pull request!"
|
||||
- item:
|
||||
issue: "543"
|
||||
type: "add"
|
||||
title: "Parser can now be configured when encoding to use a specific base URL for extensions. Thanks to Sebastien Riviere for the pull request!"
|
||||
- item:
|
||||
issue: "568"
|
||||
type: "fix"
|
||||
title: "Correct the resource paths for the DSTU2.1 validation resources, allowing the validator to correctly work against those structures. Thanks to Michael Lawley for the pull request!"
|
||||
- item:
|
||||
issue: "551"
|
||||
type: "fix"
|
||||
title: "XML Parser failed to parse large field values (greater than 512 Kb) on certain platforms where the StAX parser was overridden. Thanks to GitHub user @Jodue for the pull request!"
|
||||
- item:
|
||||
issue: "575"
|
||||
type: "add"
|
||||
title: "Remove an unneccesary database flush when saving large code systems to the JPA database, improving performance of this operation. Thanks to Joel Schneider for the pull request and analysis!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new post-processing hook for subclasses of BaseValidatingInterceptor is now available. The hook exposes the request details on validation failure prior to throwing an UnprocessableEntityException."
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2017-03-18"
|
|
@ -0,0 +1,63 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "This release brings the DSTU3 structures up to FHIR R3 (FHIR 3.0.1) definitions. Note that there are very few changes between the DSTU3 structures in HAPI FHIR 2.3 and the ones in HAPI FHIR 2.4 since the basis for the DSTU3 structures in HAPI FHIR 2.3 was the R3 QA FHIR version (1.9.0) but this is the first release of HAPI FHIR to support the final/complete R3 release."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Bump the version of a few dependencies to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Hibernate (JPA): 5.2.7 -> 5.2.9</li> <li>Hibernate Search (JPA): 5.5.7.CR1 -> 5.2.7.Final</li> <li>Hibernate Validator (JPA): 5.3.4 -> 5.4.1</li> <li>Spring (JPA): 4.3.6 -> 4.3.7</li> <li>Gson (Core): 2.7 -> 2.8.0</li> <li>Guava (JPA): 19.0 -> 21.0</li> <li>SLF4j (Core): 1.7.21 -> 1.7.25</li> <li>Logback (Core): 1.1.7 -> 1.2.2</li> </ul>"
|
||||
- item:
|
||||
issue: "602"
|
||||
type: "add"
|
||||
title: "hapi-fhir-jpaserver-example now includes the <code>Prefer</code> header in the list of CORS headers. Thanks to GitHub user @elnin0815 for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "AuthorizationInterceptor can now allow make read or write authorization decisions on a resource by instance ID"
|
||||
- item:
|
||||
issue: "208"
|
||||
type: "fix"
|
||||
title: "Remove SupportingDocumentation resource from DSTU2 structures. This isn't actually a resource in FHIR DSTU2 and its inclusion causes errors on clients that don't understand what it is. Thanks to Travis Cummings and Michele Mottini for pointing this out."
|
||||
- item:
|
||||
issue: "607"
|
||||
type: "fix"
|
||||
title: "Web testing UI displayed an error when a transaction was pasted into the UI for a DSTU2 server. Thanks to Suresh Kumar for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "DaoConfig#setAllowInlineMatchUrlReferences() now defaults to <code>true</code> since inline conditional references are now a part of the FHIR specification. Thanks to Jan DÄ\x9bdek for pointing this out!"
|
||||
- item:
|
||||
issue: "609"
|
||||
type: "add"
|
||||
title: "hapi-fhir-jpaserver-base now exposes a <code>FhirInstanceValidator</code> bean named <code>\"myInstanceValidatorDstu2\"</code> for DSTU2. A similar bean for DSTU3 was previously implemented."
|
||||
- item:
|
||||
issue: "453"
|
||||
type: "add"
|
||||
title: "hapi-fhir-jpaserver-example project now defaults to STU3 mode instead of the previous DSTU2. Thanks to Joel Schneider for the pull request!"
|
||||
- item:
|
||||
issue: "534"
|
||||
type: "add"
|
||||
title: "JPA server now has a setting on the DaoConfig to force it to treat certain reference URLs or reference URL patterns as logical URLs instead of literal ones, meaning that the server will not try to resolve these URLs. Thanks to Eeva Turkka for the suggestion!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add a utility method to JPA server: <code>IFhirResourceDao#removeTag(IIdType, TagTypeEnum, String, String)</code> . This allows client code to remove tags from a resource without having a servlet request object in context."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server was unable to process custom search parameters where the path pointed to an extension containing a reference. Thanks to Ravi Kuchi for reporting!"
|
||||
- item:
|
||||
issue: "623"
|
||||
type: "fix"
|
||||
title: "Servers in DSTU2.1 mode were incorrectly using the legacy mimetypes instead of the new STU3 ones. Thanks to Michael Lawley for the pull request!"
|
||||
- item:
|
||||
issue: "624"
|
||||
type: "add"
|
||||
title: "Add an option to ParserOptions that specifies that when parsing a bundle, the ID found in the Bundle.entry.fullUrl should not override the ID found in the Resource.id field. Technically these fields must always supply the same ID in order for a server to be considered conformant, but this option allows you to deal with servers which are behaving badly. Thanks to GitHub user CarthageKing for the pul request!"
|
||||
- item:
|
||||
issue: "617"
|
||||
type: "fix"
|
||||
title: "Remove unneccesary whitespace in the text areas on the testing web UI. Thanks to GitHub user @elnin0815 for the pull request!"
|
||||
- item:
|
||||
issue: "613"
|
||||
type: "add"
|
||||
title: "In JAX-RS server it is now possible to change the server exception handler at runtime without a server restart. Thanks to Sebastien Riviere for the pull request!"
|
||||
- item:
|
||||
issue: "610"
|
||||
type: "fix"
|
||||
title: "Fix a potential race condition when the FhirContext is being accessed by many threads at the same time right as it is initializing. Thanks to Ben Spencer for the pull request!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2017-04-19"
|
|
@ -0,0 +1,89 @@
|
|||
---
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "This release includes significant performance enhancements for the JPA server. Most importantly, the way that searches are performed has been re-written to allow the server to perform better when the database has a large number of results in it. The following enhancements have been made: <br/><br/> <ul> <li> Searches with multiple search parameters of different datatypes (e.g. find patients by name and date of birth) were previously joined in Java code, now the join is performed by the database which is faster </li> <li> Searches which returned lots of results previously has all results streamed into memory before anything was returned to the client. This is particularly slow if you do a search for (say) \"get me all patients\" since potentially thousands or even millions of patients' IDs were loaded into memory before anything gets returned to the client. HAPI FHIR now has a multithreaded search coordinator which returns results to the client as soon as they are available </li> <li> Search results will be cached and reused (so that if a client does two searches for \"get me all patients matching FOO\" with the same FOO in short succession, we won't query the DB again but will instead reuse the cached results). Note that this can improve performance, but does mean that searches can return slightly out of date results. Essentially what this means is that the latest version of individual resources will always be returned despite this cacheing, but newly created resources that should match may not be returned until the cache expires. By default this cache has been set to one minute, which should be acceptable for most real-world usage, but this can be changed or disabled entirely. </li> <li> Updates which do not actually change the contents of the resource can optionally be prevented from creating a new version of the resource in the database </li> </ul> <br/><br/> Existing users should delete the <code>HFJ_SEARCH</code>, <code>HFJ_SEARCH_INCLUDE</code>, and <code>HFJ_SEARCH_RESULT</code> tables from your database before upgrading, as the structure of these tables has changed and old search results can not be reused."
|
||||
- item:
|
||||
issue: "590"
|
||||
type: "fix"
|
||||
title: "AuthorizationInterceptor did not correctly handle paging requests (e.g. requests for the second page of results for a search operation). Thanks to Eeva Turkka for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add configuration property to DSTU3 FhirInstanceValidator to allow client code to change unknown extension handling behaviour."
|
||||
- item:
|
||||
issue: "630"
|
||||
type: "fix"
|
||||
title: "Fix concurrency issues in FhirContext that were causing issues when starting a context up on Android. Thanks to GitHub issue @Jaypeg85 for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix an issue in the JPA server if a resource has been previously saved containing vocabulary that is no longer valid. This only really happened if you were using a non-final version of FHIR (e.g. using DSTU3 before it was finalized) but if you were in this situation, upgrading HAPI could cause you to have old codes that no longer exist in your database. This fix prevents these from blocking you from accesing those resources."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "CLI now defaults to DSTU3 mode if no FHIR version is specified"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Server and annotation-client @History annotation now allows DSTU3+ resource types in the type= property"
|
||||
- item:
|
||||
issue: "563"
|
||||
type: "fix"
|
||||
title: "JSON Parser gave a very unhelpful error message (Unknown attribute 'value' found during parse) when a scalar value was found in a spot where an object is expected. This has been corrected to include much more information. Thanks to GitHub user @jasminas for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "DaoConfig#setInterceptors() has been un-deprecated. It was previously deprecated as we thought it was not useful, but uses have been identified so it turns out this method will live after all. Interceptors registered to this method will now be treated appropriately if they implement IServerOperationInterceptor too."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server did not correctly support searching on a custom search parameter whose path pointed to an extension, where the client used a chained value."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix issue where the JSON parser sometimes did not encode DSTU3 extensions on the root of a resource which have a value of type reference."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Server now respects the If-Modified-Since header and will return an HTTP 304 if appropriate for read operations."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server did not correctly process :missing qualifier on date parameters"
|
||||
- item:
|
||||
issue: "633"
|
||||
type: "fix"
|
||||
title: "AppacheHttpClient did not always respect the charset in the response Content-Type header. Thanks to Gijsbert van den Brink for the pull request!"
|
||||
- item:
|
||||
issue: "636"
|
||||
type: "fix"
|
||||
title: "Fix XhtmlParser to correctly handle hexadecimal escaped literals. Thanks to Gijsbert van den Brink for the Pull Request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server now has configurable properties that allow referential integrity to be disabled for both writes and deletes. This is useful in some cases where data integrity is not wanted or not possible. It can also be useful if you want to delete large amounts of interconnected data quickly. <br/><br/> A corresponding flag has been added to the CLI tool as well."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server did not correctly support searching on a custom search parameter whose path pointed to an extension, where the client used a chained value."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix dependency on commons-codec 1.4 in hapi-fhir-structures-dstu3, which was preventing this library from being used on Android because Android includes an older version of commons-codec."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server failed to index search parameters on paths containing a decimal data type"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Validator incorrectly rejected references where only an identifier was populated"
|
||||
- item:
|
||||
issue: "649"
|
||||
type: "fix"
|
||||
title: "Make error handler in the client more tolerant of errors where no response has been received by the client when the error happens. Thanks to GitHub user maclema for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add a check in JPA server that prevents completely blank tags, profiles, and security labels from being saved to the database. These were filtered out anyhow when the result was returned back to the client but they were persisted which just wasted space."
|
||||
- item:
|
||||
issue: "664"
|
||||
type: "fix"
|
||||
title: "Loading the build-in profile structures (StructureDefinition, ValueSet, etc) is now done in a synchronized block in order to prevent multiple loads happening if the server processes multiple validations in parallel threads right after startup. Previously a heavy load could cause the server to run out of memory and lock up. Thanks to Karl M Davis for analysis and help fixing this!"
|
||||
- item:
|
||||
issue: "652"
|
||||
type: "fix"
|
||||
title: "Fix bad ValueSet URL in DeviceRequest profile definition for STU3 which was preventing the CLI from uploading definitions correctly. Thanks to Joel Schneider for the Pull Request!"
|
||||
- item:
|
||||
issue: "656"
|
||||
type: "add"
|
||||
title: "Improve handling in JPA server when doing code:above and code:below searches to use a disjunction of AND and IN in order to avoid failures under certain conditions. Thanks to Michael Lawley for the pul request!"
|
||||
- item:
|
||||
issue: "660"
|
||||
type: "fix"
|
||||
title: "Fix an error where the JPA server sometimes failed occasional requests with a weird NullPointerException when running under very large concurrent loads. Thanks to Karl M. Davis for reporting, investigating, and ultimately finding a solution!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2017-06-08"
|
|
@ -0,0 +1,234 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Support for FHIR R4 (current working draft) has been <b>added</b> (in a new module called <code>hapi-fhir-structures-r4</code> ) and support for FHIR DSTU1 ( <code>hapi-fhir-structures-dstu</code> ) has been <b>removed</b> . Removing support for the legacy DSTU1 FHIR version was a difficult decision, but it allows us the opportunitity to clean up the codebase quite a bit, and remove some confusing legacy parts of the API (such as the legacy Atom Bundle class). <br/><br/> A new redesigned table of HAPI FHIR versions to FHIR version support has been added to the <a href=\"http://hapifhir.io/download.html\">Download Page</a>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "HAPI FHIR's modules have been restructured for more consistency and less coupling between unrelated parts of the API. <br/><br/> A new complete list of HAPI FHIR modules has been added to the <a href=\"http://hapifhir.io/download.html\">Download Page</a> . Key changes include: <ul> <li> HAPI FHIR's <b>client</b> codebase has been moved out of <code>hapi-fhir-base</code> and in to a new module called <code>hapi-fhir-client</code>. Client users now need to explicitly add this JAR to their project (and non-client users now no longer need to depend on it) </li> <li> HAPI FHIR's <b>server</b> codebase has been moved out of <code>hapi-fhir-base</code> and in to a new module called <code>hapi-fhir-server</code>. Server users now need to explicitly add this JAR to their project (and non-server users now no longer need to depend on it) </li> <li> As a result of the client and server changes above, we no longer need to produce a special Android JAR which contains the client, server (which added space but was not used) and structures. There is now a normal module called <code>hapi-fhir-android</code> which is added to your Android Gradle file along with whatever structures JARs you wish to add. See the <a href=\"https://github.com/hapifhir/hapi-fhir-android-integration-test\">Android Integration Test</a> to see a sample project using HAPI FHIR 3.0.0. <b>Note that this has been reported to work by some people but others are having issues with it!</b> In order to avoid delaying this release any further we are releasing now despite these issues. If you are an Android guru and want to help iron things out please get in touch. If not, it might be a good idea to stay on HAPI FHIR 2.5 until the next point release of the 3.x series. </li> <li> A new JAR containing FHIR utilities called <code>hapi-fhir-utilities</code> has been added. This JAR reflects the ongoing harmonization between HAPI FHIR and the FHIR RI codebases and is generally required in order to use HAPI at this point (if you are using a dependency manager such as Maven or Gradle it will be brought in to your project automatically as a dependency) </li> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "In order to allow the reoganizations and decoupling above to happen, a number of important classes and interfaces have been moved to new packages. A sample list of these changes is listed below. When upgrading to 3.0.0 your project may well show a number of compile errors related to missing classes. In most cases this can be resolved by simply removing the HAPI imports from your classes and asking your IDE to \"Organize Imports\" once again. This is an annoying change we do realize, but it is neccesary in order to allow the project to continue to grow. <ul> <li>IGenericClient moved from package ca.uhn.fhir.rest.client to package ca.uhn.fhir.rest.client.api</li> <li>IRestfulClient moved from package ca.uhn.fhir.rest.client to package ca.uhn.fhir.rest.client.api</li> <li>AddProfileTagEnum moved from package ca.uhn.fhir.rest.server to package ca.uhn.fhir.context.api</li> <li>IVersionSpecificBundleFactory moved from package ca.uhn.fhir.rest.server to package ca.uhn.fhir.context.api</li> <li>BundleInclusionRule moved from package ca.uhn.fhir.rest.server to package ca.uhn.fhir.context.api</li> <li>RestSearchParameterTypeEnum moved from package ca.uhn.fhir.rest.server to package ca.uhn.fhir.rest.api</li> <li>EncodingEnum moved from package ca.uhn.fhir.rest.server to package ca.uhn.fhir.rest.api</li> <li>Constants moved from package ca.uhn.fhir.rest.server to package ca.uhn.fhir.rest.api</li> <li>IClientInterceptor moved from package ca.uhn.fhir.rest.client to package ca.uhn.fhir.rest.client.api</li> <li>ITestingUiClientFactory moved from package ca.uhn.fhir.util to package ca.uhn.fhir.rest.server.util</li> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Because the Atom-based DSTU1 Bundle class has been removed from the library, users of the HAPI FHIR client must now always include a Bundle return type in search calls. For example, the following call would have worked previously: <br/> Bundle bundle = client.search().forResource(Patient.class)<br/> .where(new TokenClientParam(\"gender\").exactly().code(\"unknown\"))<br/> .prettyPrint()<br/> .execute();<br/><br/> This now needs an explicit returnBundle statement, as follows: <br/> Bundle bundle = client.search().forResource(Patient.class)<br/> .where(new TokenClientParam(\"gender\").exactly().code(\"unknown\"))<br/> .prettyPrint()<br/> .returnBundle(Bundle.class)<br/> .execute();<br/>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The version of a few dependencies have been bumped to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Gson (JSON Parser): 2.8.0 -> 2.8.1</li> <li>Commons-lang3 (Everywhere): 3.5 -> 3.6</li> <!--<li>Saxon-HE (Validator): 9.5.1-5 -> 9.8.0-3</li>--> <li>Apache HttpClient (FHIR Client): 4.5.2 -> 4.5.3</li> <li>Apache HttpCore (FHIR Client): 4.4.5 -> 4.4.6</li> <li>Phloc Commons (Schematron Validator): 4.4.6 -> 4.4.11</li> <li>Hibernate (JPA): 5.2.9 -> 5.2.10</li> <li>Hibernate Search (JPA): 5.7.0 -> 5.7.1</li> <li>Spring (JPA): 4.3.7 -> 4.3.10</li> <li>Spring Data JPA (JPA): 1.10.4 -> 1.11.6</li> <li>Guava (JPA): 22.0 -> 23.0</li> <li>Thymeleaf (Testpage Overlay): 3.0.2 -> 3.0.7</li> <li>OkHttp (Android): 3.4.1 -> 3.8.1</li> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA Subscription support has been refactored. A design contributed by Jeff Chung for the REST Hook subscription module has been ported so that Websocket subscriptions use it too. This design uses an interceptor to scan resources as they are processed to test whether they should be delivered to subscriptions, instead of using a polling design. <br/><br/> In addition, this scanning has been reworked to happen in a separate thread from the main storage thread, which should improve performance and scalability of systems with multiple subscriptions. Thanks to Jeff for all of his work on this!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "hapi-fhir-client-okhttp project POM had dependencies on both hapi-fhir-structures-dstu2 and hapi-fhir-structures-dstu3, which meant that any project using ookhttp would import both structures JARs. This has been removed."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server is now able to handle placeholder IDs (e.g. urn:uuid:00....000) being used in Bundle.entry.request.url as a part of the conditional URL within transactions."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Schematron validator now applies invariants to resources within a Bundle, not just to the outer Bundle resource itself"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Server and Client both still included Category header for resource tags even though this feature was only present in FHIR DSTU1 and was removed from the specification in FHIR DSTU2. The presence of these headers sometimes caused parsed resource instances to contain duplicate tags"
|
||||
- item:
|
||||
issue: "667"
|
||||
type: "fix"
|
||||
title: "When using the AuthorizationInterceptor with the JPA server, when a client is updating a resource from A to B, the user now needs to have write permission for both A and B. This is particularly important for cases where (for example) an Observation is being updated from having a subject of Patient/A to Patient/B. If the user has write permission for Patient/B's compartment, this would previously have been allowed even if the user did not have access to write to Patient/A's compartment. Thanks to Eeva Turkka for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "IServerOperationInterceptor now has a new method <code>resourceUpdated(RequestDetails, IBaseResource, IBaseResource)</code> which replaces the previous <code>resourceUpdated(RequestDetails, IBaseResource)</code> . This allows interceptors to be notified of resource updates, but also see what the resource looked like before the update. This change was made to support the change above, but seems like a useful feature all around."
|
||||
- item:
|
||||
issue: "604"
|
||||
type: "fix"
|
||||
title: "Allow DateParam (used in servers) to handle values with MINUTE precision. Thanks to Christian Ohr for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix HTTP 500 error in JPA server if a numeric search parameter was supplied with no value, e.g. <code>GET /Observation?value-quantity=</code>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server transaction processing now honours the Prefer header and includes created and updated resource bodies in the response bundle if it is set appropriately."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Optimize queries in JPA server remove a few redundant select columns when performing searches. This provides a slight speed increase in some cases."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add configuration to JPA server DaoConfig that allows a maximum number of search results to be specified. Queries will never return more than this number, which can be good for avoiding accidental performance problems in situations where large queries should not be needed"
|
||||
- item:
|
||||
issue: "674"
|
||||
type: "fix"
|
||||
title: "Prevent duplicates in $everything query response in JPA server. Thanks to @vlad-ignatov for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix issue in calling JPA server transactions programmatically where resources are linked by object reference and not by ID where indexes were not correctly generated. This should not affect most users."
|
||||
- item:
|
||||
issue: "678"
|
||||
type: "fix"
|
||||
title: "Fix issue in SubscriptionInterceptor that caused interceptor to only actually notify listeners of the first 10 subscriptions. Thanks to Jeff Chung for the pull request!"
|
||||
- item:
|
||||
issue: "693"
|
||||
type: "fix"
|
||||
title: "Fix potential ConcurrentModificationException when adding subscriptions while running under heavy load. Thanks to Jeff Chung for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA search now uses hibernate ScrollableResults instead of plain JPA List. This should improve performance over large search results."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA servers with no paging provider configured, or with a paging provider other than DatabaseBackedPagingProvider will load all results in a single pass and keep them in memory. Using this setup is not a good idea unless you know for sure that you will never have very large queries since it means that all results will be loaded into memory, but there are valid reasons to need this and it will perform better than paging to the database in that case. This fix also resolves a NullPointerException when performing an $everything search. Thanks to Kamal Othman for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Correct an issue in JPA server on Postgres where searches with a long search URL were not able to be automatically purged from the database after they were scheduled for deletion. Thanks to Ravi Kuchi for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add an optional and configurable hard limit on the total number of meta items (tags, profiles, and security labels) on an individual resource. The default is 1000."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When executing a search (HTTP GET) as a nested operation in in a transaction or batch operation, the search now returns a normal page of results with a link to the next page, like any other search would. Previously the search would return a small number of results with no paging performed, so this change brings transaction and batch processing in line with other types of search."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server no longer returns an OperationOutcome resource as the first resource in the Bundle for a response to a batch operation. This behaviour was previously present, but was not specified in the FHIR specification so it caused confusion and was inconsistent with behaviour in other servers."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix a regression in HAPI FHIR 2.5 JPA server where executing a search in a transaction or batch operation caused an exception. Thanks to Ravi Kuchi for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Correct an issue when processing transactions in JPA server where updates and creates to resources with tags caused the tags to be created twice in the database. These duplicates were utomatically filtered upon read so this issue was not user-visible, but it coule occasionally lead to performance issues if a resource containing multiple tags was updated many times via transactions."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server should not allow creation of resources that have a reference to a resource ID that previously existed but is now deleted. Thanks to Artem Sopin for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JpaConformanceProvider now has a configuration setting to enable and disable adding resource counts to the server metadata."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Avoid a deadlock in JPA server when the RequestValidatingInterceptor is being used and a large number of resources are being created by clients at the same time."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Testpage Overlay's transaction method did not work if the response Bundle contained any entries that did not contain a resource (which is often the case in more recent versions of HAPI). Thanks to Sujay R for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When the server was returning a multi-page search result where the client did not explicitly request an encoding via the _format parameter, a _format parameter was incorrectly added to the paging links in the response Bundle. This would often explicitly request XML encoding because of the browser Accept header even though this was not what the client wanted."
|
||||
- item:
|
||||
issue: "651"
|
||||
type: "add"
|
||||
title: "Enhancement to ResponseHighlighterInterceptor where links in the resource body are now converted to actual clickable hyperlinks. Thanks to Eugene Lubarsky for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "BanUnsupportedHttpMethodsInterceptor has been modified so that it now allows HTTP PATCH to proceed."
|
||||
- item:
|
||||
issue: "651"
|
||||
type: "add"
|
||||
title: "Enhancement to ResponseHighlighterInterceptor so that it now can be configured to display the request headers and response headers, and individual lines may be highlighted."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "AuthorizationInterceptor did not permit PATCH operations to proceed even if the user had write access for the resource being patched."
|
||||
- item:
|
||||
issue: "682"
|
||||
type: "fix"
|
||||
title: "Fix an issue in HapiWorkerContext where structure definitions are not able to be retrieved if they are referred to by their relative or logical ID. This affects profile tooling such as StructureMapUtilities. Thanks to Travis Lukach for reporting and providing a test case!"
|
||||
- item:
|
||||
issue: "679"
|
||||
type: "fix"
|
||||
title: "Add link to DSTU3 JavaDocs from documentation index. Thanks to Vadim Peretokin for the pull request!"
|
||||
- item:
|
||||
issue: "680"
|
||||
type: "fix"
|
||||
title: "Fix a typo in the documentation. Thanks to Saren Currie for the pull request!"
|
||||
- item:
|
||||
issue: "689"
|
||||
type: "add"
|
||||
title: "Add a command line flag to the CLI tool to allow configuration of the server search result cache timeout period. Thanks to Eugene Lubarsky for the pull request!"
|
||||
- item:
|
||||
issue: "683"
|
||||
type: "fix"
|
||||
title: "Correct an issue with the model classes for STU3 where any classes containing the @ChildOrder annotation (basically the conformance resources) will not correctly set the order if any of the elements are a choice type (i.e. named \"foo[x]\"). Thanks to GitHub user @CarthageKing for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix potential deadlock in stale search deleting task in JPA server, as well as potential deadlock when executing transactions containing nested searches when operating under extremely heavy load."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server transaction operations now put OperationOutcome resources resulting from actions in <code>Bundle.entry.response.outcome</code> instead of the previous <code>Bundle.entry.resource</code>"
|
||||
- item:
|
||||
issue: "696"
|
||||
type: "fix"
|
||||
title: "An issue was corrected where search parameters containing negative numbers were sometimes treated as positive numbers when processing the search. Thanks to Keith Boone for reporting and suggesting a fix!"
|
||||
- item:
|
||||
issue: "699"
|
||||
type: "fix"
|
||||
title: "Fix an unfortunate typo in the custom structures documentation. Thanks to Jason Owen for the PR!"
|
||||
- item:
|
||||
issue: "686"
|
||||
type: "fix"
|
||||
title: "Correct an issue in the validator (DSTU3/R4) where elements were not always correctly validated if the element contained only a profiled extension. Thanks to Sébastien Rivière for the pull request!"
|
||||
- item:
|
||||
issue: "701"
|
||||
type: "add"
|
||||
title: "Testing UI now has a dropdown for modifiers on token search. Thanks to GitHub user @dconlan for the pull request!"
|
||||
- item:
|
||||
issue: "688"
|
||||
type: "add"
|
||||
title: "When parsing an incomplete ID with the form <code>http://my.org/Foo</code> into IdDt and IdType objects, the Foo portion will now be treated as the resource type. Previously my.org was treated as the resource type and Foo was treated as the ID. Thanks to GitHub user @CarthageKing for the pull request!"
|
||||
- item:
|
||||
issue: "695"
|
||||
type: "fix"
|
||||
title: "Extensions on ID datatypes were not parsed or serialized correctly. Thanks to Stephen Rivière for the pull request!"
|
||||
- item:
|
||||
issue: "710"
|
||||
type: "fix"
|
||||
title: "Fix a bug in REST Hook Subscription interceptors which prevented subscriptions from being activated. Thanks to Jeff Chung for the pull request!"
|
||||
- item:
|
||||
issue: "708"
|
||||
type: "fix"
|
||||
title: "Fix broken links in usage pattern diagram on website. Thanks to Pascal Brandt for the pull request!"
|
||||
- item:
|
||||
issue: "706"
|
||||
type: "fix"
|
||||
title: "Fix incorrect FHIR Version Strings that were being outputted and verified in the client for some versions of FHIR. Thanks to Clayton Bodendein for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add a new constructor to SimpleRequestHeaderInterceptor which allows a complete header to be passed in (including name and value in one string)"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "REST Hook subscriptions now honour the Subscription.channel.header field"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "DSTU2 validator has been enhanced to do a better job handling ValueSets with expansions pointing to other ValueSets"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "REST HOOK subscriptions now use HTTP PUT if there is a payload type specified, regardless of whether the source event was a create or an update"
|
||||
- item:
|
||||
issue: "712"
|
||||
type: "add"
|
||||
title: "Add appropriate import statements for logging to JPA demo code. Thanks to Rob Hausam for the pull request!"
|
||||
- item:
|
||||
issue: "700"
|
||||
type: "add"
|
||||
title: "Add some browser performance logging to ResponseHighlightingInterceptor. Thanks to Eugene Lubarsky for the pull request, and for convincing James not to optimize something that did not need optimizing!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new config property has been added to the JPA seerver DaoConfig called \"setAutoCreatePlaceholderReferenceTargets\". This property causes references to unknown resources in created/updated resources to have a placeholder target resource automatically created."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The server LoggingInterceptor has had a variable called <code>processingTimeMillis</code> which logs the number of milliseconds the server took to process a given request since HAPI FHIR 2.5, but this was not documented. This variable has now been documented as a part of the available features."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new experimental feature has been added to the JPA server which allows you to define certain search parameter combinations as being resource keys, so that a database constraint will prevent more than one resource from having a matching pair"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When using the client LoggingInterceptor in non-verbose mode, the log line showing the server's response HTTP status will now also include the returned <code>Location</code> header value as well"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new flag has been add to the CLI upload-definitions command \"-e\" which allows skipping particular resources"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "An issue in JPA server has been corrected where if a CodeSystem resource was deleted, it was not possible to create a new resource with the same URI as the previous one"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When uploading a Bundle resource to the server (as a collection or document, not as a transaction) the ID was incorrectly stripped from resources being saved within the Bundle. This has been corrected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Subscriptions in JPA server now support \"email\" delivery type through the use of a new interceptor which handles that type"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server can now be configured to not support <code>:missing</code> modifiers, which increases write performance since fewer indexes are written"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new JPA configuration option has been added to the DaoConfig which allows support for the <code>:missing</code> search parameter modifier to be enabled or disabled, and sets the default to DISABLED. <br/><br/> Support for this parameter causes many more index rows to be inserted in the database, which has a significant impact on write performance. A future HAPI update may allow these rows to be written asynchronously in order to improve this."
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2017-09-27"
|
|
@ -0,0 +1,129 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The version of a few dependencies have been bumped to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Spring (JPA): 4.3.10 -> 5.0.0</li> <li>Jackson (JPA): 2.8.1 -> 2.9.2</li> </ul>"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The Android client module has been restored to working order, and no longer requires a special classifier or an XML parser to be present in order to work. This means that the hapi-fhir-android library is much less likely to cause conflicts with other libraries imported into an Android application via Gradle. <br/><br/> See the <a href=\"http://hapifhir.io/doc_android.html\">HAPI FHIR Android Documentation</a> for more information. As a part of this fix, all dependencies on the StAX API have been removed in environments where StAX is not present (such as Android). The client will now detect this case, and explicitly request JSON payloads from servers, meaning that Android clients no longer need to include two parser stacks"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A performance to the JPA server has been made which reduces the number of writes to index tables when updating a resource with contents that only make minor changes to the resource content. In many cases this can noticeably improve update performance."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In FHIR DSTU3 the <code>ValueSet/$expand?identifier=foo</code> and <code>ValueSet/$validate-code?identifier=foo</code> parameters were changed to <code>ValueSet/$expand?url=foo</code> and <code>ValueSet/$validate-code?url=foo</code> respectively, but the JPA server had not caught up. The JPA DSTU3 server has been adjusted to accept either \"identifier\" or \"url\" (with \"url\" taking precedence), and the JPA R4 server has been changed to only accept \"url\". Thanks to Avinash Shanbhag for reporting!"
|
||||
- item:
|
||||
issue: "744"
|
||||
type: "fix"
|
||||
title: "Fix an error in JPA server when using Derby Database, where search queries with a search URL longer than 255 characters caused a mysterious failure. Thanks to Chris Schuler and Bryn Rhodes for all of their help in reproducing this issue."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server now supports the use of the <code>Cache-Control</code> header in order to allow the client to selectively disable the search result cache. This directive can also be used to disable result paging and return results faster when only a small number of results is needed. See the <a href=\"http://hapifhir.io/doc_jpa.html\">JPA Page</a> for more information."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In certain cases in the JPA server, if multiple threads all attempted to update the same resource simultaneously, the optimistic lock failure caused a \"gap\" in the history numbers to occur. This would then cause a mysterious failure when trying to update this resource further. This has been resolved."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA Server search/history results now set the ID of the returned Bundle to the ID of the search, meaning that if a search returns results from the Query cache, it will reuse the ID of the previously returned Bundle"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix a NullPointerException when validating a Bundle (in DSTU3/R4) with no <code>Bundle.type</code> value"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server transaction operation (DSTU3/R4) did not correctly process the If-Match header when passed in via <code>Bundle.entry.request.ifMatch</code> value"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "In Apache client, remove a log message at WARN level when the response does not specify a charset. This log line often showed up any time a server was not supplying a response, making client logs quite noisy"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new configuration item has been added to the JPA server DaoConfig called <code>getCountSearchResultsUpTo()</code> . This setting governs how many search results the search coordinator should try to find before returning an initial search response to the user, which has an effect on whether the <code>Bundle.total</code> field is always populated in search responses. This has now been set to 20000 on out public server (fhirtest.uhn.ca) so most search results should now include a total."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Remove a bunch of exceptions in the org.hl7.fhir.exception package from the hapi-fhir-base module, as they were also duplicated in the hapi-fhir-utilities module."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The DSTU2 XhtmlDt type has been modified so that it no longer uses the StAX XMLEvent type as its internal model, and instead simply uses a String. New methods called \"parse\" and \"encode\" have been added to HAPI FHIR's XmlUtil class, which can be used to convert between a String and an XML representation. This should allow HAPI FHIR to run in environments where StAX is not available, such as Android phones."
|
||||
- item:
|
||||
issue: "761"
|
||||
type: "add"
|
||||
title: "Restored the <code>org.hl7.fhir.r4.model.codesystem.*</code> classes (which are Java Enums for the various FHIR codesystems). These were accidentally removed in HAPI FHIR 3.0.0. Thanks to GitHub user @CarthageKing for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The resource Profile Validator has been enhanced to not try to validate bound fields where the binding strength is \"example\", and a crash was resolved when validating QuestionnaireResponse answers with a type of \"choice\" where the choice was bound to a ValueSet."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Remove the fake \"Test\" resource from DSTU2 structures. This was not a real resource type, and caused conflicts with the .NET client. Thanks to Vlad Ignatov for reporting!"
|
||||
- item:
|
||||
issue: "720"
|
||||
type: "fix"
|
||||
title: "Parsing a DSTU3/R4 custom structure which contained a field of a custom type caused a crash during parsing. Thanks to GitHub user @mosaic-hgw for reporting!"
|
||||
- item:
|
||||
issue: "711"
|
||||
type: "add"
|
||||
title: "Client logic for checking the version of the connected server to ensure it is for the correct version of FHIR now includes a check for R4 servers. Thanks to Clayton Bodendein for the pull request, including a number of great tests!"
|
||||
- item:
|
||||
issue: "714"
|
||||
type: "add"
|
||||
title: "JAX-RS client framework now supports the ability to register your own JAX-RS Component Classes against the client, as well as better documentation about thread safety. Thanks to Sébastien Rivière for the pull request!"
|
||||
- item:
|
||||
issue: "717"
|
||||
type: "fix"
|
||||
title: "Processing of the If-Modified-Since header on FHIR read operations was reversed, returning a 304 when the resource had been modified recently. Thanks to Michael Lawley for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add <code>Prefer</code> and <code>Cache-Control</code> to the list of headers which are declared as being acceptable for CORS requests in CorsInterceptor, CLI, and JPA Example. Thanks to Patrick Werner for the pull request!"
|
||||
- item:
|
||||
issue: "725"
|
||||
type: "fix"
|
||||
title: "DSTU2-hl7org and DSTU2.1 structures did not copy resource IDs when invoking copyValues(). Thanks to Clayton Bodendein for the pull request!"
|
||||
- item:
|
||||
issue: "734"
|
||||
type: "fix"
|
||||
title: "When encoding a Binary resource, the Binary.securityContext field was not encoded correctly. Thanks to Malcolm McRoberts for the pull request with fix and test case!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Bundle resources did not have their version encoded when serializing in FHIR resource (XML/JSON) format."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The Binary resource endpoint now supports the <code>X-Security-Context</code> header when reading or writing Binary contents using their native Content-Type (i.e exchanging the raw binary with the server, as opposed to exchanging a FHIR resource)."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When paging through multiple pages of search results, if the client had requested a subset of resources to be returned using the <code>_elements</code> parameter, the elements list was lost after the first page of results. In addition, elements will not remove elements from search/history Bundles (i.e. elements from the Bundle itself, as opposed to elements in the entry resources) unless the Bundle elements are explicitly listed, e.g. <code>_include=Bundle.total</code> . Thanks to @parisni for reporting!"
|
||||
- item:
|
||||
issue: "743"
|
||||
type: "add"
|
||||
title: "Add support for Spring Boot for initializing a number of parts of the library, as well as several examples. See the <a href=\"https://github.com/jamesagnew/hapi-fhir/tree/master/hapi-fhir-spring-boot/hapi-fhir-spring-boot-samples\">Spring Boot samples</a> for examples of how this works. Thanks to Mathieu Ouellet for the contribution!"
|
||||
- item:
|
||||
issue: "747"
|
||||
type: "add"
|
||||
title: "JPA server now has lucene index support moved to separate classes from the entity classes in order to facilitate support for ElasticSearch. Thanks to Jiang Liang for the pull request! Note that any existing JPA projects will need to add an additional property in their Spring config called <code>hibernate.search.model_mapping</code>. See <a href=\"https://github.com/jamesagnew/hapi-fhir/blob/master/hapi-fhir-jpaserver-example/src/main/java/ca/uhn/fhir/jpa/demo/FhirServerConfig.java#L84\">this line</a> in the example project."
|
||||
- item:
|
||||
issue: "755"
|
||||
type: "add"
|
||||
title: "A new client interceptor has been added called AdditionalRequestHeadersInterceptor, which allows a developer to add additional custom headers to a client requests. Thanks to Clayton Bodendein for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "An issue was fixed in JPA server where extensions on primitives which are nestedt several layers deep are lost when resources are retrieved"
|
||||
- item:
|
||||
issue: "756"
|
||||
type: "fix"
|
||||
title: "Conditional deletes in JPA server were incorrectly denied by AuthorizationInterceptor if the delete was permitted via a compartment rule. Thanks to Alvin Leonard for the pull request!"
|
||||
- item:
|
||||
issue: "767"
|
||||
type: "add"
|
||||
title: "JAX-RS server module was not able to generate server CapabilityStatement for some versions of FHIR (DSTU2_HL7ORG, DSTU2_1, or R4). Thanks to Clayton Bodendein for the Pull Request!"
|
||||
- item:
|
||||
issue: "769"
|
||||
type: "add"
|
||||
title: "When a server method throws a DataFormatException, the error will now be converted into an HTTP 400 instead of an HTTP 500 when returned to the client (and a stack trace will now be returned to the client for JAX-RS server if configured to do so). Thanks to Clayton Bodendein for the pull request!"
|
||||
- item:
|
||||
issue: "770"
|
||||
type: "fix"
|
||||
title: "JAX-RS server conformance provider in the example module passed in the server description, server name, and server version in the incorrect order. Thanks to Clayton Bodendein for the pull request!"
|
||||
- item:
|
||||
issue: "774"
|
||||
type: "fix"
|
||||
title: "The learn more links on the website home page had broken links. Thanks to James Daily for the pull request to fix this!"
|
||||
- item:
|
||||
issue: "762"
|
||||
type: "add"
|
||||
title: "Prevent a crash in AuthorizationInterceptor when processing transactions if the interceptor has rules declared which allow resources to be read/written by \"any ID of a given type\". Thanks to GitHub user @dconlan for the pull request!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2017-11-23"
|
|
@ -0,0 +1,46 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Support for custom search parameters has been backported in the JPA server from DSTU3 back to DSTU2. As of this release of HAPI, full support for custom search parameters exists in all supported versions of FHIR."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new set of methods have been added to <code>IServerOperationInterceptor</code> called <code>resourcePreCreate</code> , <code>resourcePreUpdate</code> , and <code>resourcePreDelete</code> . These methods are called within the database transaction (just as the existing methods were) but are invoked prior to the contents being saved to the database. This can be useful in order to allow interceptors to change payload contents being saved."
|
||||
- item:
|
||||
type: "remove"
|
||||
title: "A few redundant and no longer useful methods have been marked as deprecated in <code>IServerInterceptor</code> . If you have implemented custom interceptors you are recommended to migrate to the recommended methods."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new method has been added to RequestDetails called <code>setRequestContents()</code> which can be used by interceptors to modify the request body before it is parsed by the server."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix a crash in JPA server when performing a recursive <code>_include</code> which doesn't actually find any matches."
|
||||
- item:
|
||||
issue: "796"
|
||||
type: "fix"
|
||||
title: "When encoding URL parameter values, HAPI FHIR would incorrectly escape a space (\" \") as a plus (\"+\") insetad of as \"%20\" as required by RFC 3986. This affects client calls, as well as URLs generated by the server (e.g. REST HOOK calls). Thanks to James Daily for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Searching in JPA server using a combination of _content and _id parameters failed. Thanks to Jeff Weyer for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new configuration option has been added to DaoConfig which allows newly created resources to be assigned a UUID by the server instead of a sequential ID"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "An unneccesary column called \"MYHASHCODE\" was added to the HFJ_TAG_DEF table in the JPA server schema"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A few log entries emitted by the JPA server suring every search have been reduced from INFO to DEBUG in order to reduce log noise"
|
||||
- item:
|
||||
issue: "810"
|
||||
type: "fix"
|
||||
title: "Fix an issue in JPA server where updating a resource sometimes caused date search indexes to be incorrectly deleted. Thanks to Kyle Meadows for the pull request!"
|
||||
- item:
|
||||
issue: "808"
|
||||
type: "fix"
|
||||
title: "Servers did not return an ETag if the version was provided on a DSTU3/R4 structure in the getMeta() version field instead of in the getIdElement() ID. Thanks to GitHub user @Chrisjobling for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A bug was fixed in the JPA server when performing a validate operation with a mode of DELETE on a server with referential integrity disabled, the validate operation would delete resource reference indexes as though the delete was actually happening, which negatively affected searching for the resource being validated."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The HAPI FHIR Server framework now has initial support for multitenancy. At this time the support is limited to the server framework (not the client, JPA, or JAX-RS frameworks). See <a href=\"http://hapifhir.io/doc_rest_server.html\">Server Documentation</a> for more information."
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2018-01-13"
|
|
@ -0,0 +1,160 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "This release corrects an inefficiency in the JPA Server, but requires a schema change in order to update. Prior to this version of HAPI FHIR, a CLOB column containing the complete resource body was stored in two tables: HFJ_RESOURCE and HFJ_RES_VER. Because the same content was stored in two places, the database consumed more space than is needed to. <br/><br/> In order to reduce this duplication, the <code>RES_TEXT</code> and <code>RES_ENCODING</code> columns have been <b>dropped</b> from the <code>HFJ_RESOURCE</code> table, and the <code>RES_TEXT</code> and <code>RES_ENCODING</code> columns have been <b>made NULLABLE</b> on the <code>HFJ_RES_VER</code> table. <br/><br/> The following migration script may be used to apply these changes to your database. Naturally you should back your database up prior to making this change. <br/> <code>ALTER TABLE hfj_resource DROP COLUMN res_text;</code><br/> <code>ALTER TABLE hfj_resource DROP COLUMN res_encoding;</code><br/> <code>ALTER TABLE hfj_res_ver ALTER COLUMN res_encoding DROP NOT NULL;</code><br/> <code>ALTER TABLE hfj_res_ver ALTER COLUMN res_text DROP NOT NULL;</code><br/>"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The validation module has been refactored to use the R4 (currently maintained) validator even for DSTU3 validation. This is done by using an automatic converter which converts StructureDefinition/ValueSet/CodeSystem resources which are used as inputs to the validator. This change should fix a number of known issues with the validator, as they have been fixed in R4 but not in DSTU3. This also makes our validator much more maintainable since it is now one codebase."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The version of a few dependencies have been bumped to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Hibernate (JPA): 5.2.10.Final -> 5.2.12.Final</li> <li>Spring (JPA): 5.0.0 -> 5.0.3</li> <li>Thymeleaf (Web Tespage Overlay): 3.0.7.RELEASE -> 3.0.9.RELEASE</li> </ul>"
|
||||
- item:
|
||||
issue: "871"
|
||||
type: "add"
|
||||
title: "A number of HAPI FHIR modules have been converted so that they now work as OSGi modules. Unlike the previous OSGi module, which was a mega-JAR with all of HAPI FHIR in it, this is simply the appropriate OSGi manifest inside the existing JARs. Thanks to John Poth for the Pull Request! <br/><br/> Note that this does not cover all modules in the project. Current support includes: <ul> <li>HAPI-FHIR structures DSTU2, HL7ORGDSTU2, DSTU2.1, DSTU3, R4</li> <li>HAPI-FHIR Resource validation DSTU2, HL7ORGDSTU2, DSTU2.1, DSTU3, R4</li> <li>Apache Karaf features for all the above</li> <li> Integration Tests</li> </ul> Remaining work includes: <ul> <li>HAPI-FHIR Server support</li> <li> HAPI-FHIR narrative support. This might be tricky as Thymeleaf doesn't support OSGi.</li> </ul>"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix a crash in the JSON parser when parsing extensions on repeatable elements (e.g. Patient.address.line) where there is an extension on the first repetition but not on subsequent repetitions of the repeatable primitive. Thanks to Igor Sirkovich for providing a test case!"
|
||||
- item:
|
||||
issue: "832"
|
||||
type: "fix"
|
||||
title: "Fix an issue where the JPA server crashed while attempting to normalize string values containing Korean text. Thanks to GitHub user @JoonggeonLee for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "An issue was solved where it was possible for server interceptors to have both processingCompletedNormally and handleException called if the stream.close() method threw an exception. Thanks to Carlos Eduardo Lara Augusto for investigating!"
|
||||
- item:
|
||||
issue: "831"
|
||||
type: "remove"
|
||||
title: "The <code>@TagListParam</code> annotation has been removed. This annotation had no use after DSTU1 but never got deleted and was misleading. Thanks to Angelo Kastroulis for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new method overload has been added to IServerInterceptor: <code>outgoingResponse(RequestDetails, ResponseDetails, HttpServletRequest, HttpServletResponse)</code> . This new method allows an interceptor to completely replace the resource being returned with a different resource instance, or to modify the HTTP Status Code being returned. All other \"outgoingResponse\" methods have been deprecated and are recommended to be migrated to the new method. This new method (with its RequestDetails and ResponseDetails parameters) should be flexible enough to accommodate future needs which means that this should be the last time we have to change it."
|
||||
- item:
|
||||
issue: "838"
|
||||
type: "fix"
|
||||
title: "The HAPI-FHIR-CLI now explicitly includes JAXB dependencies in its combined JAR file. These were not neccesary prior to Java 9, but the JDK (mercifully) does not include JAXB in the default classpath as of Java 9. This means that it is possible to perform Schematron validation on Java 9. Thanks to John Grimes for reporting and suggesting a fix!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "An experimental interceptor called VersionedApiConverterInterceptor has been added, which automaticaly converts response payloads to a client-specified version according to transforms built into FHIR."
|
||||
- item:
|
||||
issue: "822"
|
||||
type: "fix"
|
||||
title: "Searches which were embedded in a Bundle as a transaction or batch operation did not respect any chained method parameters (e.g. MedicationRequest?medication.code=123). Thanks to @manjusampath for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A few fixes went into the build which should now allow HAPI FHIR to build correctly on JDK 9.0. Currently building is supported on JDK 8.x and 9.x only."
|
||||
- item:
|
||||
issue: "837"
|
||||
type: "fix"
|
||||
title: "Client requests with an <code>Accept</code> header value of <code>application/json</code> will now be served with the non-legacy content type of <code>application/fhir+json</code> instead of the legacy <code>application/json+fhir</code> . Thanks to John Grimes for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fixed a regression in server where a count parameter in the form <code>@Count IntegerType theCount</code> caused an exception if the client made a request with no count parameter included. Thanks to Viviana Sanz for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A bug in the JPA server was fixed where a Subscription incorrectly created without a status or with invalid criteria would cause a crash during startup."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "ResponseHighlightingInterceptor now properly parses _format parameters that include additional content (e.g. <code>_format=html/json;fhirVersion=1.0</code> )"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Stale search deleting routine on JPA server has been adjusted to delete one search per transaction instead of batching 1000 searches per transaction. This should make the deletion logic more tolerant of deleting very large search result sets."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Avoid refreshing the search parameter cache from an incoming client request thread, which caused unneccesary delays for clients."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "An occasional crash in the JPA was fixed when using unique search parameters and updating a resource to no longer match one of these search parameters."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Avoid an endless loop of reindexing in JPA if a SearchParameter is created which indexed the SearchParameter resource itself"
|
||||
- item:
|
||||
issue: "854"
|
||||
type: "add"
|
||||
title: "JPA server now performs temporary/placeholder ID substitution processing on elements in resources which are of type \"URI\" in addition to the current substitution for elements of type \"Reference\". Thanks to GitHub user @t4deon for supplying a testcase!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Deleting a resource from the testpage overlay resulted in an error page after clicking \"delete\", even though the delete succeeded."
|
||||
- item:
|
||||
type: "remove"
|
||||
title: "A number of info level log lines have been reduced to debug level in the JPA server, in order to reduce contention during heavy loads and reduce the amount of noise in log files overall. A typical server should now see far less logging coming from HAPI, at least at the INFO level."
|
||||
- item:
|
||||
issue: "863"
|
||||
type: "fix"
|
||||
title: "JPA server now correctly indexes custom search parameters which have multiple base resource types. Previously, the indexing could cause resources of the wrong type to be returned in a search if a parameter being used also matched that type. Thanks to Dave Carlson for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new IResourceProvider implementation called <code>HashMapResourceProvider</code> has been added. This is a complete resource provider implementation that uses a HashMap as a backing store. This class is probably of limited use in real production systems, but it cam be useful for tests or for static servers with small amounts of data."
|
||||
- item:
|
||||
issue: "872"
|
||||
type: "fix"
|
||||
title: "An issue in the JPA server was corrected where searching using URI search parameters would sometimes not include the resource type in the criteria. This meant, for example, that a search for <code>ValueSet?url=http://foo</code> would also match any CodeSystem resource that happened to also have that URL as the value for the \"url\" search parameter. Thanks to Josh Mandel for reporting and supplying a test case!"
|
||||
- item:
|
||||
issue: "868"
|
||||
type: "add"
|
||||
title: "DateParam class now has equals() and hashCode() implementations. Thanks to Gaetano Gallo for the pull request!"
|
||||
- item:
|
||||
issue: "814"
|
||||
type: "fix"
|
||||
title: "Fix a bug where under certain circumstances, duplicate contained resources could be output by the parser's encode methods. Thanks to Frank Tao for supplying a test case!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The client LoggingInterceptor now includes the number of milliseconds spent performing each call that is logged."
|
||||
- item:
|
||||
issue: "786"
|
||||
type: "add"
|
||||
title: "ReferenceParam has been enhanced to properly return the resource type to user code in a server via the ReferenceType#getResourceType() method if the client has specified a reference parameter with a resource type. Thanks to @CarthageKing for the pull request!"
|
||||
- item:
|
||||
issue: "776"
|
||||
type: "add"
|
||||
title: "An entry has been added to ResourceMetadataKeyEnum which allows extensions to be placed in the resource metadata section in DSTU2 resource (this is possible already in DSTU3+ resources as Meta is a normal model type, but the older structures worked a bit differently. Thanks to GitHub user sjanic for the contribution!"
|
||||
- item:
|
||||
issue: "791"
|
||||
type: "add"
|
||||
title: "An example project has een contributed which shows how to use the CQL framework in a server with HAPI FHIR JPA. Thanks to Chris Schuler for the pull request!"
|
||||
- item:
|
||||
issue: "798"
|
||||
type: "add"
|
||||
title: "A new module has been contributed called hapi-fhir-jpaserver-elasticsearch which adds support for Elasticsearch instead of raw Lucene for fulltext indexing. Testing help on this would be appreciated! Thanks to Jiajing Liang for the pull request!"
|
||||
- item:
|
||||
issue: "800"
|
||||
type: "fix"
|
||||
title: "JAX-RS server now supports R4 and DSTU2_1 FHIR versions, which were previously missing. Thanks to Clayton Bodendein for the pull request!"
|
||||
- item:
|
||||
issue: "806"
|
||||
type: "fix"
|
||||
title: "AuthorizationInterceptor did not correctly handle authorization against against a compartment where the compartment owner was specified as a list of IDs. Thanks to Jiajing Liang for the pull request!"
|
||||
- item:
|
||||
issue: "812"
|
||||
type: "add"
|
||||
title: "REST HOOK subscriptions in the JPA server now support having an empty/missing Subscription.channel.payload value, which is supported according to the FHIR specification. Thanks to Jeff Chung for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA Server Operation Interceptor create/update methods will now no longer be fired if the create/update operation being performed is a no-op (e.g. a conditional create that did not need to perform any action, or an update where the contents didn't actually change)"
|
||||
- item:
|
||||
issue: "879"
|
||||
type: "fix"
|
||||
title: "JPA server sometimes updated resources even though the client supplied an update with no actual changes in it, due to changes in the metadata section being considered content changes. Thanks to Kyle Meadows for the pull request!"
|
||||
- item:
|
||||
issue: "817"
|
||||
type: "add"
|
||||
title: "A new example project has been added called hapi-fhir-jpaserver-dynamic, which uses application/environment properties to configure which version of FHIR the server supports and other configuration. Thanks to Anoush Mouradian for the pull request!"
|
||||
- item:
|
||||
issue: "581"
|
||||
type: "add"
|
||||
title: "A new example project showing the use of JAX-RS Server Side Events has been added. Thanks to Jens Kristian Villadsen for the pull request!"
|
||||
- item:
|
||||
issue: "864"
|
||||
type: "remove"
|
||||
title: "An unneccesary reference to the Javassist library has been removed from the build. Thanks to Łukasz Dywicki for the pull request!"
|
||||
- item:
|
||||
issue: "819"
|
||||
type: "add"
|
||||
title: "Support has been added to the JPA server for the :not modifier. Thanks to Łukasz Dywicki for the pull request!"
|
||||
- item:
|
||||
issue: "877"
|
||||
type: "add"
|
||||
title: "Suport for the :contains string search parameter modifier has been added to the JPA server. Thanks to Anthony Sute for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "All instances of DefaultProfileValidationSupport (i.e. one for each version of FHIR) have been fixed so that they explicitly close any InputStreams they open in order to read the built-in profile resources. Leaving these open caused resource starvation in some cases under heavy load."
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2018-03-29"
|
|
@ -0,0 +1,145 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The version of a few dependencies have been bumped to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Commons-Lang3 (All): 3.6 -> 3.7</li> <li>Hibernate (JPA): 5.2.12.Final -> 5.2.16.Final</li> <li>Javassist (JPA): 3.20.0-GA -> 3.22.0-GA</li> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Several enhancements have been made to the JPA server index tables. These enhancements consist of new colums that will be used in a future version of HAPI FHIR to significantly decrease the amount of space required for indexes on token and string index types. <br/><br/> These new columns are not yet used in HAPI FHIR 3.4.0 but will be enabled in HAPI FHIR 3.5.0. Anyone upgrading to HAPI FHIR 3.4.0 (or above) is recommended to invoke the following SQL statement on their database in order to reindex all data in a background job: <br/> <code>update HFJ_RESOURCE set SP_INDEX_STATUS = null;</code> <br/> Note that if you do this reindex now, you will not have any downtime while you upgrade to HAPI FHIR 3.5.0. If you need to perform the reindex at the time that you upgrade to HAPI FHIR 3.5.0 some indexes may not be available. <br/> In addition, the following schema changes should be made while upgrading: <br/> <code>update table TRM_CODESYSTEM_VER drop column RES_VERSION_ID;</code><br/> <code>alter table TRM_CODESYSTEM_VER drop constraint IDX_CSV_RESOURCEPID_AND_VER</code><br/>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "R4 structures have been updated to the latest definitions (SVN 13732)"
|
||||
- item:
|
||||
issue: "846"
|
||||
type: "fix"
|
||||
title: "When calling a getter on a DSTU3/R4 structure for a choice type (e.g. Observation#getValueString()), a NullPointerException was thrown if there was no value in this field, and the NPE had no useful error message. Now this method call will simply return null. method"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When performing a FHIR resource update in the JPA server where the update happens within a transaction, and the resource being updated contains placeholder IDs, and the resource has not actually changed, a new version was created even though there was not actually any change. This particular combination of circumstances seems very specific and improbable, but it is quite common for some types of solutions (e.g. mapping HL7v2 data) so this fix can prevent significant wasted space in some cases."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA server index tables did not have a column length specified on the resource type column. This caused the default of 255 to be used, which wasted a lot of space since resource names are all less than 30 chars long and a single resource can have 10-100+ index rows depending on configuration. This has now been set to a much more sensible 30."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The LOINC uploader for the JPA Terminology Server has been significantly beefed up so that it now takes in the full set of LOINC distribution artifacts, and creates not only the LOINC CodeSystem but a complete set of concept properties, a number of LOINC ValueSets, and a number of LOINC ConceptMaps. This work was sponsored by the Regenstrief Institute. Thanks to Regenstrief for their support!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The DSTU2 validator has been refactored to use the same codebase as the DSTU3/R4 validator (which were harmonized in HAPI FHIR 3.3.0). This means that we now have a single codebase for all validators, which improves maintainability and brings a number of improvements to the accuracy of DSTU2 resource validation."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When encoding a resource that had contained resources with user-supplied local IDs (e.g. resource.setId(\"#1\")) as well as contained resources with no IDs (meaning HAPI should automatically assign a local ID for these resources) it was possible for HAPI to generate a local ID that already existed, making the resulting serialization invalid. This has been corrected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The REST Generic Client now supports invoking an operation on a specific version of a resource instance."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new operation has been added to the JPA server called \"$expunge\". This operation can be used to physically delete old versions of resources, logically deleted resources, or even all resources in the database."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "An experimental new feature has been added to AuthorizationInterceptor which allows user-supplied checkers to add additional checking logic to determine whether a particular rule applies. This could be used for example to restrict an auth rule to particular source IPs, or to only allow operations with specific parameter values."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new qualifier has been added to the AuthorizationInterceptor RuleBuilder that allows a rule on an operation to match <code>atAnyLevel()</code> , meaning that the rule applies to the operation by name whether it is at the server, type, or instance level."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Calling <code>IdType#withVersion(String)</code> with a null/blank parameter will now return a copy of the ID with the version removed. Previously this call would deliberately cause an IllegalArgumentException."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When updating resources on the JPA server, tags did not always consistently follow FHIR's recommended rules for tag retention. According to FHIR's rules, if a tag is not explicitly present on an update but was present on the previous version, it should be carried forward anyhow. Due to a bug, this happened when more than one tag was present but not when only one was present. This has been corrected. In addition, a new request header called <code>X-Meta-Snapshot-Mode</code> has been added that can be used by the client to override this behaviour."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The JPA server's resource counts query has been optimized to give the database a bit more flexibility to optimize, which should increase performance for this query."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server CapabilityStatement generator has been tuned so that resource counts are no longer calculated synchronously as a part of building the CapabilityStatement response. With this change, counts are calculated in the background and cached which can yield significant performance improvements on hevaily loaded servers."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix a significant performance regression in 3.3.0 when validating DSTU3 content using the InstanceValidator. From 3.3.0 onward, StructureDefinitions are converted to FHIR R4 content on the fly in order to reduct duplication in the codebase. These conversions happened upon every validation however, instead of only happening once which adversely affected performance. A cache has been added."
|
||||
- item:
|
||||
issue: "903"
|
||||
type: "add"
|
||||
title: "Fix a bug in the DSTU2 QuestionnaireResponseValidator which prevented validation on groups with only one question. Thanks David Gileadi for the pull request!"
|
||||
- item:
|
||||
issue: "709"
|
||||
type: "add"
|
||||
title: "The <code>ConceptMap</code> operation <code>$translate</code> has been implemented."
|
||||
- item:
|
||||
issue: "927"
|
||||
type: "add"
|
||||
title: "HAPI-FHIR_CLI now includes two new commands: one for importing and populating a <code>ConceptMap</code> resource from a CSV; and one for exporting a <code>ConceptMap</code> resource to a CSV."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Operation methods on a plain server may now use parameters of type String (i.e. plain Java strings), and any FHIR primitive datatype will be automatically coerced into a String."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The HAPI FHIR CLI now supports importing an IGPack file as an import to the validation process."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When two threads attempt to update the same resource at the same time, previously an unspecified error was thrown by the JPA server. An HTTP 409 (Conflict) with an informative error message is now thrown."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A bug in the JPA server's DSTU2 transaction processing routine caused it to occasionally consume two database connections, which could lead to deadlocks under heavy load. This has been fixed."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "AuthorizationInterceptor sometimes incorrectly identified an operation invocation at the type level as being at the instance level if the method indicated that the IdParam parameter was optional. This has been fixed."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "StructureDefinitions for the FHIR standard extensions have been added to the hapi-fhir-validation-resources-XXXX modules. Thanks to Patrick Werner for the pull request! These have also been added to the list of definitions uploaded by the CLI \"upload-definitions\" command."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A workaround for an invalid search parameter path in the R4 consent resource has been implemented. This path was preventing some Consent resources from successfully being uploaded to the JPA server. Thanks to Anthony Sute for identifying this."
|
||||
- item:
|
||||
issue: "937"
|
||||
type: "fix"
|
||||
title: "A hard-to-understand validation message was fixed in the validator when validating against profiles that declare some elements as mustSupport but have others used but not declared as mustSupport. Thanks to Patrick Werner for the PR!"
|
||||
- item:
|
||||
issue: "926"
|
||||
type: "add"
|
||||
title: "The HAPI FHIR CLI is now available for installation on OSX using the (really excellent) Homebrew package manager thanks to an effort by John Grimes to get it added. Thanks John!"
|
||||
- item:
|
||||
issue: "953"
|
||||
type: "add"
|
||||
title: "When the REST Server experiences an expected error (such as a NullPointerException) in a resource provider class, a simple message of \"Failed to call access method\" is returned to the user. This has been enhanced to also include the message from the underlying exception."
|
||||
- item:
|
||||
issue: "836"
|
||||
type: "fix"
|
||||
title: "A bug in the plain server was fixed that prevented some includes from correctly causing their targets to be included in the response bundle. Thanks to GitHub user @RuthAlk for the pull request!"
|
||||
- item:
|
||||
issue: "857"
|
||||
type: "add"
|
||||
title: "DateRangeParameter was enhanced to support convenient method chanining, and the parameter validation was improved to only change state after validating that parameters were valid. Thanks to Gaetano Gallo for the pull request!"
|
||||
- item:
|
||||
issue: "867"
|
||||
type: "fix"
|
||||
title: "The HumanName DSTU3+ datatype had convenience methods for testing whether the name has a specific given name or not, but these methods did not work. Thanks to Jason Owen for reporting and providing a test case!"
|
||||
- item:
|
||||
issue: "874"
|
||||
type: "fix"
|
||||
title: "An issue was corrected in the validator where Questionnaire references that used contained resources caused an unexpected crash. Thanks to Heinz-Dieter Conradi for the pull request!"
|
||||
- item:
|
||||
issue: "875"
|
||||
type: "add"
|
||||
title: "An issue in the narrative generator template for the CodeableConcept datatype was corrected. Thanks to @RuthAlk for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server automatic reindexing process has been tweaked so that it no longer runs once per minute (this was a heavy strain on large databases) but will instead run once an hour unless triggered for some reason. In addition, the number of threads allocated to reindexing may now be adjusted via a setting in the DaoConfig."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "AuthorizationInterceptor did not correctly grant access to resources by compartment when the reference on the target resource that pointed to the compartment owner was defined using a resource object (ResourceReference#setResource) instead of a reference (ResourceReference#setReference)."
|
||||
- item:
|
||||
issue: "880"
|
||||
type: "add"
|
||||
title: "Several tests were added to ensure accurate validation of QuestionnaireResponse resources. Thanks to Heinz-Dieter Conradi for the pull request!"
|
||||
- item:
|
||||
issue: "886"
|
||||
type: "add"
|
||||
title: "A NullPointerException when validating some QuestionnaireResponse reousrces was fixed in the validator. Thanks to Heinz-Dieter Conradi for the pull request!"
|
||||
- item:
|
||||
issue: "892"
|
||||
type: "add"
|
||||
title: "QuestionnaireResponse answers of type \"text\" may now be validated by the FhirInstanceValidator. Thanks to Heinz-Dieter Conradi for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The REST server has been modified so that the <code>Location</code> header is no longer returned by the server on read or update responses. This header was returned in the past, but this header is actually inappropriate for any response that is not a create operation. The <code>Content-Location</code> will still be returned, and will hold the same contents."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The Postgres sample JPA project was fixed to use the current version of HAPI FHIR (it was previously stuck on 2.2). Thanks to Kai Liu for the pull request!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2018-05-28"
|
|
@ -0,0 +1,175 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "HAPI FHIR now supports JDK 9 and JDK 10, both for building HAPI FHIR as well as for use. JDK 8 remains supported and is the minimum requirement in order to build or use HAPI FHIR."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new command has been added to the HAPI FHIR CLI tool: \"migrate-database\". This command performs the schema modifications required when upgrading HAPI FHIR JPA to a new version (previously this was a manual process involving running scripts and reindexing everything). <br/><br/> See the <a href=\"http://hapifhir.io/doc_cli.html#migrate-database\">command documentation</a> for more information on how to use this tool. Please post in the HAPI FHIR Google Group if you run into issues, as this is a brand new framework and we still need lots of help with testing."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The version of a few dependencies have been bumped to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Gson (JSON Parser): 2.8.1 -> 2.8.5</li> <li>Spring Framework (JPA): 5.0.3.RELEASE -> 5.0.8.RELEASE</li> <li>Hibernate ORM (JPA): 5.2.16.Final -> 5.3.6.Final</li> <li>Hibernate Search (JPA): 5.7.1.Final -> 5.10.3.Final</li> <li>Jetty (CLI): 9.4.8.v20171121 -> 9.4.12.v20180830</li> <li>Commons-Codec (All): 1.10 -> 1.11</li> <li>Commons-Lang (All): 3.7 -> 3.8</li> <li>Commons-IO (All): 2.5 -> 2.6</li> <li>Spring-Data (JPA): 1.11.6.RELEASE -> 2.0.7.RELEASE</li> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new mnandatory library depdendency has been added to hapi-fhir-base, meaning that all applications using HAPI FHIR must import ti: commons-text. This library has been added as a few utility methods used by HAPI FHIR that were formerly in the commons-lang3 project have been moved into commons-text. This library has been added as a non-optional dependency in the hapi-fhir-base POM, so Maven/Gradle users should not have to make any changes."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server now has a configuration item in the DaoConfig to specify which bundle types may be stored as-is on the /Bundle endpoint. By default the following types are allowed: collection, document, message."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "CapabilityStatements generated by the server module will now include the server base URL in the <code>CapabilityStatement.implementation.url</code> field."
|
||||
- item:
|
||||
issue: "974"
|
||||
type: "add"
|
||||
title: "Spring-data (used by the JPA server) has been upgraded to version 2.0.7 (from version 1.11.6). Thanks to Roman Doboni for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A crash in the validator was fixed: Validating a Bundle that did not have Bundle.fullUrl populated could cause a NullPointerException."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "AuthorizationInterceptor now examines requests more closely in order to block requests early that are not possibly going to return allowable results when compartment rules are used. For example, if an AuthorizationInterceptor is configured to allow only <b>read</b> access to compartment <code>Patient/123</code> , a search for <code>Observation?subject=987</code> will now be blocked before the method handler is called. Previously the search was performed and the results were examined in order to determine whether they were all in the appropriate compartment, but this incurs a performance cost, and means that this search would successfully return an empty Bundle if no matches were present. <br/><br/> A new setting on AuthorizationInterceptor called <code>setFlags(flags)</code> can be used to maintain the previous behaviour."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server loading logic has been improved to enhance performance when loading a large number of results in a page, or when loading multiple search results with tags. Thanks to Frank Tao for the pull request! This change was introduced as a part of a collaboration between HAPI FHIR and the US National Institiutes for Health (NIH)."
|
||||
- item:
|
||||
issue: "1010"
|
||||
type: "fix"
|
||||
title: "Resource loading logic for the JPA server has been optimized to reduce the number of database round trips required when loading search results where many of the entries have a \"forced ID\" (an alphanumeric client-assigned resource ID). Thanks to Frank Tao for the pull request! This change was introduced as a part of a collaboration between HAPI FHIR and the US National Institiutes for Health (NIH)."
|
||||
- item:
|
||||
issue: "1000"
|
||||
type: "add"
|
||||
title: "LOINC uploader has been updated to support the new LOINC filename scheme introduced in LOINC 2.64. Thanks to Rob Hausam for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "In the JPA server, it is now possible for a custom search parameter to use the <code>resolve()</code> function in its path to descend into contained resources and index fields within them."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new IValidationSupport implementation has been added, named CachingValidationSupport. This module wraps another implementation and provides short-term caching. This can have a dramatic performance improvement on servers that are validating or executing FHIRPath repeatedly under load. This module is used by default in the JPA server."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "An index in the JPA server on the HFJ_FORCED_ID table was incorrectly not marked as unique. This meant that under heavy load it was possible to create two resources with the same client-assigned ID."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The JPA server <code>$expunge</code> operation deleted components of an individual resource record in separate database transactions, meaning that if an operation failed unexpectedly resources could be left in a weird state. This has been corrected."
|
||||
- item:
|
||||
issue: "1015"
|
||||
type: "fix"
|
||||
title: "A bug was fixed in the JPA terminology uploader, where it was possible in some cases for some ValueSets and ConceptMaps to not be saved because of a premature short circuit during deferred uploading. Thanks to Joel Schneider for the pull request!"
|
||||
- item:
|
||||
issue: "969"
|
||||
type: "fix"
|
||||
title: "A bug in the HAPI FHIR CLI was fixed, where uploading terminology for R4 could cause an error about the incorrect FHIR version. Thanks to Rob Hausam for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new method has been added to AuthorizationInterceptor that can be used to create rules allowing FHIR patch operations. See <a href=\"http://hapifhir.io/doc_rest_server_security.html#Authorizing_Patch_Operations\">Authorizing Patch Operations</a> for more information."
|
||||
- item:
|
||||
issue: "1018"
|
||||
type: "add"
|
||||
title: "A new view has been added to the JPA server, reducing the number of database calls required when reading resources back. This causes an improvement in performance. Thanks to Frank Tao for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A crash was fixed when deleting a ConceptMap resource in the JPA server. This crash was a regression in HAPI FHIR 3.4.0."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A crash in the JPA server when performing a manual reindex of a deleted resource was fixed."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Using the generic/fluent client, it is now possible to invoke the $process-message method using a standard client.operation() call. Previously this caused a strange NullPointerException."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The REST Server now sanitizes URL path components and query parameter names to escape several reserved characters (e.g. \" and <) in order to prevent HTML injection attacks via maliciously crafted URLs."
|
||||
- item:
|
||||
issue: "912"
|
||||
type: "add"
|
||||
title: "The generic/fluent client now supports the :contains modifier on string search params. Thanks to Clayton Bodendein for the pull request!"
|
||||
- item:
|
||||
issue: "996"
|
||||
type: "fix"
|
||||
title: "The HAPI FHIR Server has been updated to correctly reflect the current FHIR specification behaviour for the Prefer header. This means that the server will no longer return an OperationOutcome by default, but that one may be requested via a Prefer header, using the newly implemented \"Repreentation: OperationOutcome\" value. Thanks to Ana Maria Radu for the pul request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The REST Server module now allows more than one Resource Provider (i.e. more than one implementation of IResourceProvider) to be registered to the RestfulServer for the same resource type. Previous versions of HAPI FHIR have always limited support to a single resource provider, but this limitation did not serve any purpose so it has been removed."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The HashMapResourceProvider now supports the type and instance history operations. In addition, the search method for the <code>_id</code> search parameter now has the search parameter marked as \"required\". This means that additional search methods can be added in subclasses without their intended searches being routed to the searchById method. Also, the resource map now uses a LinkedHashMap, so searches return a predictable order for unit tests."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fixed a bug when creating a custom search parameter in the JPA server: if the SearchParameter resource contained an invalid expression, create/update operations for the given resource would fail with a cryptic error. SearchParameter expressions are now validated upon storage, and the SearchParameter will be rejected if the expression can not be processed."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The generic client history operations (history-instance, history-type, and history-server) now support the <code>_at</code> parameter."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "In the plain server, many resource provider method parameters may now use a generic <code>IPrimitiveType<String></code> or <code>IPrimitiveType<Date></code> at the parameter type. This is handy if you are trying to write code that works across versions of FHIR."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Several convenience methods have been added to the fluent/generic client interfaces. These methods allow the adding of a sort via a SortSpec object, as well as specifying search parameters via a plain Map of Strings."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new client interceptor called ThreadLocalCapturingInterceptor has been added. This interceptor works the same way as CapturingInterceptor in that it captures requests and responses for later processing, but it uses a ThreadLocal object to store them in order to facilitate use in multithreaded environments."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new constructor has been added to the client BasicAuthInterceptor allowing credentials to be specified in the form \"username:password\" as an alternate to specifying them as two discrete strings."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "SimpleBundleProvider has been modified to optionally allow calling code to specify a search UUID, and a field to allow the preferred page size to be configured."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server search UUID column has been reduced in length from 40 chars to 36, in order to align with the actual length of the generated UUIDs."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Plain servers using paging may now specify an ID/name for individual pages being returned, avoiding the need to respond to arbitrary offset/index requests from the server. In this mode, page links in search result bundles simply include the ID to the next page."
|
||||
- item:
|
||||
issue: "965"
|
||||
type: "fix"
|
||||
title: "An issue was fixed in BundleUtil#toListOfEntries, where sometimes a resource could be associated with the wrong entry in the response. Thanks to GitHub user @jbalbien for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA subscription delivery queues no longer store the resource body in the queue (only the ID), which should reduce the memory/disk footprint of the queue when it grows long."
|
||||
- item:
|
||||
issue: "1053"
|
||||
type: "fix"
|
||||
title: "A bug was fixed in JPA server searches: When performing a search with a _lastUpdate filter, the filter was applied to any _include values, which it should not have been. Thanks to Deepak Garg for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When performing a ConceptMap/$translate operation with reverse=\"true\" in the arguments, the equivalency flag is now set on the response just as it is for a non-reverse lookup."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When executing a FHIR transaction in JPA server, if the request bundle contains placeholder IDs references (i.e. \"urn:uuid:*\" references) that can not be resolved anywhere else in the bundle, a user friendly error is now returned. Previously, a cryptic error containing only the UUID was returned. As a part of this change, transaction processing has now been consolidated into a single codebase for DSTU3 / R4 (and future) versions of FHIR. This should greatly improve maintainability and consistency for transaction processing."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "ResponseHighlighterInterceptor now displays the total size of the output and an estimate of the transfer time at the bottom of the response."
|
||||
- item:
|
||||
issue: "1022"
|
||||
type: "add"
|
||||
title: "The Prefer header is now honoured for HTTP PATCH requests. Thanks to Alin Leonard for the Pull Request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The <code>Composition</code> operation <code>$document</code> has been implemented. Thanks to Patrick Werner for the Pull Request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "HAPI FHIR CLI commands that allow Basic Auth credentials or a Bearer Token may now use a value of \"PROMPT\" to cause the CLI to prompt the user for credentials using an interactive prompt."
|
||||
- item:
|
||||
type: "remove"
|
||||
title: "The experimental \"dynamic mode\" for search parameter registration has been removed. This mode was never published or documented and was labelled as experimental, so I am hoping it was never depended on by anyone. Please post on the HAPI FHIR mailing list if this change affects you."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A crash was fixed when using the ConceptMap/$translate operation to translate a mapping where the equivalence was not specified."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The maximum length for codes in the JPA server terminology service have been increased to 500 in order to better accomodate code systems with very long codes."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A bug in the DSTU3 validator was fixed where validation resources such as StructureDefinitions and Questionnaires were cached in a cache that never expired, leading to validations against stale versions of resources."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In the REST server, if an incoming request has the Content-Encoding header, the server will not try to read request parameters from the content stream. This avoids an incompatibility with new versions of Jetty."
|
||||
- item:
|
||||
issue: "1050"
|
||||
type: "fix"
|
||||
title: "Custom profile names when not matching standard FHIR profile names, are now handled properly by the validator. Thanks to Anthony Sute for the Pull Request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server now performs a count query instead of a more expensive data query when searches using <code>_summary=count</code> . This means that a total will always be returned in the Bundle (this isn't always guaranteed otherwise, since the Search Controller can result in data being returned before the total number of results is known)."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server SearchCoordinator now prefetches only a smaller and configurable number of results during the initial search request, and more may be requested in subsequent page requests. This change may have a significant improvement on performance: in previous versions of HAPI FHIR, even if the user only wanted the first page of 10 results, many many more might be prefetched, consuming database resources and server time."
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "2018-09-17"
|
|
@ -0,0 +1,97 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The version of a few dependencies have been bumped to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Karaf (OSGi): 4.1.4 -> 4.1.6</li> <li>Commons-Compress (JPA): 1.14 -> 1.18</li> <li>Jackson (JPA): 2.9.2 -> 2.9.7</li> </ul>"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A bug in the JPA migration tasks from 3.4.0 to 3.5.0 caused a failure if the HFJ_SEARCH_PARM table did not exist. This table existed in previous versions of HAPI FHIR but was dropped in 3.5.0, meaning that migrations would fail if the database was created using a snapshot version of 3.5.0."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Automatic ID generation for contained resources (in cases where the user hasn't manually specified an ID) has been streamlined to generate more predictable IDs in some cases."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "An issue in the HAPI FHIR CLI database migrator command has been resolved, where some database drivers did not automatically register and had to be manually added to the classpath."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The module which deletes stale searches has been modified so that it deletes very large searches (searches with 10000+ results in the query cache) in smaller batches, in order to avoid having very long running delete operations occupying database connections for a long time or timing out."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When invoking an operation using the fluent client on an instance, the operation would accidentally invoke against the server if the provided ID did not include a type. This has been corrected so that an IllegalArgumentException is now thrown."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new operation has been added to the JPA server called <code>$trigger-subscription</code> . This can be used to cause a transaction to redeliver a resource that previously triggered. See <a href=\"https://smilecdr.com/docs/current/fhir_repository/subscription.html#manually-triggering-subscriptions\">this link</a> for a description of how this feature works. Note that you must add the SubscriptionRetriggeringProvider as shown in the sample project <a href=\"https://github.com/hapifhir/hapi-fhir-jpaserver-starter/blob/master/src/main/java/ca/uhn/fhir/jpa/demo/JpaServerDemo.java\">here</a>."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When operating in R4 mode, the HAPI FHIR server will now populate Bundle.entry.response for history and search results, which is did not previously do."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA database migrator tool has been enhanced so that it now supports migrations from HAPI FHIR 3.3.0 to HAPI FHIR 3.4.0 / 3.5.0+ as well."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When using the HAPI FHIR CLI, user-prompted passwords were not correctly encoded, meaning that the \"--basic-auth PROMPT\" action was not usable. This has been corrected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server SearchCoordinator has been refactored to make searches more efficient: When a search is performed, the SearchCoordinator loads multiple pages of results even if the user has only requested a small number. This is done in order to prevent needing to re-run the search for every page of results that is loaded. In previous versions of HAPI FHIR, when a search was made the SearchCoordinator would prefetch as many results as the user could possibly request across all pages (even if this meant prefetching thousands or millions of resources). As of this version, a new option has been added to DaoConfig that specifies how many resources to prefetch. This can have a significant impact on performance for servers with a large number of resources, where users often only want the first page of results. See <code>DatConfig#setSearchPreFetchThresholds()</code> for configuration of this feature."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When performing a JPA server using a date parameter, if a time is not specified in the query URL, the date range is expanded slightly to include all possible timezones where the date that could apply. This makes the search slightly more inclusive, which errs on the side of caution."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A bug was fixed in the JPA server $expunge operation where a database connection could sometimes be opened and not returned to the pool immediately, leading to pool starvation if the operation was called many times in a row."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new setting has been added to the JPA server DaoConfig that causes the server to keep certain searches \"warm\" in the cache. This means that the search will be performed periodically in the background in order to keep a reasonably fresh copy of the results in the query cache."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When using the testpage overlay to delete a resource, currently a crash can occur if an unqualified ID is placed in the ID text box. This has been corrected."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "AuthorizationInterceptor did not allow FHIR batch operations when the transaction() permission is granted. This has been corrected so that transaction() allows both batch and transaction requests to proceed."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server now automatically supplies several appropriate hibernate performance settings as long as the JPA EntityManagerFactory was created using HAPI FHIR's built-in method for creating it. <br/><br/> Existing JPA projects should consider using <code>super.entityManagerFactory()</code> as shown in <a href=\"https://github.com/hapifhir/hapi-fhir-jpaserver-starter/blob/master/src/main/java/ca/uhn/fhir/jpa/demo/FhirServerConfig.java#L62\">the example project</a> if they are not already."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The FhirTerser <code>getValues(...)</code> methods have been overloaded. The terser can now be used to create a null-valued element where none exists. Additionally, the terser can now add a null-valued extension where one or more such extensions already exist. These changes allow better population of FHIR elements provided an arbitrary FHIR path."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The FhirTerser <code>getValues(...)</code> methods were not properly handling modifier extensions for verions of FHIR prior to DSTU3. This has been corrected."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When updating resources in the JPA server, a bug caused index table entries to be refreshed sometimes even though the index value hadn't changed. This issue did not cause incorrect search results but had an effect on write performance. This has been corrected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The @Operation annotation used to declare operations on the Plain Server now has a wildcard constant which may be used for the operation name. This allows you to create a server that supports operations that are not known to the server when it starts up. This is generally not advisable but can be useful for some circumstances."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When using an @Operation method in the Plain Server, it is now possible to use a parameter annotated with @ResourceParam to receive the Parameters (or other) resource supplied by the client as the request body."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server version migrator tool now runs in a multithreaded way, allowing it to upgrade th database faster when migration tasks require data updates."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A bug in the JPA server was fixed: When a resource was previously deleted, a transaction could not be posted that both restored the deleted resource but also contained references to the now-restored resource."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The $expunge operation could sometimes fail to delete resources if a resource to be deleted had recently been returned in a search result. This has been corrected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new setting has been added to the JPA Server DopConfig that controls the behaviour when a client-assigned ID is encountered (i.e. the client performs an HTTP PUT to a resource ID that doesn't already exist on the server). It is now possible to disallow this action, to only allow alphanumeric IDs (the default and only option previously) or allow any IDs including alphanumeric."
|
||||
- item:
|
||||
issue: "1103"
|
||||
type: "add"
|
||||
title: "It is now possible to use your own IMessageResolver instance in the narrative generator. Thanks to Ruth Alkema for the pull request!"
|
||||
- item:
|
||||
issue: "1071"
|
||||
type: "fix"
|
||||
title: "When restful reponses tried to return multiple instances of the same response header, some instances were discarded. Thanks to Volker Schmidt for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The REST client now allows for configurable behaviour as to whether a <code>_format</code> parameter should be included in requests."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA server R4 SearchParameter custom expression validation is now done using the actual FHIRPath evaluator, meaning it is more rigorous in what it can find."
|
||||
- item:
|
||||
issue: "1047"
|
||||
type: "fix"
|
||||
title: "A NullPointerException in DateRangeParam when a client URL conrtained a malformed date was corrected. Thanks Heinz-Dieter Conradi for the Pull Request!"
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
release-date: "2018-11-12"
|
||||
codename: "Food"
|
|
@ -0,0 +1,198 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "HAPI FHIR is now built using OpenJDK 11. Users are recommended to upgrade to this version of Java if this is feasible. We are not yet dropping support for Java 8 (aka 1.8), but users are recommended to upgrade if possible."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The version of a few dependencies have been bumped to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Spring (JPA): 5.0.8.RELEASE -> 5.1.3.RELEASE</li> <li>Spring-Data (JPA): 2.0.7.RELEASE -> 2.1.3.RELEASE</li> <li>Hibernate-Core (JPA): 5.3.6.FINAL -> 5.4.1.FINAL</li> <li>Hibernate-Search (JPA): 5.10.3.FINAL -> 5.11.1.FINAL</li> <li>Thymeleaf (JPA): 3.0.9.RELEASE -> 3.0.11.RELEASE</li> <li>thymeleaf-spring4 (Testpage Overlay) has been replaced with thymeleaf-spring5</li> <li>Commons-Lang3: 3.8 -> 3.8.1</li> <li>Commons-Text: 1.4 -> 1.4</li> <li>Spring Boot: 1.5.6.RELEASE -> 2.1.1.RELEASE</li> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Changed subscription processing, if the subscription criteria are straightforward (i.e. no chained references, qualifiers or prefixes) then attempt to match the incoming resource against the criteria in-memory. If the subscription criteria can't be matched in-memory, then the server falls back to the original subscription matching process of querying the database. The in-memory matcher can be disabled by setting isEnableInMemorySubscriptionMatching to \"false\" in DaoConfig (by default it is true). If isEnableInMemorySubscriptionMatching is \"false\", then all subscription matching will query the database as before."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "Removed BaseSubscriptionInterceptor and all its subclasses (RestHook, EMail, WebSocket). These are replaced by two new interceptors: SubscriptionActivatingInterceptor that is responsible for activating subscriptions and SubscriptionMatchingInterceptor that is responsible for matching incoming resources against activated subscriptions. Call DaoConfig.addSupportedSubscriptionType(type) to configure which subscription types are supported in your environment. If you are processing subscriptions on a separate server and only want to activate subscriptions on this server, you should set DaoConfig.setSubscriptionMatchingEnabled to false. The helper method SubscriptionInterceptorLoader.registerInterceptors() will check if any subscription types are supported, and if so then load active subscriptions into the SubscriptionRegistry and register the subscription activating interceptor. This method also registers the subscription matching interceptor (that matches incoming resources and sends matches to subscription channels) only if DaoConfig.isSubscriptionMatchingEnabled is true. See https://github.com/jamesagnew/hapi-fhir/wiki/Proposed-Subscription-Design-Change for more details."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "Added support for matching subscriptions in a separate server from the REST Server. To do this, run the SubscriptionActivatingInterceptor on the REST server and the SubscriptionMatchingInterceptor in the standalone server. Classes required to support running a standalone subscription server are in the ca.uhn.fhir.jpa.subscription.module.standalone package. These classes are excluded by default from the JPA ApplicationContext (that package is explicitly filtered out in the BaseConfig.java @ComponentScan)."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Changed behaviour of FHIR Server to reject subscriptions with invalid criteria. If a Subscription is submitted with invalid criteria, the server returns HTTP 422 \"Unprocessable Entity\" and the Subscription is not persisted."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The JPA server $expunge operation could sometimes fail to expunge if another resource linked to a resource that was being expunged. This has been corrected. In addition, the $expunge operation has been refactored to use smaller chunks of work within a single DB transaction. This improves performance and reduces contention when performing large expunge workloads."
|
||||
- item:
|
||||
issue: "1117"
|
||||
type: "add"
|
||||
title: "A badly formatted log message when handing exceptions was cleaned up. Thanks to Magnus Watn for the pull request!"
|
||||
- item:
|
||||
issue: "944"
|
||||
type: "fix"
|
||||
title: "A NullPointerException has been fixed when using custom resource classes that have a @Block class as a child element. Thanks to Lars Gram Mathiasen for reporting and providing a test case!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "AuthorizationInterceptor now allows the GraphQL operation to be authorized. Note that this is an all-or-nothing grant for now, it is not yet possible to specify individual resource security when using GraphQL."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The ResponseHighlighterInterceptor now declines to handle Binary responses provided as a response from extended operations. In other words if the operation $foo returns a Binary resource, the ResponseHighliterInterceptor will not provide syntax highlighting on the response. This was previously the case for the /Binary endpoint, but not for other binary responses."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "FHIR Parser now has an additional overload of the <code>parseResource</code> method that accepts an InputStream instead of a Reader as the source."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "FHIR Fluent/Generic Client now has a new return option called <code>returnMethodOutcome</code> which can be used to return a raw response. This is handy for invoking operations that might return arbitrary binary content."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Moved state and functionality out of BaseHapiFhirDao.java into new classes: LogicalReferenceHelper, ResourceIndexedSearchParams, IdHelperService, SearcchParamExtractorService, and MatchUrlService."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Replaced explicit @Bean construction in BaseConfig.java with @ComponentScan. Beans with state are annotated with @Component and stateless beans are annotated as @Service. Also changed SearchBuilder.java and the three Subscriber classes into @Scope(\"protoype\") so their dependencies can be @Autowired injected as opposed to constructor parameters."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A bug in the JPA resource reindexer was fixed: In many cases the reindexer would mark reindexing jobs as deleted before they had actually completed, leading to some resources not actually being reindexed."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "The JPA stale search deletion service now deletes cached search results in much larger batches (20000 instead of 500) in order to reduce the amount of noise in the logs."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "AuthorizationInterceptor now allows arbitrary FHIR $operations to be authorized, including support for either allowing the operation response to proceed unchallenged, or authorizing the contents of the response."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA Migrator tool enhancements: An invalid SQL syntax issue has been fixed when running the CLI JPA Migrator tool against Oracle or SQL Server. In addition, when using the \"Dry Run\" option, all generated SQL statements will be logged at the end of the run. Also, a case sensitivity issue when running against some Postgres databases has been corrected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "In the JPA server, when performing a chained reference search on a search parameter with a target type of <code>Reference(Any)</code> , the search failed with an incomprehensible error. This has been corrected to return an error message indicating that the chain must be qualified with a resource type for such a field. For example, <code>QuestionnaireResponse?subject:Patient.name=smith</code> instead of <code>QuestionnaireResponse?subject.name=smith</code> ."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The LOINC uploader has been updated to suport the LOINC 2.65 release file format."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The resource reindexer can now detect when a resource's current version no longer exists in the database (e.g. because it was manually expunged), and can automatically adjust the most recent version to account for this."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When updating existing resources, the JPA server will now attempt to reuse/update rows in the index tables if one row is being removed and one row is being added (e.g. because a Patient's name is changing from \"A\" to \"B\"). This has the net effect of reducing the number"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "An issue was corrected with the JPA reindexer, where String index columns do not always get reindexed if they did not have an identity hash value in the HASH_IDENTITY column."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Plain Server ResourceProvider classes are no longer required to be public classes. This limitation has always been enforced, but did not actually serve any real purpose so it has been removed."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new interceptor called ServeMediaResourceRawInterceptor has been added. This interceptor causes Media resources to be served as raw content if the client explicitly requests the correct content type cia the Accept header."
|
||||
- item:
|
||||
issue: "917"
|
||||
type: "add"
|
||||
title: "A new configuration item has been added to the FhirInstanceValidator that allows you to specify additional \"known extension domains\", meaning domains in which the validator will not complain about when it encounters new extensions. Thanks to Heinz-Dieter Conradi for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Under some circumstances, when a custom search parameter was added to the JPA server resources could start reindexing before the new search parameter had been saved, meaning that it was not applied to all resources. This has been corrected."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "In example-projects/README.md and hapi-fhir-jpaserver-example/README.md, incidate that these examples projects are no longer maintained. The README.md points users to a starter project they should use for examples."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "Replaced use of BeanFactory with custom factory classes that Spring @Lookup the @Scope(\"prototype\") beans (e.g. SearchBuilderFactory)."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "Moved e-mail from address configuration from EmailInterceptor (which doesn't exist any more) to DaoConfig."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Added 3 interfaces for services required by the standalone subscription server. The standalone subscription server doesn't have access to a database and so needs to get its resources using a FhirClient. Thus for each of these interfaces, there are two implementations: a Dao implementaiton and a FhirClient implementation. The interfaces thus introduced are ISubscriptionProvider (used to load subscriptions into the SubscriptionRegistry), the IResourceProvider (used to get the latest version of a resource if the \"get latest version\" flag is set on the subscription) and ISearchParamProvider used to load custom search parameters."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "Separated active subscription cache from the interceptors into a new Spring component called the SubscriptionRegistry. This component maintains a cache of ActiveSubscriptions. An ActiveSubscription contains the subscription, it's delivery channel, and a list of delivery handlers."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "Introduced a new Spring factory interface ISubscribableChannelFactory that is used to create delivery channels and handlers. By default, HAPI FHIR ships with a LinkedBlockingQueue implementation of the delivery channel factory. If a different type of channel factory is required (e.g. JMS or Kafka), add it to your application context and mark it as @Primary."
|
||||
- item:
|
||||
issue: "980"
|
||||
type: "fix"
|
||||
title: "When using the HL7.org DSTU2 structures, a QuestionnaireResponse with a value of type reference would fail to parse. Thanks to David Gileadi for the pull request!"
|
||||
- item:
|
||||
issue: "1051"
|
||||
type: "add"
|
||||
title: "FHIR Servers now support the HTTP HEAD method for FHIR read operations. Thanks to GitHub user Cory00 for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When running the JPA server on Oracle, certain search queries that return a very large number of _included resources failed with an SQL exception stating that too many parameters were used. Search include logic has been reworked to avoid this."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA Subscription deliveries did not always include the accurate versionId if the Subscription module was configured to use an external queuing engine. This has been corrected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "It is now possible in a plain or JPA server to specify the default return type for create/update operations when no Prefer header has been provided by the client."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "It is now possible in a JPA server to specify the _total calculation behaviour if no parameter is supplied by the client. This is done using a new setting on the DaoConfig. This can be used to force a total to always be calculated for searches, including large ones."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "AuthorizationInterceptor now rejects transactions with an invalid or unset request using an HTTP 422 response Bundle type instead of silently refusing to authorize them."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "AuthorizationInterceptor is now able to authorize DELETE operations performed via a transaction operation. Previously these were always denied."
|
||||
- item:
|
||||
issue: "1065"
|
||||
type: "add"
|
||||
title: "OperationDefinitions are now created for named queries in server module. Thanks to Stig Døssing for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new server interceptor has been added called \"SearchNarrowingInterceptor\". This interceptor can be used to automatically narrow the scope of searches performed by the user to limit them to specific resources or compartments that the user should have access to."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "In a DSTU2 server, if search parameters are expressed with chains directly in the parameter name (e.g. <code>@RequiredParam(name=\"subject.name.family\")</code> ) the second part of the chain was lost when the chain was described in the server CapabilityStatement. This has been corrected."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In the JPA server, search/read operations being performed within a transaction bundle did not pass the client request HTTP headers to the sub-request. This meant that AuthorizationInterceptor could not authorize these requests if it was depending on headers being present."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When using a client in DSTU3/R4 mode, if the client attempted to validate the server CapabilityStatement but was not able to parse the response, the client would throw an exception with a misleading error about the Conformance resource not existing. This has been corrected. Thanks to Shayaan Munshi for reporting and providing a test case!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "It is now possible to upload a ConceptMap to the JPA server containing mappings where the source or target is a StructureDefinition canonical URI. This was previously blocked, as the system could not apply these mappings. It is now permitted to be stored, although the system will still not apply these mappings."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A wrapper script for Maven has been added, enabling new users to use Maven without having to install it beforehand. Thanks to Ari Ruotsalainen for the Pull Request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "AuthorizationInterceptor can now allow a user to perform a search that is scoped to a particular resource (e.g. Patient?_id=123) if the user has read access for that specific instance."
|
||||
- item:
|
||||
issue: "1084"
|
||||
type: "fix"
|
||||
title: "In JPA Server REST Hook Subscriptions, any Headers defined in the Subscription resource are now applied to the outgoing HTTP request. Thanks to Volker Schmidt for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "HAPI FHIR will now log the Git revision when it first starts up (on the ame line as the version number that it already logs)."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When fetching a page of search results, if a page offset beyond the total number of available result was requested, a single result was still returned (e.g. requesting a page beginning at index 1000 when there are only 10 results would result in the 10th result being returned). This will now result in an empty response Bundle as would be expected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Added support for _id in in-memory matcher"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The casing of the base64Binary datatype was incorrect in the DSTU3 and R4 model classes. This has been corrected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add a \"subscription-matching-strategy\" meta tag to incoming subscriptions with value of IN_MEMORY or DATABASE indicating whether the subscription can be matched against new resources in-memory or whether a call out to the database may be required. I say \"may\" because subscription matches fail fast so a negative match may be performed in-memory, but a positive match will require a database call."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When performing a JPA search with a chained :text modifier (e.g. MedicationStatement?medication.code:text=aspirin,tylenol) a series of unneccesary joins were introduced to the generated SQL query, harming performance. This has been fixed."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A serialization error when performing some searches in the JPA server using data parameters has been fixed. Thanks to GitHub user @PickOneFish for reporting!"
|
||||
- item:
|
||||
issue: "1135"
|
||||
type: "fix"
|
||||
title: "An issue with outdated syntax in the Vagrant file that prevent it from being used was corrected. Thanks to Steve Lewis for the pull requst!"
|
||||
- item:
|
||||
issue: "1130"
|
||||
type: "fix"
|
||||
title: "The HAPI FHIR tutorial server project had outdated versions of HAPI FHIR in its pom file. Thanks to Ricardo Estevez for the pull request!"
|
||||
- item:
|
||||
issue: "1114"
|
||||
type: "fix"
|
||||
title: "A NullPointerException during validation was fixed. Thanks to GitHub user zilin375 for the pull request!"
|
||||
- item:
|
||||
issue: "1148"
|
||||
type: "add"
|
||||
title: "Support for validating enableWhen in Questionnaires has been added to the Validator. Thanks to Eeva Turkka and Matti Uutsitalo for the pull request!"
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
release-date: "2019-02-06"
|
||||
codename: "Gale"
|
|
@ -0,0 +1,168 @@
|
|||
---
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A potential security vulnerability in the hapi-fhir-testpage-overlay project was corrected: A URL parameter was not being correctly escaped, leading to a potential XSS vulnerability. A big thanks to Mudit Punia and Dushyant Garg for reporting this."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The version of a few dependencies have been bumped to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Guava (base): 25-jre -> 27.1-jre</li> <li>Hibernate (JPA): 5.4.1 -> 5.4.2</li> <li>Jackson (JPA): 2.9.7 -> 2.9.8</li> <li>Spring (JPA): 5.1.3.RELEASE -> 5.1.6.RELEASE</li> <li>Spring-Data (JPA): 2.1.3.RELEASE -> 2.1.6.RELEASE</li> <li>Caffeine (JPA): 2.6.2 -> 2.7.0</li> <li>JANSI (CLI): 1.16 -> 1.17.1</li> <!--<li>Jetty (CLI): 9.4.14.v20181114 -> 9.4.17.v20190418</li>--> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "In Servers that are configured to support extended mode <code>_elements</code> parameters, it is now possible to use the :exclude modifier to exclude entire resource types."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "RequestDetails now has methods called getAttribute and setAttribute that can be used by interceptors to pass arbitrary data between requests."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The hapi-fhir-jpaserver-starter project has been updated to use a properties file for configuration, making it much easier to get started with this project. Thanks to Sean McIlvenna for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The hapi-fhir-jpaserver-example did not have Subscription capabilities enabled after the refactoring of how Subscriptions are enabled that occurred in HAPI FHIR 3.7.0. Thanks to Volker Schmidt for the pull request!"
|
||||
- item:
|
||||
type: "change"
|
||||
title: "Re-use subscription channel and handlers when a subscription is updated (unless the channel type changed)."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When using the <code>_elements</code> parameter on searches and reads, requesting extensions to be included caused the extensions to be included but not any values contained within. This has been corrected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA terminology service can now detect when Hibernate Search (Lucene) is not enabled, and will perform simple ValueSet expansions without relying on Hibenrate Search in such cases."
|
||||
- item:
|
||||
issue: "1209"
|
||||
type: "change"
|
||||
title: "A Google Analytics script fragment was leftover in the hapi-fhir-jpaserver example and starter projects. Thanks to Patrick Werner for removing these!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "ParametersUtil now has a utility method that can be used to add parameter values using the string name of the datatype (e.g. \"dateTime\") in order to help building Parameters resources in a version-independent way."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When performing a search using the JPA server, if a search returned between 1500 and 2000 results, a query for the final page of results would timeout due to a page calculation error. This has been corrected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "In the JPA server, a much more readable error message is now returned returned when two client threads collide while trying to simultaneously create a resource with the same client-assigned ID. In addition, better error messages are now returned when conflicts such as this one are hit within a FHIR transaction operation."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA query builder has been optimized to take better advantage of SQL IN (..) expressions when performing token searches with multiple OR values."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server transaction processor will now automatically detect if the request Bundle contains multiple entries having identical conditional create operations, and collapse these into a single operation. This is done as a convenience, since many conversion algorithms can accidentally generate such duplicates."
|
||||
- item:
|
||||
issue: "1223"
|
||||
type: "fix"
|
||||
title: "Searching the JPA server with multiple instances of the same token search parameter (e.g. \"Patient?identifier=&identifier=b\" returned no results even if resources should have matched. Thanks to @mingdatacom for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new config setting has been added to the JPA DaoConfig that disables validation of the resource type for target resources in references."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "HapiLocalizer can now handle message patterns with braces that aren't a part of a message format expression. E.g. \"Here is an {example}\"."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "JPA searches using a Composite Unique Index will now use that index for faster searching even if the search has _includes and/or _sorts. Previously these two features caused the search builder to skip using the index."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "JPA searches using a Composite Unique Index did not return the correct results if a REFERENCE search parameter was used with arguments that consisted of unqualified resource IDs."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A non-threadsafe use of DateFormat was cleaned up in the StopWatch class."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When performing a search in the JPA server where one of the parameters is a reference with multiple values (e.g. Patient?organization=A,B) the generated SQL was previously a set of OR clauses and this has been collapsed into a single IN clause for better performance."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When returning the results of a history operation from a HAPI FHIR server, any entries with a method of DELETE contained a stub resource in Bundle.entry.resource, even though the FHIR spec states that this field should be empty. This was corrected."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "The hapi-fhir-testpage-overlay project no longer includes any library JARs in the built WAR, in order to prevent duplicates and conflicts in implementing projects."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Two expunge bug fixes: The first bug is that the expunge operation wasn't bailing once it hit its limit. This resulted in a \"Page size must not be less than one!\" error. The second bug is that one case wasn't properly handled: when a resourceId with no version is provided. This executed the case where only resource type is provided."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When updating a resource in the JPA server, if the contents have not actually changed the resource version is not updated and no new version is created. In this situation, the update time was modified however. It will no longer be updated."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When running the JPA server in Resource Client ID strategy mode of \"ANY\", using the <code>_id</code> search parameter could return incorrect results. This has been corrected."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Performing a PUT or POST against a HAPI FHIR Server with no request body caused an HTTP 500 to be returned instead of a more appropriate HTTP 400. This has been corrected."
|
||||
- item:
|
||||
issue: "1255"
|
||||
type: "fix"
|
||||
title: "The fetchValueSet method on IValidationSupport implementation was not visible and could not be overridden. Thanks to Patrick Werner for the pull reuqest!"
|
||||
- item:
|
||||
issue: "1280"
|
||||
type: "fix"
|
||||
title: "The JPA server failed to index R4 reources with search parameters pointing to the Money data type. Thanks to GitHub user @navyflower for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When validating DSTU3 QuestionnaireResponses that leverage the \"enableWhen\" functionality available in Questionnaire resources, the validation could sometimes fail incorrectly."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Added new configuration parameter to DaoConfig and ModelConfig to specify the websocket context path. (Before it was hardcoded to \"/websocket\")."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Added new IRemovableChannel interface. If a SubscriptionChannel implements this, then when a subscription channel is destroyed (because its subscription is deleted) then the remove() method will be called on that channel."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "The JSON Patch provider has been switched to use the provider from the <a href=\"https://github.com/java-json-tools/json-patch\">Java JSON Tools</a> project, as it is much more robust and fault tolerant."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Ensure that database cursors are closed immediately after performing a FHIR search."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When performing a JSON Patch in JPA server, the post-patched document is now validated to ensure that the patch was valid for the candidate resource. This means that invalid patches are caught and not just silently ignored."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Expunges are now done in batches in multiple threads. Both the number of expunge threads and batch size are configurable in DaoConfig."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Validation errors were fixed when using a Questionnaire with enableWhen on a question that contains sub-items."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fixed \"because at least one resource has a reference to this resource\" delete error message that mistakingly reported the target instead of the source with the reference."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "ValidationSupportChain will now call isCodeSystemSupported() on each entry in the chain before calling fetchCodeSystem() in order to reduce the work required by chain entries. Thanks to Anders Havn for the suggestion!"
|
||||
- item:
|
||||
issue: "1299"
|
||||
type: "fix"
|
||||
title: "In JPA server when updating a resource using a client assigned ID, if the resource was previously deleted (meaning that the operation is actually a create), the server will now return an HTTP 201 instead of an HTTP 200. Thanks to Mario Hyland for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The HAPI FHIR CLI was unable to start a server in R4 mode in HAPI FHIR 3.7.0. This has been corrected."
|
||||
- item:
|
||||
issue: "1311"
|
||||
type: "fix"
|
||||
title: "When encoding resources, profile declarations on contained resources will now be preserved. Thanks to Anders Havn for the pull request!"
|
||||
- item:
|
||||
issue: "1305"
|
||||
type: "fix"
|
||||
title: "Two incorrect package declarations in unit tests were corrected. Thanks to github user @zaewonyx for the PR!"
|
||||
- item:
|
||||
issue: "1228"
|
||||
type: "add"
|
||||
title: "The InstanceValidator now supports validating QuestionnairResponses with empty items for disabled questions. Thanks to Matti Uusitalo for the pull request!"
|
||||
- item:
|
||||
issue: "1152"
|
||||
type: "add"
|
||||
title: "A new method has been added to the client that allows arbitrary headers to be easily added to the request. Thanks to Christian Ohr for the pull request!"
|
||||
- item:
|
||||
issue: "1213"
|
||||
type: "add"
|
||||
title: "VersionConverter for R2-R3 has been modified to correectly handle the renamed basedOn field. Thanks to Gary Graham for the pull request!"
|
||||
- item:
|
||||
issue: "1141"
|
||||
type: "fix"
|
||||
title: "The JPA database migration tool has been enhanced to support migration from HAPI FHIR 2.5. Thanks to Gary Graham for the pull request!"
|
||||
- item:
|
||||
issue: "1244"
|
||||
type: "add"
|
||||
title: "Add a missing @Deprecated tag. Thanks to Drew Mitchell for the pull request!"
|
||||
- item:
|
||||
issue: "1303"
|
||||
type: "add"
|
||||
title: "The JSON parser has removed a few unneeded super keywords that prevented overriding behaviour. Thanks to Anders Havn for the pull request!"
|
||||
- item:
|
||||
issue: "1179"
|
||||
type: "add"
|
||||
title: "The DSTU2/3 version converter now converts Specimen resources. Thanks to Gary Graham for the pull request!"
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
release-date: "2019-05-30"
|
||||
codename: "Hippo"
|
|
@ -0,0 +1,232 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The version of a few dependencies have been bumped to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>Commons Codec (Core): 1.11 -> 1.12</li> <li>Apache HTTPClient (Client): 4.5.3 -> 4.5.9</li> <li>Apache HTTPCore (Client>: 4.4.6 -> 4.4.11</li> <li>Spring (JPA): 5.1.6.RELEASE -> 5.1.8.RELEASE</li> <li>Spring-Data (JPA): 2.1.6.RELEASE -> 2.1.8.RELEASE</li> <li>JANSI (CLI): 1.17.1 -> 1.18</li> <li>json-patch (JPA): 1.10 -> 1.15 (see changelog entry about this change)</li> <li>Jackson-Databind (JPA): 2.9.9 -> 2.9.9.1 (due to a Jackson vulnerability CVE-2019-12384)</li> <li>commons-collections4 (Server/JPA): 4.1 -> 4.3</li> <li>commons-dbcp2 (JPA): 2.5.0 -> 2.6.0</li> <li>commons-lang3 (Core): 3.8.1 -> 3.9</li> <li>commons-text (Core): 1.6 -> 1.7</li> <li>Guava (JPA): 27.1-jre -> 28.0-jre</li> </ul>"
|
||||
- item:
|
||||
type: "change"
|
||||
title: "<b>Breaking Change</b>: The HL7.org DSTU2 structures (and <i>ONLY</i> the HL7.org DSTU2 structures) have been moved to a new package. Where they were previously found in <code>org.hl7.fhir.instance.model</code> they are now found in <code>org.hl7.fhir.dstu2.model</code>. This was done in order to complete the harmonization between the <a href=\"https://github.com/jamesagnew/hapi-fhir\">HAPI FHIR</a> GitHub repository and the <a href=\"https://github.com/hapifhir/org.hl7.fhir.core/\">org.hl7.fhir.core</a> GitHub repository. This is the kind of change we don't make lightly, as we do know that it will be annoying for users of the existing library. It is a change however that will allow us to apply validator fixes much more quickly, and will greatly reduce the amount of effort required to keep up with R5 changes as they come out, so we're hoping it is worth it. Note that no classes are removed, they have only been moved, so it should be fairly straightforward to migrate existing code with an IDE."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "<b>Breaking Change</b>: The <code>IPagingProvider</code> interface has been modified so that the <code>retrieveResultList</code> method now takes one additional parameter of type <code>RequestDetails</code>. If you have created a custom implementation of this interface, you can add this parameter and ignore it if needed. The use of the method has not changed, so this should be an easy fix to existing code."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "<b>Breaking Change</b>: The HAPI FHIR REST client and server will now default to using JSON encoding instead of XML when the user has not explicitly configured a preference."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "<b>Breaking Change</b>: The JPA $upload-external-code-system operation has been moved from being a server level operation (i.e. called on the root of the server) to being a type level operation (i.e. called on the CodeSystem type)."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "<b>Breaking Change</b>: The FhirValidator#validate(IResource) method has been removed. It was deprecated in HAPI FHIR 0.7 and replaced with FhirValidator#validateWithResults(IBaseResource) so it is unlikely anyone is still depending on the old method."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "<b>New Feature</b>: Support for the new R5 draft resources has been added. This support includes the client, server, and JPA server. Note that these definitions will change as the R5 standard is modified until it is released, so use with caution!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "<b>New Feature</b>: A new interceptor called <code>ConsentInterceptor</code> has been added. This interceptor allows JPA based servers to make appropriate consent decisions related to resources that and operations that are being returned. See <a href=\"http://hapifhir.io/doc_rest_server_security.html\">Server Security</a> for more information."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "<b>New Feature</b>: The JPA server now supports GraphQL for DSTU3 / R4 / R5 servers."
|
||||
- item:
|
||||
issue: "1220"
|
||||
type: "add"
|
||||
title: "<b>New Feature</b>: The JPA server now supports the <code>_filter</code> search parameter when configured to do so. The <a href=\"http://hl7.org/fhir/search_filter.html\">filter search parameter</a> is an extremely flexible and powerful feature, allowing for advanced grouping and order of operations on searches. It can be dangerous however, as it potentially allows users to create queries for which no database indexes exist in the default configuration so it is disabled by default. Thanks to Anthony Sute for the pull request and all of his support in what turned out to be a lengthy merge!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "<b>New Feature</b>: A new interceptor called CascadingDeleteInterceptor has been added to the JPA project. This interceptor allows deletes to cascade when a specific URL parameter or header is added to the request. Cascading deletes can also be controlled by a new flag in the AuthorizationIntereptor RuleBuilder, in order to ensure that cascading deletes are only available to users with sufficient permission."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Several enhancements have been made to the <code>AuthorizationInterceptor</code> : <ul> <li>The interceptor now registers against the <code>STORAGE_PRESHOW_RESOURCES</code> interceptor hook, which allows it to successfully authorize JPA operations that don't actually return resource content, such as GraphQL responses, and resources that have been filtered using the <code>_elements</code> parameter.</li> <li> </li>The rule list is now cached on a per-request basis, which should improve performance</ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The $expunge global everything operation has been refactored to do deletes in small batches. This change will likely reduce performance, but does allow for the operation to succeed without timing out in larger systems."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The JPA server did not correctly index Timing fields where the timing contained a period but no individual events. This has been corrected."
|
||||
- item:
|
||||
issue: "1320"
|
||||
type: "fix"
|
||||
title: "The HAPI FHIR CLI import-csv-to-conceptmap command was not accounting for byte order marks in CSV files (e.g. some Excel CSV files). This has been fixed."
|
||||
- item:
|
||||
issue: "1241"
|
||||
type: "fix"
|
||||
title: "A bug was fixed where deleting resources within a transaction did not always correctly enforce referential integrity even if referential integrity was enabled. Thanks to Tuomo Ala-Vannesluoma for reporting!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In the JPA server, the <code>_total=accurate</code> was not always respected if a previous search already existed in the query cache that matched the same search parameters."
|
||||
- item:
|
||||
issue: "1337"
|
||||
type: "fix"
|
||||
title: "Improved stability of concurrency test framework. Thanks to Stig Døssing for the pull request!"
|
||||
- item:
|
||||
type: "change"
|
||||
title: "Moved in-memory matcher from Subscription module to SearchParam module and renamed the result type from SubscriptionMatchResult to InMemoryMatchResult."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Added some experimental version-independent model classes to ca.uhn.fhir.jpa.model.any. They permit writing code that is version independent."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Added new subclass of HashMapResourceProvider called SearchableHashMapResourceProvider that uses the in-memory matcher to search the HashMap (using a full table scan). This allows rudimentary testing without a database."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Added a new interceptor hook called STORAGE_PRESTORAGE_DELETE_CONFLICTS that is invoked when a resource delete operation is about to fail due to referential integrity conflicts. Hooks have access to the list of resources that have references to the resource being deleted and can delete them. The boolean return value of the hook indicates whether the server should try checking for conflicts again (true means try again)."
|
||||
- item:
|
||||
issue: "1336"
|
||||
type: "add"
|
||||
title: "The HAPI FHIR unit test suite has been refactored to no longer rely on PortUtil to assign a free port. This should theoretically result in fewer failed builds resulting from port conflicts. Thanks to Stig Døssing for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "AuthorizationInterceptor sometimes failed with a 500 error when checking compartment membership on a resource that has a contained subject (Patient)."
|
||||
- item:
|
||||
issue: "1348"
|
||||
type: "add"
|
||||
title: "JPA server now supports conditional PATCH operation (i.e. performing a patch with a syntax such as <code>/Patient?identifier=sys|val</code> )"
|
||||
- item:
|
||||
issue: "1347"
|
||||
type: "add"
|
||||
title: "The json-patch library used in the JPA server has been changed from <a href=\"https://github.com/java-json-tools/json-patch\">java-json-tools.json-patch</a> to a more active fork of the same project: <a href=\"https://github.com/crate-metadata/json-patch\">crate-metadata.json-patch</a>. Thanks to Jens Villadsen for the suggestion and pull request!"
|
||||
- item:
|
||||
issue: "1343"
|
||||
type: "add"
|
||||
title: "Support has been implemented in the JPA server for the CodeSystem <code>$subsumes</code> operation."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Uploading the LOINC/RSNA Radiology Playbook would occasionally fail when evaluating part type names due to case sensitivity. This has been corrected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new pointcut has been added to the JPA server called <code>JPA_PERFTRACE_RAW_SQL</code> that can be used to capture the raw SQL statements that are sent to the underlying database."
|
||||
- item:
|
||||
issue: "1355"
|
||||
type: "fix"
|
||||
title: "Invoking the transaction or batch operation on the JPA server would fail with a NullPointerException if the Bundle passed in did not contain a resource in an entry that required a resource (e.g. a POST). Thanks to GitHub user @lytvynenko-dmitriy for reporting!"
|
||||
- item:
|
||||
issue: "1250"
|
||||
type: "fix"
|
||||
title: "HAPI FHIR Server (plain, JPA, and JAX-RS) all populated Bundle.entry.result on search result bundles, even though the FHIR specification states that this should not be populated. This has been corrected. Thanks to GitHub user @gitrust for reporting!"
|
||||
- item:
|
||||
issue: "1352"
|
||||
type: "fix"
|
||||
title: "Creating R4 Observation resources with a value type of SampledData failed in the JPA server because of an indexing error. Thanks to Brian Reinhold for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server now rejects subscriptions being submitted with no value in Subscription.status (this field is mandatory, but the subscription was previously ignored if no value was provided)"
|
||||
- item:
|
||||
issue: "1361"
|
||||
type: "fix"
|
||||
title: "Fix a build failure thanks to Maven pom errors. Thanks to Gary Teichrow for the pull request!"
|
||||
- item:
|
||||
issue: "1362"
|
||||
type: "fix"
|
||||
title: "The JPA server did not correctly process searches with a <code>_tag:not</code> expression containing more than one comma separated value."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JSON and XML parsers will now raise a warning or error with the Parser Error Handler if an extension is being encoded that is missing a URL, or has both a value and nested extensions on the same parent extension."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "FHIR model classes have a method called <code>hasPrimitiveValue()</code> which previously returned true if the type was a primitive datatype (e.g. StringType). This method now only returns true if the type is a primitive datatype AND the type actually has a value."
|
||||
- item:
|
||||
issue: "1330"
|
||||
type: "add"
|
||||
title: "Support in the JPA Terminology Service terminology uploader has been added for uploading the IMGT <a href=\"http://hla.alleles.org/nomenclature/index.html\">HLA Nomenclature</a> distribution files as a FHIR CodeSystem. Thanks to Joel Schneider for the contribution!"
|
||||
- item:
|
||||
issue: "1354"
|
||||
type: "add"
|
||||
title: "A BOM POM has been added to the HAPI FHIR distribution, allowing users to import the HAPI FHIR library with all of its submodules automatically sharing the same version. Thanks to Stig Døssing for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "AuthorizationInterceptor will now try to block delete operations sooner in the processing lifecycle if there is no chance they will be permitted later (i.e. because the type is not authorized at all)"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The HAPI FHIR server will now generate a random transaction ID to every request and add it to the response headers. Clients may supply the transaction header via the <code>X-Request-ID</code> header."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When attempting to read a resource that is deleted, a Location header is now returned that includes the resource ID and the version ID for the deleted resource."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A number of columns in the JPA Terminology Services ConceptMap tables were not explicitly annotated with @Column, so the DB columns that were generated had Java ugly field names as their SQL column names. These have been renamed, and entries in the JPA migrator tool have been added for anyone upgrading."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Field values with a datatype of <code>canonical</code> were indexed as though they were explicit resource references by the JPA server. This led to errors about external references not being supported when uploading various resources (e.g. Questionnaires with HL7-defined ValueSet references). This has been corrected. Note that at this time, we do not index canonical references at all (as we were previously doing it incorrectly). This will be improved soon."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "IBundleProvider now has an isEmpty() method that can be used to check whether any results exist. A default implementation has been provided, so this is not a breaking change."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "Server CapabilityStatement/Conformance repsonses from the /metadata endpoint will now be cached for 60 seconds always. This was previously a configurable setting on the ServerConformanceProvider, but it is now handled directly by the method binding so the provider now has no responsibility for caching."
|
||||
- item:
|
||||
issue: "1370"
|
||||
type: "fix"
|
||||
title: "The OkHttp client did not correctly apply the connection timeout and socket timeout settings to client requests. Thanks to Petro Mykhailyshyn for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new server interceptor hook called PROCESSING_COMPLETED has been added. This hook is called by the server at the end of processing every request (success and failure)."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The <code>_summary</code> element was not always respected when encoding JSON resources."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "The JPA server now uses the H2 database instead of the derby database to run its unit tests. We are hoping that this cuts down on the number of false test failures we get due to mysterious derby failures."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Added a new Pointcut STORAGE_PRESTORAGE_EXPUNGE_EVERYTHING that is called at the start of the expungeEverything operation."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server now has the ability to generate snapshot profiles from differential profiles via the $snapshot operation, and will automatically generate a snapshot when needed for validation."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "The Base64Binary types for DSTU3+ now use a byte array internally to represent their content, which is more efficient than storing base 64 encoded text to represent the binary as was previously done."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Creating/updating CodeSystems now persist <code>CodeSystem.concept.designation</code> to the terminology tables."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Expanded ValueSets now populate <code>ValueSet.expansion.contains.designation.language</code> ."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "@Operation methods can now declare that they will manually process the request body and/or manually generate a response instead of letting the HAPI FHIR framework take care of these things. This is useful for situations where direct access to the low-level servlet streaming API is needed."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "@Operation methods can now declare that they are global, meaning that they will apply to all resource types (or instances of all resource types) if they are found on a plain provider."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "@Operation method parameters may now declare their type via a String name such as \"code\" or \"Coding\" in an attribute in @OperationParam. This is useful if you want to make operation methods that can operate across different versions of FHIR."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new resource provider for JPA servers called <code>BinaryAccessProvider</code> has been added. This provider serves two custom operations called <code>$binary-access-read</code> and <code>$binary-access-write</code> that can be used to request binary data in Attachments as raw binary content instead of as base 64 encoded content."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "A few columns named 'CODE' in the JPA terminology services tables have been renamed to 'CODEVAL' to avoid any possibility of conflicting with reserved words in MySQL. The database migrator tool has been updated to handle this change."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Support for PATCH operations performed within a transaction (using a Binary resource as the resource type in order to hold a JSONPatch or XMLPatch body) has been added to the JPA server."
|
||||
- item:
|
||||
issue: "1390"
|
||||
type: "fix"
|
||||
title: "Two issues in the Thymeleaf Narrative Template which caused an error when generating a narrative on an untitled DiagnosticReport were fixed. Thanks to GitHub user @navyflower for reporting!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new attribute has been added to the @Operation annotation called <code>typeName</code> . This annotation can be used to specify a type for an operation declared on a plain provider without needing to use a specific version of the FHIR structures."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The $upload-external-code-system operation and the corresponding HAPI FHIR CLI command can now be used to upload custom vocabulary that has been converted into a standard file format defined by HAPI FHIR. This is useful for uploading large organizational code systems."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "Two new operations, <code>$apply-codesystem-delta-add</code> and <code>$apply-codesystem-delta-remove</code> have been added to the terminology server. These methods allow codes to be dynamically added and removed from external (notpresent) codesystems."
|
||||
- item:
|
||||
issue: "1404"
|
||||
type: "fix"
|
||||
title: "In the JAX-RS server, the resource type history and instance vread operations had ambiguous paths that could lead to the wrong method being called. Thanks to Seth Rylan Gainey for the pull request!"
|
||||
- item:
|
||||
issue: "1414"
|
||||
type: "fix"
|
||||
title: "The profile validator (FhirInstanceValidator) can now be used to validate a resource using an explicit profile declaration rather than simply relying on the declared URL in the resource itself."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When using the ResponseHighlighterInterceptor, some invalid requests that would normally generate an HTTP 400 response (e.g. an invalid _elements value) would cause an HTTP 500 crash."
|
||||
- item:
|
||||
issue: "1388"
|
||||
type: "add"
|
||||
title: "When performing a read-if-newer operation on a plain server, the resource ID in Resource.meta.versionId is now used if a version isn't found in the resource ID itself. Thanks to Stig Døssing for the pull request!"
|
||||
- item:
|
||||
issue: "1375"
|
||||
type: "fix"
|
||||
title: "An example datatype was corrected in the DSTU2 Identifier datatype StructureDefinition. Thanks to Nick Robison for the pull request!"
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
release-date: "2019-08-14"
|
||||
codename: "Igloo"
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "This release contains no new or updated functionality, but addressed a dependency version that was left incorrectly requiring a SNAPSHOT maven build of the org.hl7.fhir.utilities module. Users who are successfully using HAPI FHIR 4.0.0 do not need to upgrade, but any users who were blocked from upgrading due to snapshot dependency issues are advised to upgrade immediately."
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
release-date: "2019-09-03"
|
||||
codename: "Igloo (Point Release)"
|
|
@ -0,0 +1,325 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The version of a few dependencies have been bumped to the latest versions (dependent HAPI modules listed in brackets): <ul> <li>SLF4j (All): 1.7.25 -> 1.7.28</li> <li>Spring (JPA): 5.1.8.Final -> 5.2.0.Final</li> <li>Hibernate Core (JPA): 5.4.2.Final -> 5.4.6.Final</li> <li>Hibernate Search (JPA): 5.11.1.Final -> 5.11.3.Final</li> <li>Jackson Databind (JPA): 2.9.9 -> 2.9.10 (CVE-2019-16335, CVE-2019-14540)</li> <li>Commons-DBCP2 (JPA): 2.6.0 -> 2.7.0</li> <li>Postgresql JDBC Driver (JPA): 42.2.6.jre7 -> 42.2.8</li> <li>MSSQL JDBC Driver (JPA): 7.0.0.jre8 -> 7.4.1.jre8</li> <li>Spring Boot (Boot): 2.1.1 -> 2.2.0</li> <li>Phloc Schematron (Validator): 5.0.4 -> 5.2.0</li> <li>Phloc Commons (Validator): 9.1.1 -> 9.3.8</li> </ul>"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "<b>New Feature</b>: The JPA server now saves and supports searching on <code>Resource.meta.source</code> via the <code>_source</code> search parameter. The server automatically appends the Request ID as a hash value on the URI as well in order to provide request level tracking. Searches can use either the source URI, the request ID, or both."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "<b>New Feature</b>: Support for the FHIR Bulk Data Export specification has been added to the JPA server. See the <a href=\"http://hl7.org/fhir/uv/bulkdata/\">specification</a> for information on how this works. Note that only system level export is currently supported but others will follow."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "<b>New Feature</b>: Support for ElasticSearch has been added to the JPA server directly (i.e. without needing a separate module) and a new class called \"ElasticsearchHibernatePropertiesBuilder\" has been added to facilitate the creation of relevant properties. Instructions have been added to the hapi-fhir-jpaserver-starter project to get started with Elasticsearch. It is likely we will switch our default recommendation to Elastic in the future."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "<b>New Feature</b>: A new set of operations have been added to the JPA server that allow CodeSystem deltas to be uploaded. A CodeSystem Delta consists of a set of codes and relationships that are added or removed incrementally to the live CodeSystem without requiring a downtime or a complete upload of the contents. Deltas may be specified using either a custom CSV format or a partial CodeSystem resource. <br/> In addition, the HAPI FHIR CLI <code>upload-terminology</code> command has been modified to support this new functionality."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "<b>New Feature</b>: When using Externalized Binary Storage in the JPA server, the system will now automatically externalize Binary and Attachment payloads, meaning that these will automatically not be stored in the RDBMS."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "<b>Model Update</b>: The DSTU3 structures have been upgraded to the new 3.0.2 (Technical Correction) release.<br/> The R4 structures have been upgraded to the new 4.0.1 (Technical Correction) release.<br/> The R5 structure have been upgraded to the current (October) snapshot."
|
||||
- item:
|
||||
issue: "1489"
|
||||
type: "add"
|
||||
title: "<b>Performance Improvement</b>: A significant performance improvement was made to the parsers (particularly the Json Parser) when serializing resources. This work yields improvements of 20-50% in raw encode speed when encoding large resources. Thanks to David Maplesden for the pull request!"
|
||||
- item:
|
||||
issue: "1489"
|
||||
type: "add"
|
||||
title: "<b>Performance Improvement</b>: When running inside a JPA server, The DSTU3+ validator now performs code validations by directly testing ValueSet membership against a pre-calculated copy of the ValueSet, instead of first expanding the ValueSet and then examining the expanded contents. This can yield a significant improvement in validation speed in many cases."
|
||||
- item:
|
||||
issue: "1357"
|
||||
type: "add"
|
||||
title: "The email Subscription deliverer now respects the payload property of the subscription when deciding how to encode the resource being sent. Thanks to Sean McIlvenna for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When using the _filter search parameter, string comparisons using the \"eq\" operator were incorrectly performing a partial match. This has been corrected. Thanks to Marc Sandberg for pointing this out!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "When using the AuthorizationInterceptor with a rule to allow all reads by resource type, the server will now reject requests for other resource types earlier in the processing cycle. Thanks to Anders Havn for the suggestion!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Reference search parameters did not work via the _filter parameter"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Transaction entries with a resource URL starting with a leading slash (e.g. <code>/Organization?identifier=foo</code> instead of <code>Organization?identifier=foo</code> did not work. These are now supported."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "SubscriptionDstu2Config incorrectly pointed to a DSTU3 configuration file. This has been corrected."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When using the VersionedApiConverterInterceptor, GraphQL responses failed with an HTTP 500 error."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Cascading deletes now correctly handle circular references. Previously this failed with an HTTP 500 error."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The informational message returned in an OperationOutcome when a delete failed due to cascades not being enabled contained an incorrect example. This has been corrected."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In some cases, deleting a CodeSystem resource would fail because the underlying codes were not correctly deleted from the terminology service tables. This is fixed."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "Two foreign keys have been dropped from the HFJ_SEARCH_RESULT table used by the FHIR search query cache. These constraints did not add value and caused unneccessary contention when used under high load."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "An inefficient regex expression in UrlUtil was replaced with a much more efficient hand-written checker. This regex was causing a noticable performance drop when feeding large numbers of transactions into the JPA server at the same time (i.e. when loading Synthea data)."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The FHIRPath engine used to parse search parameters in the JPA R4/R5 server is now reused across requests, as it is somewhat expensive to create and is thread safe."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "It is now possible to submit a PATCH request as a part of a FHIR transaction in DSTU3 (previously this was only supported in R4+). This is not officially part of the DSTU3 spec, but it can now be performed by leaving the Bundle.entry.request.method blank in DSTU3 transactions and setting the request payload as a Binary resource containing a valid patch."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "The HAPI FHIR CLI server now uses H2 as its database platform instead of Derby. Note that this means that data in any existing installations will need to be re-uploaded to the new database platform."
|
||||
- item:
|
||||
issue: "1443"
|
||||
type: "add"
|
||||
title: "LOINC concepts now include multiaxial hierarchical properties (e.g. <code>parent</code> and <code>child</code> , which identify parent and child concepts."
|
||||
- item:
|
||||
issue: "1445"
|
||||
type: "add"
|
||||
title: "When loading LOINC terminology, a new ValueSet is automatically created with a single include element that identifies the LOINC CodeSystem in <code>ValueSet.compose.include.system</code> . This ValueSet includes all LOINC codes."
|
||||
- item:
|
||||
issue: "1461"
|
||||
type: "add"
|
||||
title: "A note has been added to the downloads page explaning the removal of the hapi-fhir-utilities module. Thanks to Andrew Fitzgerald for the PR!"
|
||||
- item:
|
||||
type: "change"
|
||||
title: "REST servers will no longer try to guess the content type for HTTP requests where a body is provided but no Content-Type header is included. These requests are invalid, and will now result in an HTTP 400. This change corrects an error where some interceptors (notably the RequestValidatingInterceptor, but not including any HAPI FHIR security interceptors) could be bypassed if a Content Type was not included."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The GraphQL provider did not wrap the respone in a \"data\" element as described in the FHIR specification. This has been corrected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Added support for comparing resource dates to the current time via a new variable %now. E.g. Procedure?date=gt%now would match future procedures."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Add support for in-memory matching on date comparisons ge,gt,eq,lt,le."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When using the Consent Service and denying a resource via the \"Will See Resource\" method, the resource ID and version were still returned to the user. This has been corrected so that no details about the resource are leaked."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Fix a failure in FhirTerser#visit when fields in model classes being visited contain custom subclasses of the expected type."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Updating an existing CodeSystem resource with a content mode of COMPLETE did not cause the terminology service to accurately reflect the new CodeSystem URL and/or concepts. This is now corrected."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The JPA server now uses the Quartz scheduling library as a lob scheduling mechanism"
|
||||
- item:
|
||||
type: "change"
|
||||
title: "The Testpage Overlay has been upgraded to use FontAwesome 5.x, and now supports being deployed to a servlet path other than \"/\"."
|
||||
- item:
|
||||
issue: "1495"
|
||||
type: "fix"
|
||||
title: "A NullPointerException when using the AuthorizationInterceptor RuleBuilder to build a conditional rule with a custom tester has been corrected. Thanks to Tue Toft Nørgård for reporting!"
|
||||
- item:
|
||||
issue: "1494"
|
||||
type: "fix"
|
||||
title: "The R4+ client and server modules did not recognize the new <code>_include:iterate</code> syntax that replaces the previous <code>_include:recurse</code> syntax. Both are now supported on all servers in order to avoid breaking backwards compatibility, with the new syntax now being emitted in R4+ clients."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "The hapi-fhir-jaxrs-server module now lists dependencies on structures JARs as optional dependencies, in order to avoid automatically importing all versions. This means that implementers of JAX-RS servers may now need to add an explicit dependency on one or more structures JARs to their own project."
|
||||
- item:
|
||||
issue: "1482"
|
||||
type: "fix"
|
||||
title: "The LOINC terminology distribution includes multiple copies of the same files. Uploading LOINC terminology resulted in some ValueSets with duplicate codes. This has been corrected by specifying a path with each filename."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A corner case bug in the JPA server was solved: When performing a search that contained chained reference searches where the value contained slashes (e.g. <code>Observation?derived-from:DocumentReference.contenttype=application/vnd.mfer</code> ) the server could fail to load later pages in the search results."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new flag has been added to the JPA migrator tool that causes the migrator to not try to reduce the length of existing columns in the schema."
|
||||
- item:
|
||||
issue: "1483"
|
||||
type: "fix"
|
||||
title: "Some resource IDs and URLs for LOINC ValueSets and ConceptMaps were inconsistently populated by the terminology uploader. This has been corrected."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When a resource was updated with a meta.source containing a request id, the meta.source was getting appended with the new request id, resulting in an ever growing source.meta value. E.g. after the first update, it looks like \"#9f0a901387128111#5f37835ee38a89e2\" when it should only be \"#5f37835ee38a89e2\". This has been corrected."
|
||||
- item:
|
||||
issue: "1421"
|
||||
type: "fix"
|
||||
title: "The Plain Server method selector was incorrectly allowing client requests with _include statements to be handled by method implementations that did not have any <code>@IncludeParam</code> defined. This is now corrected. Thanks to Tuomo Ala-Vannesluoma for reporting and providing a test case!"
|
||||
- item:
|
||||
issue: "1366"
|
||||
type: "add"
|
||||
title: "The ValueSet operation <code>$expand</code> has been optimized for large ValueSets. ValueSets are now persistence-backed by the terminology tables, which are populated by a scheduled pre-expansion process. A ValueSet previously stored in an existing FHIR repository will need to be re-created or updated to make it a candidate for pre-expansion. ValueSets that have yet to be pre-expanded will continue to be expanded in-memory."
|
||||
- item:
|
||||
issue: "1431"
|
||||
type: "add"
|
||||
title: "The ValueSet operation <code>$validate-code</code> has been optimized for large ValueSets. Codes in ValueSets that have yet to be pre-expanded will continue to be validated in-memory."
|
||||
- item:
|
||||
issue: "1447"
|
||||
type: "add"
|
||||
title: "LOINC filenames for terminology upload are now configurable using the <code>loincupload.properties</code> file."
|
||||
- item:
|
||||
issue: "1451"
|
||||
type: "add"
|
||||
title: "Support for the LOINC <code>EXTERNAL_COPYRIGHT_NOTICE</code> property and <code>copyright</code> filter has been added."
|
||||
- item:
|
||||
issue: "1453"
|
||||
type: "add"
|
||||
title: "Support for the LOINC <code>parent</code> and <code>child</code> filters has been added. Both filters can be used with either of the <code>=</code> or <code>in</code> operators."
|
||||
- item:
|
||||
issue: "1454"
|
||||
type: "add"
|
||||
title: "Support for the LOINC <code>ancestor</code> and <code>descendant</code> filters has been added. The <code>descendant</code> filter can be used with either of the <code>=</code> or <code>in</code> operators. At present, the <code>ancestor</code> filter can only be used with the <code>=</code> operator."
|
||||
- item:
|
||||
issue: "1512"
|
||||
type: "add"
|
||||
title: "Support for the LOINC <code>ancestor</code> filter with the <code>in</code> operator has been added."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The JPA server failed to find codes defined in not-present codesystems in some cases, and reported that the CodeSystem did not exist. This has been corrected."
|
||||
- item:
|
||||
type: "remove"
|
||||
title: "The method <code>IVersionSpecificBundleFactory#initializeBundleFromResourceList</code> has been deprecated, as it provided duplicate functionality to other methods and had an outdated argument list based on the Bundle needs in DSTU1. We are not aware of any public use of this API, please let us know if this deprecation causes any issues."
|
||||
- item:
|
||||
issue: "1517"
|
||||
type: "add"
|
||||
title: "Support for concept property values with a length exceeding 500 characters has been added in the terminology tables. In particular, this was added to facilitate the LOINC EXTERNAL_COPYRIGHT_NOTICE property, for which values can be quite long."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The AuthorizationInterceptor has been enhanced so that a user can be authorized to perform create operations specifically, without authorizing all write operations. Also, conditional creates can now be authorized even if they are happening inside a FHIR transaction."
|
||||
- item:
|
||||
issue: "402"
|
||||
type: "fix"
|
||||
title: "When encoding a Composition resource in XML, the section narrative blocks were incorrectly replaced by the main resource narrative. Thanks to Mirjam Baltus for reporting!"
|
||||
- item:
|
||||
issue: "1473"
|
||||
type: "fix"
|
||||
title: "AN issue with date pickers not working in the hapi-fhir-testpage-overlay project has been fixed. Thanks to GitHub user @jaferkhan for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A docker compose script for the hapi-fhir-jpaserver-starter project was added. Thanks to Long Nguyen for the pull request!"
|
||||
- item:
|
||||
issue: "1476"
|
||||
type: "add"
|
||||
title: "A number of overridden methods in the HAPI FHIR codebase did not have the @Override annotation. Thanks to Clayton Bodendein for cleaning this up!"
|
||||
- item:
|
||||
issue: "1373"
|
||||
type: "add"
|
||||
title: "Plain server resource providers were not correctly matching methods that had the _id search parameter if a client performed a request using a modifier such as :not or :exact. Thanks to Petro Mykhailyshyn for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The JPA server contained a restriction on the columns used to hold a resource's type name that was too short to hold the longest name from the final R4 definitions. This has been corrected to account for names up to 40 characters long."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The subscription triggering operation was not able to handle commas within search URLs being used to trigger resources for subscription checking. This has been corrected."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In some cases where resources were recently expunged, null entries could be passed to JPA interceptors registered against the STORAGE_PRESHOW_RESOURCES hook."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In issue was fixed in the JPA server where a previously failed search would be reused, immediately returning an error rather than retrying the search."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The JPA server did not correctly process _has queries where the linked search parameter was the _id parameter."
|
||||
- item:
|
||||
type: "remove"
|
||||
title: "HTTP PUT (resource update) operations will no longer allow the version to be specified in a Content-Location header. This behaviour was allowed in DSTU1 and was never removed from HAPI even though it hasn't been permitted in the spec for a very long time. Hopefully this change will not impact anyone!"
|
||||
- item:
|
||||
issue: "1529"
|
||||
type: "fix"
|
||||
title: "HAPI FHIR allows transactions in DSTU3 to contain a JSON/XML Patch in a Binary resource without specifying a verb in Bundle.entry.request.method, since the valueset defined in DSTU3 for that field does not include the PATCH verb. The AuthorizationInterceptor however did not understand this and would reject these requests. This is now corrected."
|
||||
- item:
|
||||
issue: "1530"
|
||||
type: "fix"
|
||||
title: "A potential XXE vulnerability in the validator was corrected. The XML parser used for validating XML payloads (i.e. FHIR resources) will no longer read from DTD declarations."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Auto generated transaction IDs will now use both upper- and lowercase letters for more uniqueness in the same amount of space."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Paging requests that are incorrectly executed at the type level were interpreted by the plain server as search requests with no search parameters, leading to confusing search results. These will now result in an HTTP 400 error with a meaningful error message."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "The <code>IValidationSupport#validateCode(...)</code> method has been modified to add an additional parameter (String theValueSetUrl). Most users will be unaffected by this change as HAPI FHIR provides a number of built-in implementations of this interface, but any direct user implementations of this interface will need to add the new parameter."
|
||||
- item:
|
||||
issue: "1541"
|
||||
type: "add"
|
||||
title: "The server CapabilityStatement (/metadata) endpoint now respects the Cache-Control header. Thanks to Jens Villadsen for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The @Metadata annotation now has an attribute that can be used to control the cache timeout"
|
||||
- item:
|
||||
issue: "1544"
|
||||
type: "fix"
|
||||
title: "QuestionnaireResponse validation in the JPA server was not able to load Questionnaire resources that were referenced using a canonical URI instead of a local reference. Thanks to Vu Vuong for reporting!"
|
||||
- item:
|
||||
issue: "848"
|
||||
type: "fix"
|
||||
title: "When validating JSON payloads, the JSON structure was parsed by Gson instead of passing the raw JSON to the validator. This meant that the validator was unable to catch certain structural errors that are ignored by Gson. Thanks to Michael Lawley for reporting!"
|
||||
- item:
|
||||
issue: "1546"
|
||||
type: "fix"
|
||||
title: "The JPA server exposed a number of duplicate entries in the CapabilityStatement's list of supported _include values for a given resource. Thanks to Jens Villadsen for reporting!"
|
||||
- item:
|
||||
issue: "1481"
|
||||
type: "fix"
|
||||
title: "An unintended dependency from hapi-fhir-base on Jetty was introduced in HAPI FHIR 4.0.0. This has been removed."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "The JPA migrator tool was not able to correctly drop tables containing foreign key references in some cases. This has been corrected."
|
||||
- item:
|
||||
issue: "1547"
|
||||
type: "fix"
|
||||
title: "An issue was fixed where the JPA server would occasionally fail to save a resource because it contained a string containing characters that change length when normalized. Thanks to Tuomo Ala-Vannesluoma for the pull request!"
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Validation errors will now include details about the line number where the issue was found"
|
||||
- item:
|
||||
type: "change"
|
||||
title: "The hapi-fhir-testpage-overlay project now uses WebJars for importing JavaScript dependency libraries. This reduces our Git repository size and should make it easier to stay up-to-date."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "In the (fairly unlikely) circumstance that a JPA server was called with a parameter where the parameter name referenced a custom search parameter with an invalid chain attached, and the value was missing entirely (e.g. <code>ProcedureRequest?someCustomParameter.BAD_NAME=</code> , the server would ignore this parameter instead of incorrectly returning an error. This has been corrected."
|
||||
- item:
|
||||
issue: "1526"
|
||||
type: "fix"
|
||||
title: "Several issues with HAPI FHIR's annotation scanner that prevented use with Kotlin based resource providers have been corrected. Thanks to Jelmer ter Wal for the pull request!"
|
||||
- item:
|
||||
type: "change"
|
||||
title: "The JPA server in DST2 mode previously automatically validated submitted QuestionnaireResponse resource against their corresponding Questionnaires and rejected non-conformant QuestionnaireResponse resources from being stored. This was in contrast to every other version where the RequestValidatingInterceptor has to be registered in order to achieve this specific behaviour. This behaviour has been removed from the JPA server, and the same interceptor must be used for QR validation in the DSTU2 JPA server as in all other versions of FHIR."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "DSTU2.1 profile validation now uses the same R5 validation as all other versions of FHIR."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "A new built-in server interceptor called <code>CaptureResourceSourceFromHeaderInterceptor</code> has been added. This interceptor can be used to capture an incoming source system URI in an HTTP Request Header and automatically place it in <code>Resource.meta.source</code>"
|
||||
- item:
|
||||
type: "remove"
|
||||
title: "The @ProvidesResources annotation has been removed from HAPI FHIR, as it was not documented and did not do anything useful. Please get in touch if this causes any issues."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "Search parameters of type URI did not work in the hapi-fhir-testpage-overlay. This has been corrected."
|
||||
- item:
|
||||
issue: "1568"
|
||||
type: "fix"
|
||||
title: "JPA servers accidentally stripped the type attribute from the server-exported CapabilityStatement when search parameters of type \"special\" were found. This has been corrected."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When running the JPA server without Lucene indexing enabled and performing ValueSet expansion, the server would incorrectly ignore inclusion rules that specified a system but no codes (i.e. include the whole system). This has been corrected."
|
||||
- item:
|
||||
issue: "1538"
|
||||
type: "fix"
|
||||
title: "The hapi-fhir-testpage-overlay has been updated to support R5 endpoints. Thanks to Dazhi Jiao for the pull request!"
|
||||
- item:
|
||||
issue: "1088"
|
||||
type: "add"
|
||||
title: "The CapabilityStatement generator will now determine supported profiles by navigating the complete hierarchy of supported resource types, instead of just using the root resource for each type. Thanks to Stig Døssing for the pull request!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A NullPointerException in the XML Parser was fixed when serializing a resource containing an extension on a primitive datatype that was missing a URL declaration."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "When using the _filter search parameter in the JPA server with an untyped resource ID, the filter could bring in search results of the wrong type. Thanks to Anthony Sute for the Pull Request and Jens Villadsen for reporting!"
|
||||
- item:
|
||||
issue: "1300"
|
||||
type: "fix"
|
||||
title: "In some cases where where a single search parameter matches the same resource many times with different distinct values (e.g. a search by Patient:name where there are hundreds of patients having hundreds of distinct names each) the Search Coordinator would end up in an infinite loop and never return all of the possible results. Thanks to @imranmoezkhan for reporting, and to Tim Shaffer for providing a reproducible test case!"
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
release-date: "2019-11-13"
|
||||
codename: "Jitterbug"
|
|
@ -0,0 +1,42 @@
|
|||
---
|
||||
- item:
|
||||
type: "add"
|
||||
title: "The version of a few dependencies have been bumped to the latest versions
|
||||
(dependent HAPI modules listed in brackets):
|
||||
<ul>
|
||||
<li>Jetty (CLI): 9.4.14.v20181114 -> 9.4.23.v20191118</li>
|
||||
</ul>"
|
||||
- item:
|
||||
issue: "1583"
|
||||
type: "fix"
|
||||
title: "As of FHIR R4, some fields that were previously of type reference are now of type canonical. One example is QuestionnaireResponse.questionnaire. Technically this means that this field should no longer contain a relative reference, but as they are sometimes used that way, HAPI FHIR will now try to be permissive and will index relative link canonical fields such as (Questionnaire/123) as though it actually was a local relative link. Thanks to Dean Atchley for reporting and providing a test case!"
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "ValueSet PreCalculation did not successfully expand valuesets when Lucene was not enabled in the JPA server. This has been corrected."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "When parsing Bundle resources containing other resources, XML/JSON parsers have an option called \"override resource ID with bundle entry fullUrl\". This option previously caused any value found in Bundle.entry.fullUrl to override any value found in Bundle.entry.resource.id (meaning that the parsed resource would take its ID from the fullUrl even if that ID disagreed with the ID found in the resource itself. As of HAPI FHIR 4.1.0 the value in Bundle.entry.fullUrl will only be used to set the parsed resource ID if the resource has no ID present."
|
||||
- item:
|
||||
type: "add"
|
||||
title: "Chained searches using the _has search parameter as the chain value are now supported by the JPA server."
|
||||
- item:
|
||||
type: "change"
|
||||
title: "Changed database migration to use flyway. This adds a new table called FLY_HFJ_MIGRATION that records all database migration tasks that have already been applied. The hapi-fhir-cli migrate tool has been changed to use flyway. Learn more about flyway here: https://flywaydb.org/."
|
||||
- item:
|
||||
issue: "1613"
|
||||
type: "fix"
|
||||
title: "ValueSet Precalculation sometimes failed on Oracle DBs due to an invalid SQL function. This has been corrected."
|
||||
- item:
|
||||
type: "fix"
|
||||
title: "A ConcurrentModificationException was sometimes thrown when performing a cascading delete. This has been corrected."
|
||||
- item:
|
||||
issue: "1624"
|
||||
type: "fix"
|
||||
title: "The constructor for Verdict.java was inadvertantly made private, preventing custom rules from being written. Thanks to Jafer Khan for the pull request!"
|
||||
- item:
|
||||
type: "change"
|
||||
title: "The <code>IRestfulClient#registerInterceptor</code> and <code>IRestfulClient#unregisterInterceptor</code> methods now take Object as an argument instead of IClientInterceptor, allowing client interceptors to now be migrated to the new interceptor framework."
|
||||
- item:
|
||||
issue: "1610"
|
||||
type: "fix"
|
||||
title: "A missing mandatory was added to the SNOMED CT CodeSystem that is uploaded when SCT is uploaded to the JPA server. Thanks to Anders Havn for the pull request!"
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
release-date: "TBD"
|
|
@ -1,3 +0,0 @@
|
|||
---
|
||||
type: add
|
||||
title: feature
|
|
@ -41,6 +41,7 @@ section.server_jpa.title=JPA Server
|
|||
page.server_jpa.introduction=Introduction
|
||||
page.server_jpa.get_started=Get Started ⚡
|
||||
page.server_jpa.architecture=Architecture
|
||||
page.server_jpa.configuration=Configuration
|
||||
page.server_jpa.upgrading=Upgrade Guide
|
||||
|
||||
section.interceptors.title=Interceptors
|
||||
|
|
|
@ -2,10 +2,15 @@
|
|||
|
||||
<th:block th:each="version : ${changelog.versions}">
|
||||
|
||||
# Smile CDR <th:block th:text="${version}"/> <th:block th:if="${changelog.changes.get(version).codename} != null" th:text="' (' + ${changelog.changes.get(version).codename} + ')'"/>
|
||||
# Smile CDR <th:block th:text="${version}"/> <th:block th:if="${changelog.changes.get(version).codename} != null" th:text="' (' + ${changelog.changes.get(version).codename} + ')'"/> <th:block th:if="${changelog.changes.get(version).releaseDate} == null">(Prerelease)</th:block>
|
||||
|
||||
## Release Information
|
||||
|
||||
<th:block th:if="${changelog.changes.get(version).releaseDate} == null">
|
||||
Note: This version of HAPI FHIR is a SNAPSHOT (prerelease), meaning that it has
|
||||
not yet been released, but all changes and fixes listed here are available to try
|
||||
out as <a href="/docs/introduction/downloading_and_importing.html#snapshot">Snapshot Builds</a>.
|
||||
</th:block>
|
||||
<th:block th:if="${changelog.changes.get(version).releaseDate} != null">
|
||||
**Released:** <th:block th:text="${changelog.changes.get(version).releaseDate.getValueAsString()}"/>
|
||||
</th:block>
|
||||
|
@ -41,6 +46,9 @@
|
|||
<i class="fa fa-shield-alt"></i>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<a th:if="${change.issue != null}" th:href="'https://github.com/jamesagnew/hapi-fhir/issues/' + ${change.issue}" th:text="'#' + ${change.issue}"></a>
|
||||
</td>
|
||||
<td>
|
||||
<th:block th:utext="${change.title}"/>
|
||||
</td>
|
||||
|
|
|
@ -53,6 +53,8 @@ compile 'ca.uhn.hapi.fhir:hapi-fhir-structures-dstu2:${project.version}'
|
|||
compile 'ca.uhn.hapi.fhir:hapi-fhir-structures-r4:${project.version}'
|
||||
```
|
||||
|
||||
<a name="snapshot"/>
|
||||
|
||||
# Snapshot Builds
|
||||
|
||||
The HAPI FHIR project generally releases a new full software release 4 times per year, or approximately every 3 months.
|
||||
|
|
|
@ -27,7 +27,7 @@ The AuthorizationInterceptor works by examining the client request in order to d
|
|||
|
||||
When authorizing a read operation, the AuthorizationInterceptor always allows client code to execute and generate a response. It then examines the response that would be returned before actually returning it to the client, and if rules do not permit that data to be shown to the client the interceptor aborts the request.
|
||||
|
||||
Note that there are performance implications to this mechanism, since an unauthorized user can still cause the server to fetch data even if they won't get to see it. This mechanism should be comprehensive however, since it will prevent clients from using various features in FHIR (e.g. <code>_include</code> or <code>_revinclude</code>) to "trick" the server into showing them date they shouldn't be allowed to see.
|
||||
Note that there are performance implications to this mechanism, since an unauthorized user can still cause the server to fetch data even if they won't get to see it. This mechanism should be comprehensive however, since it will prevent clients from using various features in FHIR (e.g. <code>_include</code> or <code>_revinclude</code>) to "trick" the server into showing them data they shouldn't be allowed to see.
|
||||
|
||||
See the following diagram for an example of how this works.
|
||||
|
||||
|
|
|
@ -0,0 +1,112 @@
|
|||
# JPA Server Configuration Options
|
||||
|
||||
## External/Absolute Resource References
|
||||
|
||||
Clients may sometimes post resources to your server that contain absolute resource references. For example, consider the following resource:
|
||||
|
||||
```xml
|
||||
<Patient xmlns="http://hl7.org/fhir">
|
||||
<id value="patient-infant-01"/>
|
||||
<name>
|
||||
<use value="official"/>
|
||||
<family value="Miller"/>
|
||||
<given value="Samuel"/>
|
||||
</name>
|
||||
<managingOrganization>
|
||||
<reference value="http://example.com/fhir/Organization/123"/>
|
||||
</managingOrganization>
|
||||
</Patient>
|
||||
```
|
||||
|
||||
By default, the server will reject this reference, as only local references are permitted by the server. This can be changed however.
|
||||
|
||||
If you want the server to recognize that this URL is actually a local reference (i.e. because the server will be deployed to the base URL `http://example.com/fhir/`) you can configure the server to recognize this URL via the following DaoConfig setting:
|
||||
|
||||
```java
|
||||
@Bean
|
||||
public DaoConfig daoConfig() {
|
||||
DaoConfig retVal = new DaoConfig();
|
||||
// ... other config ...
|
||||
retVal.getTreatBaseUrlsAsLocal().add("http://example.com/fhir/");
|
||||
return retVal;
|
||||
}
|
||||
```
|
||||
|
||||
On the other hand, if you want the server to be configurable to allow remote references, you can set this with the configuration below. Using the `setAllowExternalReferences` means that it will be possible to search for references that refer to these external references.
|
||||
|
||||
```java
|
||||
@Bean
|
||||
public DaoConfig daoConfig() {
|
||||
DaoConfig retVal = new DaoConfig();
|
||||
// Allow external references
|
||||
retVal.setAllowExternalReferences(true);
|
||||
|
||||
// If you are allowing external references, it is recommended to
|
||||
// also tell the server which references actually will be local
|
||||
retVal.getTreatBaseUrlsAsLocal().add("http://mydomain.com/fhir");
|
||||
return retVal;
|
||||
}
|
||||
```
|
||||
|
||||
## Logical References
|
||||
|
||||
In some cases, you may have references which are <i>Logical References</i>,
|
||||
which means that they act as an identifier and not necessarily as a literal
|
||||
web address.
|
||||
|
||||
A common use for logical references is in references to conformance resources, such as ValueSets, StructureDefinitions, etc. For example, you might refer to the ValueSet `http://hl7.org/fhir/ValueSet/quantity-comparator` from your own resources. In this case, you are not necessarily telling the server that this is a real address that it should resolve, but rather that this is an identifier for a ValueSet where `ValueSet.url` has the given URI/URL.
|
||||
|
||||
HAPI can be configured to treat certain URI/URL patterns as logical by using the DaoConfig#setTreatReferencesAsLogical property (see [JavaDoc](/hapi-fhir/apidocs/hapi-fhir-jpaserver-base/ca/uhn/fhir/jpa/dao/DaoConfig.html#setTreatReferencesAsLogical(java.util.Set))).
|
||||
|
||||
For example:
|
||||
|
||||
```java
|
||||
// Treat specific URL as logical
|
||||
myDaoConfig.getTreatReferencesAsLogical().add("http://mysystem.com/ValueSet/cats-and-dogs");
|
||||
|
||||
// Treat all references with given prefix as logical
|
||||
myDaoConfig.getTreatReferencesAsLogical().add("http://mysystem.com/mysystem-vs-*");
|
||||
```
|
||||
|
||||
# Search Result Caching
|
||||
|
||||
By default, search results will be cached for one minute. This means that if a client performs a search for <code>Patient?name=smith</code> and gets back 500 results, if a client performs the same search within 60000 milliseconds the previously loaded search results will be returned again. This also means that any new Patient resources named "Smith" within the last minute will not be reflected in the results.
|
||||
|
||||
Under many normal scenarios this is a n acceptable performance tradeoff, but in some cases it is not. If you want to disable caching, you have two options:
|
||||
|
||||
### Globally Disable / Change Caching Timeout
|
||||
|
||||
You can change the global cache using the following setting:
|
||||
|
||||
```java
|
||||
myDaoConfig.setReuseCachedSearchResultsForMillis(null);
|
||||
```
|
||||
|
||||
### Disable Cache at the Request Level
|
||||
|
||||
Clients can selectively disable caching for an individual request using the Cache-Control header:
|
||||
|
||||
```http
|
||||
Cache-Control: no-cache
|
||||
```
|
||||
|
||||
### Disable Paging at the Request Level
|
||||
|
||||
If the client knows that they will only want a small number of results (for example, a UI containing 20 results is being shown and the client knows that they will never load the next page of results) the client
|
||||
may also use the <code>no-store</code> directive along with a HAPI FHIR extension called <code>max-results</code> in order to specify that only the given number of results should be fetched. This directive disabled paging entirely for the request and causes the request to return immediately when the given number of results is found. This can cause a noticeable performance improvement in some cases.
|
||||
|
||||
```http
|
||||
Cache-Control: no-store, max-results=20
|
||||
```
|
||||
|
||||
# Additional Information
|
||||
|
||||
* [This page](https://www.openhealthhub.org/t/hapi-terminology-server-uk-snomed-ct-import/592) has information on loading national editions (UK specifically) of SNOMED CT files into the database.
|
||||
|
||||
# Cascading Deletes
|
||||
|
||||
An interceptor called `CascadingDeleteInterceptor` may be registered against the Server. When this interceptor is enabled, cascading deletes may be performed using either of the following:
|
||||
|
||||
* The request may include the following parameter: `_cascade=delete`
|
||||
* The request may include the following header: `X-Cascade: delete`
|
||||
|
|
@ -4,115 +4,3 @@ The HAPI FHIR [Plain Server](/hapi-fhir/docs/server_plain/introduction.html) mod
|
|||
|
||||
HAPI also provides a persistence module which can be used to provide a complete RESTful server implementation, backed by a database of your choosing. This module uses the [JPA 2.0](http://en.wikipedia.org/wiki/Java_Persistence_API) API to store data in a database without depending on any specific database technology.
|
||||
|
||||
# Configuration Options
|
||||
|
||||
## External/Absolute Resource References
|
||||
|
||||
Clients may sometimes post resources to your server that contain absolute resource references. For example, consider the following resource:
|
||||
|
||||
```xml
|
||||
<Patient xmlns="http://hl7.org/fhir">
|
||||
<id value="patient-infant-01"/>
|
||||
<name>
|
||||
<use value="official"/>
|
||||
<family value="Miller"/>
|
||||
<given value="Samuel"/>
|
||||
</name>
|
||||
<managingOrganization>
|
||||
<reference value="http://example.com/fhir/Organization/123"/>
|
||||
</managingOrganization>
|
||||
</Patient>
|
||||
```
|
||||
|
||||
By default, the server will reject this reference, as only local references are permitted by the server. This can be changed however.
|
||||
|
||||
If you want the server to recognize that this URL is actually a local reference (i.e. because the server will be deployed to the base URL `http://example.com/fhir/`) you can configure the server to recognize this URL via the following DaoConfig setting:
|
||||
|
||||
```java
|
||||
@Bean
|
||||
public DaoConfig daoConfig() {
|
||||
DaoConfig retVal = new DaoConfig();
|
||||
// ... other config ...
|
||||
retVal.getTreatBaseUrlsAsLocal().add("http://example.com/fhir/");
|
||||
return retVal;
|
||||
}
|
||||
```
|
||||
|
||||
On the other hand, if you want the server to be configurable to allow remote references, you can set this with the configuration below. Using the `setAllowExternalReferences` means that it will be possible to search for references that refer to these external references.
|
||||
|
||||
```java
|
||||
@Bean
|
||||
public DaoConfig daoConfig() {
|
||||
DaoConfig retVal = new DaoConfig();
|
||||
// Allow external references
|
||||
retVal.setAllowExternalReferences(true);
|
||||
|
||||
// If you are allowing external references, it is recommended to
|
||||
// also tell the server which references actually will be local
|
||||
retVal.getTreatBaseUrlsAsLocal().add("http://mydomain.com/fhir");
|
||||
return retVal;
|
||||
}
|
||||
```
|
||||
|
||||
## Logical References
|
||||
|
||||
In some cases, you may have references which are <i>Logical References</i>,
|
||||
which means that they act as an identifier and not necessarily as a literal
|
||||
web address.
|
||||
|
||||
A common use for logical references is in references to conformance resources, such as ValueSets, StructureDefinitions, etc. For example, you might refer to the ValueSet `http://hl7.org/fhir/ValueSet/quantity-comparator` from your own resources. In this case, you are not necessarily telling the server that this is a real address that it should resolve, but rather that this is an identifier for a ValueSet where `ValueSet.url` has the given URI/URL.
|
||||
|
||||
HAPI can be configured to treat certain URI/URL patterns as logical by using the DaoConfig#setTreatReferencesAsLogical property (see [JavaDoc](/hapi-fhir/apidocs/hapi-fhir-jpaserver-base/ca/uhn/fhir/jpa/dao/DaoConfig.html#setTreatReferencesAsLogical(java.util.Set))).
|
||||
|
||||
For example:
|
||||
|
||||
```java
|
||||
// Treat specific URL as logical
|
||||
myDaoConfig.getTreatReferencesAsLogical().add("http://mysystem.com/ValueSet/cats-and-dogs");
|
||||
|
||||
// Treat all references with given prefix as logical
|
||||
myDaoConfig.getTreatReferencesAsLogical().add("http://mysystem.com/mysystem-vs-*");
|
||||
```
|
||||
|
||||
# Search Result Caching
|
||||
|
||||
By default, search results will be cached for one minute. This means that if a client performs a search for <code>Patient?name=smith</code> and gets back 500 results, if a client performs the same search within 60000 milliseconds the previously loaded search results will be returned again. This also means that any new Patient resources named "Smith" within the last minute will not be reflected in the results.
|
||||
|
||||
Under many normal scenarios this is a n acceptable performance tradeoff, but in some cases it is not. If you want to disable caching, you have two options:
|
||||
|
||||
### Globally Disable / Change Caching Timeout
|
||||
|
||||
You can change the global cache using the following setting:
|
||||
|
||||
```java
|
||||
myDaoConfig.setReuseCachedSearchResultsForMillis(null);
|
||||
```
|
||||
|
||||
### Disable Cache at the Request Level
|
||||
|
||||
Clients can selectively disable caching for an individual request using the Cache-Control header:
|
||||
|
||||
```http
|
||||
Cache-Control: no-cache
|
||||
```
|
||||
|
||||
### Disable Paging at the Request Level
|
||||
|
||||
If the client knows that they will only want a small number of results (for example, a UI containing 20 results is being shown and the client knows that they will never load the next page of results) the client
|
||||
may also use the <code>no-store</code> directive along with a HAPI FHIR extension called <code>max-results</code> in order to specify that only the given number of results should be fetched. This directive disabled paging entirely for the request and causes the request to return immediately when the given number of results is found. This can cause a noticeable performance improvement in some cases.
|
||||
|
||||
```http
|
||||
Cache-Control: no-store, max-results=20
|
||||
```
|
||||
|
||||
# Additional Information
|
||||
|
||||
* [This page](https://www.openhealthhub.org/t/hapi-terminology-server-uk-snomed-ct-import/592) has information on loading national editions (UK specifically) of SNOMED CT files into the database.
|
||||
|
||||
# Cascading Deletes
|
||||
|
||||
An interceptor called `CascadingDeleteInterceptor` may be registered against the Server. When this interceptor is enabled, cascading deletes may be performed using either of the following:
|
||||
|
||||
* The request may include the following parameter: `_cascade=delete`
|
||||
* The request may include the following header: `X-Cascade: delete`
|
||||
|
||||
|
|
|
@ -47,6 +47,21 @@
|
|||
<skip>true</skip>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<dumpOnExit>true</dumpOnExit>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>default-prepare-agent</id>
|
||||
<goals>
|
||||
<goal>prepare-agent</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
||||
</build>
|
||||
|
|
|
@ -173,4 +173,26 @@
|
|||
</plugins>
|
||||
</reporting>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<dumpOnExit>true</dumpOnExit>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>default-prepare-agent</id>
|
||||
<goals>
|
||||
<goal>prepare-agent</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
|
|
|
@ -277,7 +277,7 @@ public class SearchFilterParser {
|
|||
cursor++;
|
||||
result.setFilter(parseOpen());
|
||||
if (peek() != FilterLexType.fsltCloseSq) {
|
||||
throw new FilterSyntaxException(String.format("Expected ']' at %d but found %c",
|
||||
throw new FilterSyntaxException(String.format("Expected ']' at %d but found %s",
|
||||
cursor,
|
||||
peekCh()));
|
||||
}
|
||||
|
@ -287,13 +287,13 @@ public class SearchFilterParser {
|
|||
if (peek() == FilterLexType.fsltDot) {
|
||||
cursor++;
|
||||
if (peek() != FilterLexType.fsltName) {
|
||||
throw new FilterSyntaxException(String.format("Unexpected Character %c at %d",
|
||||
throw new FilterSyntaxException(String.format("Unexpected Character %s at %d",
|
||||
peekCh(),
|
||||
cursor));
|
||||
}
|
||||
result.setNext(parsePath(consumeName()));
|
||||
} else if (result.getFilter() != null) {
|
||||
throw new FilterSyntaxException(String.format("Expected '.' at %d but found %c",
|
||||
throw new FilterSyntaxException(String.format("Expected '.' at %d but found %s",
|
||||
cursor,
|
||||
peekCh()));
|
||||
}
|
||||
|
|
|
@ -932,7 +932,10 @@ public class SearchCoordinatorSvcImpl implements ISearchCoordinatorSvc {
|
|||
|
||||
private void doSaveSearch() {
|
||||
|
||||
Search newSearch = mySearchCacheSvc.save(mySearch);
|
||||
// This is an attempt to track down an intermittent test
|
||||
// failure in testAsyncSearchLargeResultSetBigCountSameCoordinator
|
||||
Object searchObj = mySearchCacheSvc.save(mySearch);
|
||||
Search newSearch = (Search) searchObj;
|
||||
|
||||
// mySearchDao.save is not supposed to return null, but in unit tests
|
||||
// it can if the mock search dao isn't set up to handle that
|
||||
|
|
|
@ -550,6 +550,7 @@ public class TermLoaderSvcImpl implements ITermLoaderSvc {
|
|||
cs.setUrl(SCT_URI);
|
||||
cs.setName("SNOMED CT");
|
||||
cs.setContent(CodeSystem.CodeSystemContentMode.NOTPRESENT);
|
||||
cs.setStatus(Enumerations.PublicationStatus.ACTIVE);
|
||||
IIdType target = storeCodeSystem(theRequestDetails, codeSystemVersion, cs, null, null);
|
||||
|
||||
return new UploadStatistics(code2concept.size(), target);
|
||||
|
|
|
@ -349,7 +349,10 @@ public class SearchCoordinatorSvcImplTest {
|
|||
List<ResourcePersistentId> pids = createPidSequence(800);
|
||||
IResultIterator iter = new SlowIterator(pids.iterator(), 2);
|
||||
when(mySearchBuilder.createQuery(same(params), any(), any())).thenReturn(iter);
|
||||
when(mySearchCacheSvc.save(any())).thenAnswer(t -> t.getArguments()[0]);
|
||||
when(mySearchCacheSvc.save(any())).thenAnswer(t ->{
|
||||
ourLog.info("Saving search");
|
||||
return t.getArgument( 0, Search.class);
|
||||
});
|
||||
doAnswer(loadPids()).when(mySearchBuilder).loadResourcesByPid(any(Collection.class), any(Collection.class), any(List.class), anyBoolean(), any());
|
||||
|
||||
IBundleProvider result = mySvc.registerSearch(myCallingDao, params, "Patient", new CacheControlDirective(), null);
|
||||
|
|
|
@ -21,12 +21,15 @@ package ca.uhn.fhir.jpa.migrate;
|
|||
*/
|
||||
|
||||
import ca.uhn.fhir.jpa.migrate.taskdef.BaseTask;
|
||||
import org.flywaydb.core.api.MigrationInfoService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Objects;
|
||||
|
||||
public abstract class BaseMigrator {
|
||||
public abstract class BaseMigrator implements IMigrator {
|
||||
private static final Logger ourLog = LoggerFactory.getLogger(BaseMigrator.class);
|
||||
|
||||
private boolean myDryRun;
|
||||
private boolean myNoColumnShrink;
|
||||
|
@ -35,8 +38,7 @@ public abstract class BaseMigrator {
|
|||
private String myConnectionUrl;
|
||||
private String myUsername;
|
||||
private String myPassword;
|
||||
|
||||
public abstract void migrate();
|
||||
private List<BaseTask.ExecutedStatement> myExecutedStatements = new ArrayList<>();
|
||||
|
||||
public boolean isDryRun() {
|
||||
return myDryRun;
|
||||
|
@ -54,10 +56,6 @@ public abstract class BaseMigrator {
|
|||
myNoColumnShrink = theNoColumnShrink;
|
||||
}
|
||||
|
||||
public abstract Optional<MigrationInfoService> getMigrationInfo();
|
||||
|
||||
public abstract void addTasks(List<BaseTask<?>> theMigrationTasks);
|
||||
|
||||
public DriverTypeEnum getDriverType() {
|
||||
return myDriverType;
|
||||
}
|
||||
|
@ -97,4 +95,26 @@ public abstract class BaseMigrator {
|
|||
public void setOutOfOrderPermitted(boolean theOutOfOrderPermitted) {
|
||||
myOutOfOrderPermitted = theOutOfOrderPermitted;
|
||||
}
|
||||
|
||||
public void addExecutedStatements(List theExecutedStatements) {
|
||||
myExecutedStatements.addAll(theExecutedStatements);
|
||||
}
|
||||
|
||||
protected StringBuilder buildExecutedStatementsString() {
|
||||
StringBuilder statementBuilder = new StringBuilder();
|
||||
String lastTable = null;
|
||||
for (BaseTask.ExecutedStatement next : myExecutedStatements) {
|
||||
if (!Objects.equals(lastTable, next.getTableName())) {
|
||||
statementBuilder.append("\n\n-- Table: ").append(next.getTableName()).append("\n");
|
||||
lastTable = next.getTableName();
|
||||
}
|
||||
|
||||
statementBuilder.append(next.getSql()).append(";\n");
|
||||
|
||||
for (Object nextArg : next.getArguments()) {
|
||||
statementBuilder.append(" -- Arg: ").append(nextArg).append("\n");
|
||||
}
|
||||
}
|
||||
return statementBuilder;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,13 +70,14 @@ public class FlywayMigration implements JavaMigration {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void migrate(Context theContext) throws Exception {
|
||||
public void migrate(Context theContext) {
|
||||
myTask.setDriverType(myFlywayMigrator.getDriverType());
|
||||
myTask.setDryRun(myFlywayMigrator.isDryRun());
|
||||
myTask.setNoColumnShrink(myFlywayMigrator.isNoColumnShrink());
|
||||
myTask.setConnectionProperties(myConnectionProperties);
|
||||
try {
|
||||
myTask.execute();
|
||||
myFlywayMigrator.addExecutedStatements(myTask.getExecutedStatements());
|
||||
} catch (SQLException e) {
|
||||
String description = myTask.getDescription();
|
||||
if (isBlank(description)) {
|
||||
|
|
|
@ -62,7 +62,7 @@ public class FlywayMigrator extends BaseMigrator {
|
|||
myMigrationTableName = theMigrationTableName;
|
||||
}
|
||||
|
||||
public void addTask(BaseTask<?> theTask) {
|
||||
public void addTask(BaseTask theTask) {
|
||||
myTasks.add(new FlywayMigration(theTask, this));
|
||||
}
|
||||
|
||||
|
@ -72,6 +72,10 @@ public class FlywayMigrator extends BaseMigrator {
|
|||
Flyway flyway = initFlyway(connectionProperties);
|
||||
flyway.repair();
|
||||
flyway.migrate();
|
||||
if (isDryRun()) {
|
||||
StringBuilder statementBuilder = buildExecutedStatementsString();
|
||||
ourLog.info("SQL that would be executed:\n\n***********************************\n{}***********************************", statementBuilder);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw e;
|
||||
}
|
||||
|
@ -93,7 +97,7 @@ public class FlywayMigrator extends BaseMigrator {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void addTasks(List<BaseTask<?>> theTasks) {
|
||||
public void addTasks(List<BaseTask> theTasks) {
|
||||
theTasks.forEach(this::addTask);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
package ca.uhn.fhir.jpa.migrate;
|
||||
|
||||
/*-
|
||||
* #%L
|
||||
* HAPI FHIR JPA Server - Migration
|
||||
* %%
|
||||
* Copyright (C) 2014 - 2019 University Health Network
|
||||
* %%
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
import ca.uhn.fhir.jpa.migrate.taskdef.BaseTask;
|
||||
import org.flywaydb.core.api.MigrationInfoService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface IMigrator {
|
||||
|
||||
void migrate();
|
||||
|
||||
Optional<MigrationInfoService> getMigrationInfo();
|
||||
|
||||
void addTasks(List<BaseTask> theMigrationTasks);
|
||||
}
|
|
@ -113,10 +113,10 @@ public class JdbcUtils {
|
|||
return myLength;
|
||||
}
|
||||
|
||||
public boolean equals(BaseTableColumnTypeTask.ColumnTypeEnum theColumnType, Long theColumnLength) {
|
||||
return myColumnTypeEnum == theColumnType && (myLength == null || myLength.equals(theColumnLength));
|
||||
public boolean equals(BaseTableColumnTypeTask.ColumnTypeEnum theTaskColumnType, Long theTaskColumnLength) {
|
||||
ourLog.debug("Comparing existing {} {} to new {} {}", myColumnTypeEnum, myLength, theTaskColumnType, theTaskColumnLength);
|
||||
return myColumnTypeEnum == theTaskColumnType && (theTaskColumnLength == null || theTaskColumnLength.equals(myLength));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -244,6 +244,7 @@ public class JdbcUtils {
|
|||
|
||||
}
|
||||
|
||||
ourLog.debug("Unable to find column {} in table {}.", theColumnName, theTableName);
|
||||
return null;
|
||||
|
||||
} catch (SQLException e) {
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
package ca.uhn.fhir.jpa.migrate;
|
||||
|
||||
/*-
|
||||
* #%L
|
||||
* HAPI FHIR JPA Server - Migration
|
||||
* %%
|
||||
* Copyright (C) 2014 - 2019 University Health Network
|
||||
* %%
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
import ca.uhn.fhir.jpa.migrate.taskdef.BaseTask;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||
|
||||
public class MigrationTaskSkipper {
|
||||
private static final Logger ourLog = LoggerFactory.getLogger(MigrationTaskSkipper.class);
|
||||
|
||||
public static void setDoNothingOnSkippedTasks(Collection<BaseTask> theTasks, String theSkipVersions) {
|
||||
if (isBlank(theSkipVersions) || theTasks.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
Set<String> skippedVersionSet = Stream.of(theSkipVersions.split(","))
|
||||
.map(String::trim)
|
||||
// TODO KHS filter out all characters that aren't numbers, periods and underscores
|
||||
.map(s -> s.replace("'", ""))
|
||||
.map(s -> s.replace("\"", ""))
|
||||
.filter(StringUtils::isNotBlank)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
for (BaseTask task : theTasks) {
|
||||
if (skippedVersionSet.contains(task.getFlywayVersion())) {
|
||||
ourLog.info("Will skip {}: {}", task.getFlywayVersion(), task.getDescription());
|
||||
task.setDoNothing(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -79,7 +79,7 @@ public class Migrator {
|
|||
|
||||
myConnectionProperties = myDriverType.newConnectionProperties(myConnectionUrl, myUsername, myPassword);
|
||||
try {
|
||||
for (BaseTask<?> next : myTasks) {
|
||||
for (BaseTask next : myTasks) {
|
||||
next.setDriverType(myDriverType);
|
||||
next.setConnectionProperties(myConnectionProperties);
|
||||
next.setDryRun(myDryRun);
|
||||
|
@ -125,7 +125,7 @@ public class Migrator {
|
|||
|
||||
}
|
||||
|
||||
public void addTasks(List<BaseTask<?>> theTasks) {
|
||||
public void addTasks(List<BaseTask> theTasks) {
|
||||
theTasks.forEach(this::addTask);
|
||||
}
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue