A Java SDK for the Fusion platform API
Fusion by J.P. Morgan is a cloud-native data platform for institutional investors, providing end-to-end data management, analytics, and reporting solutions across the investment lifecycle. The platform allows clients to seamlessly integrate and combine data from multiple sources into a single data model that delivers the benefits and scale and reduces costs, along with the ability to more easily unlock timely analysis and insights. Fusion's open data architecture supports flexible distribution, including partnerships with cloud and data providers, all managed by J.P. Morgan data experts.
For more information, please visit fusion.jpmorgan.com
:warning: This SDK is undergoing active development towards a stable release. While the version remains < 1.0.0 there may be some changes to the public API. We will endeavour to avoid that or keep to a minimum where possible
The Fusion SDK is published to Maven Central and can be retrieved from there using standard dependency resolution tools. For example, with Maven, add this to the dependencies in your POM:
<dependency>
<groupId>io.github.jpmorganchase.fusion</groupId>
<artifactId>fusion-sdk</artifactId>
<version>0.0.11</version>
</dependency>
import io.github.jpmorganchase.fusion.Fusion;
Once you have the dependency added to your project and imports configured, you will need an instance of the Fusion class to interact with the API. This will be the primary way to use Fusion from your own code. To create an instance, use the builder from the class. Examples below show different ways to intialise the Fusion object depending on your authentication mechanism.
Fusion fusion = Fusion.builder()
.secretBasedCredentials(CLIENT_ID, CLIENT_SECRET, RESOURCE, AUTH_SERVER_URL)
.build();
This will configure the SDK to retrieve a bearer token from an OAuth server using the supplied parameters:
When configured in this way, the SDK will retrieve the token from the OAuth server prior to the first call you make to Fusion. On each subsequent call the same token will be re-used until it is close to expiry, at which point the SDK will retrieve a new token. Use this option if you want the SDK to manage the tokens on your behalf.
Fusion fusion = Fusion.builder().configuration(FusionConfiguration.builder()
.credentialsPath(CREDENTIALS_FILE_PATH)
.build())
.build();
This will configure the SDK to retrieve a bearer token from an OAuth server using configuration details stored in a file at the supplied path _CREDENTIAL_FILEPATH
Configuration files are JSON in the following format:
{
"resource": "JPMC:URI:RS-12345-App-ENV",
"client_secret": "aClientSecret",
"auth_url": "https://authserver.domain.com/as/token.oauth2",
"client_id": "aClientId"
}
Where:
Similar to the above option, this will configure the SDK to manage the tokens on your behalf. Use this option if you want the OAuth configuration to be stored on the local filesystem.
Fusion fusion = Fusion.builder().bearerToken(BEARER_TOKEN).build();
Here _BEARERTOKEN is the String value of a bearer token you have retrieved which provides access to the Fusion API. You can use this mechanism in cases where you already have a means to retrieve the token and would prefer to manage that within your application than having the SDK manage that on your behalf.
Note than when your token has expired, you will need to pass a new token to the Fusion object by calling updateBearerToken, passing the new value.
Fusion fusion = Fusion.builder().configuration(FusionConfiguration.builder()
.build())
.build();
Once you have initialised the Fusion object, you can interact with it to retrieve metadata or download distribution files for any datasets that you need.
Map<String, Catalog> catalogs = fusion.listCatalogs();
Map<String, Dataset> datasets = fusion.listDatasets("my-catalog");
Map<String, Attribute> attributes = fusion.listAttributes("my-catalog", "my-dataset");
Map<String, DatasetSeries> members = fusion.listDatasetMembers("my-catalog", "my-dataset");
Map<String, Distribution> distributions = fusion.listDistributions("my-catalog", "my-dataset", "my-series-member");
fusion.download("my-catalog", "my-dataset", "my-series-member", "csv", "/downloads/distributions");
InputStream is = fusion.downloadStream("my-catalog", "my-dataset", "my-series-member", "csv");
The Fusion SDK makes log calls to the SLF4J API. If you wish to see the logging you must configure an SLF4J implementation for your application. See the SLF4J manual for details.
All exceptions thrown from calls to the Fusion object are runtime exceptions. These are documented in the Javadoc for the class itself. Runtime exceptions are used in place of checked exception in order to provide flexibility to users to handle exceptions within the most appropriate layer of your application, without requiring catching, wrapping and rethrowing.