Java Unified SDK v9.0.0-beta2

We were nearing a release of our next major version of the Java SDK - version 9.0.0. This is the first beta, and includes all the major changes, with subsequent betas addressing bug fixes. The full release can be found here

📘

Note

It sometimes takes a few days to be indexed by the Maven Central website.

Changes since beta1

  • Remove docs/ directory from repo since we now use https://developer.bitpay.com
  • Added missing fields to models
  • Update DocBlocks to use new documentation site
  • Improved client creation to use a singleton pattern, to prevent unnecessary re-instantiation
  • General cleanup, added additional missing fields, added links to documentation

Highlights

Client Class Breakdown

The Client class was very large, at over 2,000 lines. To make this easier to work on and more testable, we have:

  • Implemented a facade for the client
  • Create a class to handle generic REST GET, PUT, POST, and DELETE
  • Created separate classes for each resource, providing a better representation of the API
  • Updated BitPaySetup class so that configuration and keys can be generated
  • Add unit and integration tests for new client classes

Implement POS Facade

Prior to version 9.0.0, we had two separate SDKs, the "Light" SDK, which could only use the POS facade, and the "Full" SDK, which used the merchant and payout facades. This created the need for additional effort both in maintaining and implementing the SDK.

As of version 9.0.0, the SDK supports both methods. You can use just the POS facade, which is limited in feature set but does not require signed requests (no private key to manage) or with the merchant/payout facade, which has more functionality but is more complex to implement.

This provides an easier upgrade path and reduces the duplicate work of maintaining two separate SDKs regarding dependency upgrades, bug fixes, etc.

Functional Test Suite

A functional test suite has been added to the codebase that will run against the test API. Due to there being so many outside variables from external resources, this does not run in the GitHub Actions pipeline.