Улучшения экспликации корды (Java) - PullRequest
0 голосов
/ 28 февраля 2020

я хочу запустить ContractUpgradeFlow.Initiate поток в java проекте . просто так:

 CordaRPCOps proxy = client.start(rpcUsername, rpcPassword).getProxy();
 proxy.startFlowDynamic(ContractUpgradeFlow.Initiate.class,stateAndRef,newContractClass.class);

но есть ошибка:

Required type:Class<? extends FlowLogic<? extends T>>
Provided     :Class<Initiate>
reason: no instance(s) of type variable(s) T exist so that Initiate conforms to FlowLogic<? extends T>

версия kotlin такая: https://github.com/corda/samples/blob/release-V4/explicit-cordapp-upgrades/src/main/kotlin/com/upgrade/client/ClientWithLegacyConstraint.kt
Как мне запустить ContractUpgradeFlow.Initiate в java проекте?

1 Ответ

1 голос
/ 28 февраля 2020

По какой-то причине ContractUpgradeFlow.Initiate не идентифицируется как тип FlowLogic. вероятно, потому что это не прямой подтип FlowLogic. Спасибо за указание на это, я бы поднял ошибку для этого.

Однако вы можете использовать обходной путь, чтобы обойти это, создать новый поток и вызвать ContractUpgradeFlow.Initiate как подпоток.

@InitiatingFlow
@StartableByRPC
public class ExplicitUpgradeFlow extends FlowLogic<Void> {

    private final StateAndRef oldStateAndRef;
    private final Class newContractClass;

    public ExplicitUpgradeFlow(StateAndRef oldStateAndRef, Class newContractClass) {
        this.oldStateAndRef = oldStateAndRef;
        this.newContractClass = newContractClass;
    }

    @Override
    public Void call() throws FlowException {

        subFlow(new ContractUpgradeFlow.Initiate(oldStateAndRef, newContractClass));
        return null;
    }
}
...