При запуске теста NodeDriver, который использует QueryableState, я получаю сообщение об ошибке «Неизвестная сущность». Я подтвердил, что если я удалю код QueryableState из State, тесты будут успешно выполнены.
java .util.concurrent.ExecutionException: net .corda.core.CordaRuntimeException: java .lang.IllegalArgumentException: неизвестный объект: com.template.states.IOUCustomSchema $ PersistentIOU
Вот реализация QueryableState:
@BelongsToContract(IOUContract.class)
public class IOUState implements ContractState, LinearState, QueryableState {
public final Amount<TokenType> amount;
public final Party lender;
public final Party borrower;
public final Amount<TokenType> paid;
private final UniqueIdentifier linearId;
// Private constructor used only for copying a State object
@ConstructorForDeserialization
private IOUState(Amount<TokenType> amount, Party lender, Party borrower, Amount<TokenType> paid, UniqueIdentifier linearId){
this.amount = amount;
this.lender = lender;
this.borrower = borrower;
this.paid = paid;
this.linearId = linearId;
}
public IOUState(Amount<TokenType> amount, Party lender, Party borrower) {
this(amount, lender, borrower, new Amount<>(0, amount.getToken()), new UniqueIdentifier());
}
/** omitting boiletplate */
/**
* This method will return a list of the nodes which can "use" this state in a valid transaction. In this case, the
* lender or the borrower.
*/
@Override
public List<AbstractParty> getParticipants() {
return ImmutableList.of(lender, borrower);
}
@Override
public PersistentState generateMappedObject(MappedSchema schema) {
if (schema instanceof IOUCustomSchema) {
return new IOUCustomSchema.PersistentIOU(linearId.getId(), lender.getName().toString(),
borrower.getName().toString(), amount.getQuantity());
} else{
throw new IllegalArgumentException("Unrecognised schema " + schema);
}
}
@Override
public Iterable<MappedSchema> supportedSchemas() {
return ImmutableList.of(new IOUCustomSchema());
}
}
IOUCustomSchema
public class IOUCustomSchema extends MappedSchema {
public IOUCustomSchema() {
super(IOUCustomSchema.class, 1, ImmutableList.of(PersistentState.class));
}
@Entity
@Table
public static class PersistentIOU extends PersistentState {
@Column(nullable = false)
UUID linearId;
@Column(nullable = false) String lender;
@Column(nullable = false) String borrower;
@Column(nullable = false) Long amount;
public PersistentIOU(UUID linearId, String lender, String borrower, Long amount) {
this.linearId = linearId;
this.lender = lender;
this.borrower = borrower;
this.amount = amount;
}
public PersistentIOU() {
this.linearId = null;
this.lender = null;
this.borrower = null;
this.amount = 0L;
}
public UUID getLinearId() {
return linearId;
}
public String getLender() {
return lender;
}
public String getBorrower() {
return borrower;
}
public Long getAmount() {
return amount;
}
}
}