QueryBuilder and UpdateBuilder
Another option to call the Internet Computer canisters from Java is to use QueryBuilder and UpdateBuilder.
Use these options if direct manipulation with Candid data is required or there is a requirement for dynamic invocation.
List<IDLValue> args = new ArrayList<IDLValue>();
BigInteger intValue = new BigInteger("10000");
args.add(IDLValue.create(intValue));
IDLArgs idlArgs = IDLArgs.create(args);
byte[] payload = idlArgs.toBytes();
Optionally, the expiration time can be set using Methods expireAfter or expireAt.
Pass binary payload as a parameter of arg method and execute using Method call.
CompletableFuture<byte[]> response = QueryBuilder
.create(agent, Principal.fromString(canisterid), "echoInt")
.expireAfter(Duration.ofMinutes(3))
.arg(payload)
.call();
UpdateBuilder uses very similar syntax to Method create, but has one extra method, callAndWait ,if explicit Waiter definition is required.
CompletableFuture<byte[]> response = UpdateBuilder
.create(agent, Principal.fromString(canisterid), "greet")
.expireAfter(Duration.ofMinutes(3))
.arg(payload)
.callAndWait(Waiter.create(60, 5));
Use this to convert response payload to Java objects from binary Candid response payload.
byte[] output = response.get();
IDLArgs outArgs = IDLArgs.fromBytes(output);
Last modified 8mo ago