Я получаю ошибку ниже при выполнении одного из потоков корда. Запустите получателя 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.
}
}