Java SDK
Installation
You can install the ODSL Java SDK using maven, include the following in the dependencies section of your pom.xml file:
<dependency>
<groupId>com.walkfares</groupId>
<artifactId>odsl-sdk</artifactId>
<version>${opendsl.version}</version>
</dependency>
note
You can either set a property for the version in the properties section or directly set the version in the dependency block
Connecting
To connect and log in to OpenDataDSL, use the login() command from the SDK, e.g.
package com.opendatadsl.examples;
import com.walkfares.odsl.var.Var;
import sdk.ODSL;
public class ConnectExample {
public static void main(String[] args) {
ODSL odsl = new ODSL();
odsl.login();
}
}
Reading Data
To read data from OpenDataDSL, use the get() command from the SDK with the syntax:
Var v = odsl.get({service}, {source}, {id});
Reading master data
To read some master data from the object service:
VarDynamicObject vdo = (VarDynamicObject) odsl.get("object", "private", "ICE.EL.NLB");
System.out.println(vdo.getProperties());
Reading a timeseries
VarTimeSeries ts = (VarTimeSeries) odsl.get("data", "private", "ICE.EL.NLB:SETTLE:M01");
System.out.println(ts.getValues());
Reading a curve
VarCurve vc = (VarCurve) odsl.get("data", "private", "ICE.EL.NLB:SETTLE:2023-10-20");
System.out.println(vc);
Writing Data
To write data to OpenDataDSL, use the update() command from the SDK with the syntax:
odsl.update({service}, {source}, Object);
Updating a curve
VarExpiryCalendar expcal = odsl.getContext().getExpiryCalendarCache().get("#RDCEM");
VarCurveDate ondate = new VarCurveDate(UTCDate.of(2023, 10, 26), expcal);
VarCurve curve = new VarCurve("C", ondate);
curve.add("M01", "12.1");
curve.add("M02", "12.2");
curve.add("M03", "12.3");
curve.add("M04", "12.4");
curve.add("M05", "12.5");
curve.add("M06", "12.6");
VarDynamicObject AAA = new VarDynamicObject("AAA");
AAA.add(curve);
odsl.update("object", "private", AAA);
Updating a curve management status
package com.opendatadsl.examples;
import com.walkfares.odsl.var.basic.VarSimpleObject;
import sdk.ODSL;
public class UpdateCurveManagement {
public static void main(String[] args) {
ODSL odsl = new ODSL();
odsl.setStage("local");
odsl.login();
// Update the export status for a curve build
VarSimpleObject build = new VarSimpleObject("#MATBAROFEX.AR.CRN.CME.FUT:SETTLE:2023-11-27");
build.newLevel("status").newLevel("export").set("SAP", "complete");
odsl.update("curve", "private", build, "build");
}
}
Listening for messages
You can create a message consumer and error processor to consume messages from an OpenDataDSL message queue.
The message consumer
package com.opendatadsl.messaging;
import java.util.function.Consumer;
import com.azure.messaging.servicebus.ServiceBusReceivedMessage;
import com.azure.messaging.servicebus.ServiceBusReceivedMessageContext;
public class MessageProcessor implements Consumer<ServiceBusReceivedMessageContext> {
@Override
public void accept(ServiceBusReceivedMessageContext context) {
ServiceBusReceivedMessage message = context.getMessage();
System.out.println(message.getBody().toString());
// Handle message body here
}
}
The error processor
package com.opendatadsl.messaging;
import java.util.function.Consumer;
import com.azure.messaging.servicebus.ServiceBusErrorContext;
public class ErrorProcessor implements Consumer<ServiceBusErrorContext> {
@Override
public void accept(ServiceBusErrorContext context) {
System.err.println("Error occurred while receiving message: " + context.getException());
}
}
The main message handler
package com.opendatadsl.messaging;
import sdk.ODSL;
import sdk.Messaging;
public class Main {
public static void main(String[] args) {
ODSL odsl = new ODSL();
odsl.login();
Messaging messaging = odsl.messaging();
// Read from the named queue and pass in your MessageProcessor and ErrorProcessor
messaging.receiveAndDelete("default", new MessageProcessor(), new ErrorProcessor());
}
}
Realtime Data
You can create a realtime data consumer to consume realtime messages from OpenDataDSL.
Simple RTD message consumer
package com.opendatadsl.realtime;
import java.util.function.Consumer;
public class RTDProcessor implements Consumer<Object> {
@Override
public void accept(Object t) {
System.out.println(t.toString());
}
}
The main message handler
package com.opendatadsl.realtime;
import sdk.ODSL;
import sdk.RTD;
public class MasterDataExample {
public static void main(String[] args) {
ODSL odsl = new ODSL();
odsl.login();
RTD rtd = odsl.RTD();
rtd.connect();
rtd.addMessageHandler("OnObjectUpdate", new RTDProcessor());
rtd.subscribe("object", "AAA");
}
}
A curve management example
package com.opendatadsl.realtime;
import sdk.ODSL;
import sdk.RTD;
public class CurveManagementExample {
public static void main(String[] args) {
ODSL odsl = new ODSL();
odsl.login();
RTD rtd = odsl.RTD();
rtd.connect();
rtd.addMessageHandler("OnCurveMessage", new RTDProcessor());
// Subscribe to the curve management messages for an ondate
rtd.subscribe("curve", "2023-11-27");
}
}