Released: TBD
- Update Commons Logging, Gradle, Gradle Plugins, HttpClient, HttpCore, and JSONObject versions
- Remove defunct FileNotification API and uses
Released: 29 July 2024
- Add support for
auditUserComment
field for assay import - Add support for
allowPlateMetadata
,plateMetadata
fields for assay plate support - Deprecate
GetContainersResponse
permissions methods which are incompatible with LabKey Server v24.8+ - Update Commons Codec, Commons Logging, Gradle, Gradle Plugins, HttpCore, and JSONObject versions
Released: 26 February 2024
- Issue 49238: Fix so all command responses correctly decode as UTF-8.
- Add MoveRowsCommand to query
- Earliest compatible LabKey Server version: 24.1.0
- Remove deprecated
GetDomainCommand
; useGetDomainDetailsCommand
instead. - Remove deprecated method
RowsResponse.getRequiredVersion()
. - Deprecate
GetUsersCommand
methodsgetIncludeDeactivated()
andsetIncludeDeactivated()
; usegetIncludeInactive()
andsetIncludeInactive()
instead. - Remove Hamcrest references (unused)
- Update
ApiKeyCredentialsProvider
to respond to server auth challenges with theapikey
header and use the session on subsequent requests. - Update Commons Logging, Gradle, Gradle Plugins, HttpClient, and HttpCore versions
Released: 1 December 2023
- Encode SQL parameters passed by
ExecuteSqlCommand
andSqlExecuteCommand
to avoid rejection by web application firewalls- Earliest compatible LabKey Server version: 23.9.0
- These commands are no longer compatible with earlier versions of LabKey Server (23.8.x and before) by default. However,
if targeting an older server, calling
ExecuteSqlCommand.setWafEncoding(false)
will restore the previous behavior.
- Update HttpCore, JSON-java, Gradle Plugins, and Gradle versions
Released: 7 September 2023
- Update to Gradle 8.3 and adjust away from deprecated syntax
- Add Ontology and Lineage filter type operators
- Add
TotpManager
, a simple helper that generates TOTP one-time passwords - Update Commons Codec, HttpCore, and Gradle Plugins versions
Released: 3 May 2023
- Add
RenameContainerCommand
andRenameContainerResponse
Released: 3 March 2023
- Delegate first request behavior to the configured
CredentialsProvider
. Connection-based providers invokelogin-ensureLogin.api
and connection-less providers invokelogin-whoAmI.api
. - Restore connection-based authentication for
BasicCredentialsProvider
- Add logging to
NetrcFileParser
to help with debugging authentication problems - Optional parameters to
GetContainersCommand
to reduce the size of the response payload - Upgrade to most recent JSON-java, Gradle, and Gradle Plugins versions
Released: 30 January 2023
- Fix regression introduced in 5.0.0:
RowsResponse.fixupParsedData()
was called before_requiredVersion
was set. This caused the fixup method to skipBigDecimal
toDouble
conversions in the returned data maps.
Released: 24 January 2023
- Refactor the
Command
class hierarchy:- Add
GetCommand
, new abstract base class for all commands that use get - Make
Command
andPostCommand
abstract - Add
SimpleGetCommand
, new concrete class used (instead ofCommand
) to invoke GET API actions without creating a subclass - Add
SimplePostCommand
, new concrete class used (instead ofPostCommand
) to invoke POST API actions without creating a subclass
- Add
- Refactor parameter handling for consistency:
createParameterMap()
is now used by subclasses to create and populate a mutable map of URL parametersgetParameters()
now returns an immutable copy of the current URL parameter map for external use, typically logging or testing- Commands no longer stash and reuse the parameter map;
createParameterMap()
always creates a new map. setParameters()
is now available only onSimpleGetCommand
andSimplePostCommand
. CustomGetCommand
andPostCommand
subclasses that need to specify parameters are expected to overridecreateParameterMap()
.setJsonObject()
is now available only onSimplePostCommand
. CustomPostCommand
subclasses that need to post JSON are expected to overridegetJsonObject()
.
- Stop passing command subclasses when constructing every
CommandResponse
. The two response classes that need this now implement it without burdening all other commands. - Introduce
HasRequiredVersion
interface and use it when instantiatingCommandResponse
subclasses that need required version - Remove all
Command
copy constructors. Same rationale as the earlier removal ofcopy
methods. - Switch
SelectRowsCommand
andNAbRunsCommand
to post their parameters as JSON - Fix
NAbReplicate
to handle"NaN"
values - Remove
CommandException
fromgetHttpRequest()
throws list - Adjust the
Demo.java
andTest.java
tests to match current sample data andCommand
hierarchy changes
Released: 15 January 2023
- Fix regression introduced in 4.3.0:
SelectRowsCommand
should create a fresh parameter map for every invocation ofgetParameters()
Released: 11 January 2023
- Issue 47030: Switch
SelectRowsCommand
andNAbRunsCommand
to always use POST - Add support for
includeTotalCount
,includeMetadata
, andignoreFilter
flags toBaseQueryCommand
and reconcile duplicate parameter handling code vs. SelectRowsCommand - Add support for
includeTitle
andincludeViewDataUrl
flags toGetQueriesCommand
Released: 10 January 2023
- Refactor repository layout, removing unnecessary
labkey-client-api
folder - Upgrade to most recent Gradle, Gradle Plugins, and HttpClient versions
Released: 15 December 2022
- Migrate internal HTTP handling to use Apache HttpClient 5.2
- Generate and execute path-first URLs
- Add PrimaryStorage a new StorageItemTypes for non-freezer storage
Released: 26 October 2022
- Migrate to a new JSON library: JSON-java. The previous library, json-simple is no longer maintained (last released in early 2012) and lacks support for basic features like generics. This is an incompatible API change for developers who write their own Command classes; they will need to update their Command classes if/when they upgrade to v4.0.0. Developers who simply use Command classes should be able to upgrade without changes.
- API changes:
- Remove
copy
method from Commands. It was inconsistently implemented and served little purpose. - Remove
CommandResponse.getSourceCommand
. Functionality would vary wildly because of inconsistentCommand.copy
implementations. - Make the properties stashed by
ResponseObject
immutable.
- Remove
- Issue 46321: Remove
lib
directory fromfatJar
in favor of pulling dependencies via the published pom files when needed - Remove artifactory plugin since we use the maven
publish
command now
Released: 20 September 2022
- Add support for creating Freezer Manager freezer hierarchies via StorageController APIs (earliest compatible LabKey Server version: 22.10.0)
- CreateCommand, UpdateCommand, DeleteCommand
- Restore proactive authentication behavior. A change in v3.0.0 caused some invocations of
@NoPermissionsRequired
actions (e.g.,GetContainersCommand
) to use guest credentials instead of the configured user credentials. The library now always authenticates using the configured credentials, matching pre-v3.0.0 behavior.
Released: 14 September 2022
- Migrate internal HTTP handling to use Apache HttpClient 5.1.x
- Migrate from preemptive to challenge-response Basic authentication
- Switch
StopImpersonatingCommand
to disable redirects (mimicking previous behavior) - Add
Connection.stopImpersonating()
and deprecatestopImpersonate()
- Remove deprecated methods:
- ApiVersionException() (use constructor that takes contentType)
- CommandException() (use constructor that takes contentType)
- Connection.getBaseUrl() (use Connection.getBaseURI())
- CredentialsProvider.configureRequest() (use variant that takes a URI)
- Filter.NON_BLANK (use Filter.NONBLANK)
- Filter.getCaption() (use Filter.getDisplayValue())
- Filter.getName() (use Filter.getUrlKey())
- Filter.isDataValueRequired() (use Filter.isValueRequired())
- Remove SAS macros and wrapper classes
- Add
CreateFolderCommand
- Add
CreateProjectCommand
(earliest compatible LabKey Server version: 22.3.0) - Update
LogoutCommand
to use POST
Released: 25 July 2022
- Require Java 17 to build and run
Released: 14 July 2022
- Add Connection.setUserAgent() and Connection.getUserAgent()
- Set Java library user agent to "LabKey Java API"
- Set SAS library user agent to "LabKey SAS API"
Released: 7 July 2022
- Fix NPE when saving assay protocol with transform scripts
- Add derivationDataScope to PropertyDescriptor
Released: 20 April 2022
- Update gradle and various dependencies
- Update signature of
Connection
constructor - Issue 43380:
ImportDataCommand
missing options supported by the query-import.api endpoint - Remove
CheckForStudyReloadCommand
.
Released: 16 June 2021
- Issue 43246: Lineage query NPE while processing an UploadedFile
- Additional lineage options and support additional properties in response
- Update dependency version numbers
- Update to Gradle 7.1
Released : 05 November 2020
- Fix
selectedMetadataInputFormat
serialization - Add some missing dependency declarations
Released : 18 September 2020
- Fix pre-population of session ID and CSRF token in Connection
- Identify target server with a
URI
instead of aString
- Add support for Log4J 2
Released : 16 June 2020
- 7368: Conditional Formats of Fields
- Update FileNotificationCommand to do a POST, as now required
- Add documentation
Released: 16 April 2020
- small fixes to LABKEY.Experiment APIs
- Support impersonation via Java client API
Released: 19 March 2020
- Support for plate metadata in saveBatch and importRun APIs
- Don't post invalid 'rangeURI' to server
- Update source compatibility to 1.8
Released: 06 February 2020
- Migration to SemVer for library versioning. With 1.0.0 we will move away from using the LabKey server version and adopt the standard used in our other API libraries. Version 1.0.0 will succeed the previous published version of : 19.1.0.
- Support for truncating tables, there is a new TruncateTableCommand to expose this functionality.
- CRUD operations for Domains.
- Improved support for Assay data import. LoadAssayBatchCommand and SaveAssayRunCommand have been added to allow support for ad-hoc properties.
- New ListDomainsCommand.
- New SaveAssayRunsCommand.
- Update PropertyDescriptor to expose missing value toggling.