net.corda.serialization.internal.amqp.IllegalCustomSerializerException во время запуска потока - PullRequest
0 голосов
/ 30 сентября 2019

Я получаю ошибку ниже при выполнении одного из потоков корда. Запустите получателя ApplyLoCFlow: "", IssingBank: "", advisingBank: "", locID: null, applicationDate: null, сумма: 1000, locStatus: "create": исключение: net.corda.serialization.internal.amqp.IllegalCustomSerializerException: исключение(java.lang.Throwable) -> Пользовательский сериализатор net.corda.serialization.internal.amqp.custom.ThrowableSerializer, зарегистрированный для сериализации нестандартно-сериализуемого типа класса net.corda.core.flows.IllegalFlowLogicException Пн 30 сентября 10:40:03 IST 2019 >>>

Пн 30 сентября 10:40:03 IST 2019 >>> [ОШИБКА] 10: 40: 03 + 0530 [pool-8-thread-2] команда.CRaSHSession.execute - Ошибка при оценке запроса 'start Получатель ApplyLoCFlow: "", IssingBank: "", advisingBank: "", locID: null, applicationDate: null, количество: 1000, locStatus: "create"' start Получатель ApplyLoCFlow: "",issingBank: "", advisingBank: "", locID: null, applicationDate: null, количество: 1000, locStatus: "create": исключение: net.corda.serialization.internal.amqp.IllegalCustomSerializerException:исключение (java.lang.Throwable) -> Пользовательский сериализатор net.corda.serialization.internal.amqp.custom.ThrowableSerializer, зарегистрированный для сериализации нестандартно-сериализуемого типа класса net.corda.core.flows.IllegalFlowLogicException [errorCode = g3v6fv, moreInformationAt= https://errors.corda.net/OS/4.1/g3v6fv]

LoCState:

package com.template.states;

import com.template.contracts.LoCContract;
import net.corda.core.contracts.*;
import net.corda.core.identity.AbstractParty;
import net.corda.core.identity.Party;
import net.corda.core.serialization.CordaSerializable;

import java.time.LocalDate;
import java.util.Arrays;
import java.util.Currency;
import java.util.Date;
import java.util.List;

// *********
// * State *
// *********
@BelongsToContract(LoCContract.class)
@CordaSerializable
public class LoCState implements LinearState {
    private Party applicant;
    private Party beneficiary;
    private Party issuingBank;
    private Party advisingBank;
    private UniqueIdentifier locID;
    private Date applicationDate;
    private int amount;
    private String locStatus;

    public LoCState(Party applicant, Party benificiery, Party issuingBank,
                    Party advisingBank, UniqueIdentifier locID, Date applicationDate,
                    int amount, String locStatus) {
        this.applicant = applicant;
        this.beneficiary = benificiery;
        this.issuingBank = issuingBank;
        this.advisingBank = advisingBank;
        this.locID = locID;
        this.applicationDate = applicationDate;
        this.amount = amount;
        this.locStatus = locStatus;
    }

    public List<AbstractParty> getParticipants() {
        return Arrays.asList(applicant, beneficiary, issuingBank, advisingBank);
    }

    public UniqueIdentifier getLinearId() {
        return this.locID;
    }

    public Party getApplicant() {
        return applicant;
    }

    public void setApplicant(Party applicant) {
        this.applicant = applicant;
    }

    public Party getBeneficiary() {
        return beneficiary;
    }

    public void setBeneficiary(Party beneficiary) {
        this.beneficiary = beneficiary;
    }

    public Party getIssuingBank() {
        return issuingBank;
    }

    public void setIssuingBank(Party issuingBank) {
        this.issuingBank = issuingBank;
    }

    public Party getAdvisingBank() {
        return advisingBank;
    }

    public void setAdvisingBank(Party advisingBank) {
        this.advisingBank = advisingBank;
    }

    public UniqueIdentifier getLocID() {
        return locID;
    }

    public void setLocID(UniqueIdentifier locID) {
        this.locID = locID;
    }

    public Date getApplicationDate() {
        return applicationDate;
    }

    public void setApplicationDate(Date applicationDate) {
        this.applicationDate = applicationDate;
    }

    public int getAmount() {
        return amount;
    }

    public void setAmount(int amount) {
        this.amount = amount;
    }

    public String getLocStatus() {
        return locStatus;
    }

    public void setLocStatus(String locStatus) {
        this.locStatus = locStatus;
    }
}

LoCContract:

package com.template.contracts;

import net.corda.core.contracts.CommandData;
import net.corda.core.contracts.Contract;
import net.corda.core.transactions.LedgerTransaction;

public class LoCContract implements Contract {

            @Override
            public void verify(LedgerTransaction tx) {}

            public interface Commands extends CommandData {
                class CreateLoC implements Commands {}
            }
        }

ApplyLoCFlow:

package com.template.flows;

import co.paralleluniverse.fibers.Suspendable;
import com.template.contracts.LoCContract;
import com.template.states.LoCState;
import net.corda.core.contracts.Amount;
import net.corda.core.contracts.Command;
import net.corda.core.contracts.UniqueIdentifier;
import net.corda.core.flows.*;
import net.corda.core.identity.CordaX500Name;
import net.corda.core.identity.Party;
import net.corda.core.transactions.SignedTransaction;
import net.corda.core.transactions.TransactionBuilder;
import net.corda.core.utilities.ProgressTracker;

import java.time.LocalDate;
import java.util.Arrays;
import java.util.Currency;
import java.util.Date;

import static com.template.flows.ProgressTrackerStates.*;

@InitiatingFlow
@StartableByRPC
public class ApplyLoCFlow extends FlowLogic<SignedTransaction> {

    public ApplyLoCFlow(String beneficiary, String issuingBank, String advisingBank,
                        UniqueIdentifier locID, LocalDate applicationDate,
                        int amount, String locStatus) {
        this.beneficiary = beneficiary;
        this.issuingBank = issuingBank;
        this.advisingBank = advisingBank;
    //    this.locID = locID;
    //    this.applicationDate = applicationDate;
        this.amount = amount;
        this.locStatus = locStatus;
    }

    private String beneficiary;
    private String issuingBank;
    private String advisingBank;
  //  private UniqueIdentifier locID;
  //  private LocalDate applicationDate;
    private int amount;
    private String locStatus;

    private final ProgressTracker progressTracker = new ProgressTracker(GETTING_NOTARY, GETTING_COUNTERPARTIES,GENERATING_TRANSACTION, VERIFYING_TRANSACTION, SIGNING_TRANSACTION, FINALISING_TRANSACTION);

    @Override
    public ProgressTracker getProgressTracker() {
        return progressTracker;
    }

    @Suspendable
    @Override
    public SignedTransaction call() throws FlowException {
        progressTracker.setCurrentStep(GETTING_NOTARY);
        final Party notary=getServiceHub().getNetworkMapCache().getNotaryIdentities().get(0);

        progressTracker.setCurrentStep(GETTING_COUNTERPARTIES);
        Party bName=null;
        Party iBank= null;
        Party aBank= null;
      //  if(getServiceHub().getIdentityService().partiesFromName(beneficiary, false).iterator().hasNext()){
            CordaX500Name counterPartyName = new CordaX500Name("PartyA", "Hyderabad", "IN");
            bName = getServiceHub().getIdentityService().wellKnownPartyFromX500Name(counterPartyName);
           // bName=getServiceHub().getIdentityService().partiesFromName(beneficiary, false).iterator().next();

      //  }
        /*if(getServiceHub().getIdentityService().partiesFromName(issuingBank, false).iterator().hasNext()){
             iBank=getServiceHub().getIdentityService().partiesFromName(issuingBank, false).iterator().next();
        }*/
        CordaX500Name issuingName = new CordaX500Name("BankA", "Chennai", "IN");
        iBank = getServiceHub().getIdentityService().wellKnownPartyFromX500Name(issuingName);
       /* if(getServiceHub().getIdentityService().partiesFromName(advisingBank, false).iterator().hasNext()){
             aBank=getServiceHub().getIdentityService().partiesFromName(advisingBank, false).iterator().next();
        }*/
        CordaX500Name advName = new CordaX500Name("BankB", "Mumbai", "IN");
        aBank = getServiceHub().getIdentityService().wellKnownPartyFromX500Name(advName);
        TransactionBuilder txBuilder= new TransactionBuilder(notary);
        Command command= new Command(new LoCContract.Commands.CreateLoC(), Arrays.asList(getServiceHub().getMyInfo().getLegalIdentities().get(0).getOwningKey()));
        LoCState state= new LoCState(getOurIdentity(), bName, iBank, aBank,  new UniqueIdentifier(), new Date(), amount, "Open");

        txBuilder.addOutputState(state, LoCContract.ID);
        txBuilder.addCommand(command);

        progressTracker.setCurrentStep(VERIFYING_TRANSACTION);
        txBuilder.verify(getServiceHub());

        progressTracker.setCurrentStep(SIGNING_TRANSACTION);
        SignedTransaction stx= getServiceHub().signInitialTransaction(txBuilder);

        progressTracker.setCurrentStep(FINALISING_TRANSACTION);
        return subFlow(new FinalityFlow(stx));
        // Initiator flow logic goes here.

    }
}

1 Ответ

0 голосов
/ 04 октября 2019

Если вы используете Corda v4, должен быть ResponderFlow для всех участников (не только подписавших) состояния.

Оставьте пустые конструкторы для состояния Corda.

...