XRPLF / xrpl4j

A 100% Java implementation to interact with the XRP Ledger.
ISC License
80 stars 45 forks source link

An error occurred while requesting height 87704323! #530

Open Albert-Youngg opened 1 month ago

Albert-Youngg commented 1 month ago

com.fasterxml.jackson.databind.JsonMappingException: Cannot construct instance of org.xrpl.xrpl4j.model.transactions.ImmutableIssuedCurrencyAmount$Json (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('10')\n at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: org.xrpl.xrpl4j.model.transactions.ImmutableAmmBid$Json[\"BidMax\"]) (through reference chain: org.xrpl.xrpl4j.model.client.ledger.ImmutableLedgerResult$Json[\"ledger\"]->org.xrpl.xrpl4j.model.ledger.ImmutableLedgerHeader$Json[\"transactions\"]->java.util.ArrayList[13])

Albert-Youngg commented 1 month ago

use: v3.3.0

public Mono<BlockTx> getBlockTx(Long height, String userAgent) {
    UnsignedInteger ledgerIndex = UnsignedInteger.valueOf(height);
    LedgerSpecifier ledgerSpecifier = LedgerSpecifier.of(ledgerIndex);
    LedgerRequestParams params = LedgerRequestParams.builder()
            .ledgerSpecifier(ledgerSpecifier)
            .transactions(true)
            .build();
    return Mono.fromCallable(() -> client.ledger(params))
            .subscribeOn(Schedulers.boundedElastic())
            .flatMap(result -> {
                if (resultIsSuccess(result)) {
                    LedgerHeader block = result.ledger();
                    long blockTime = block.closeTimeHuman()
                            .map(zdt -> zdt.toInstant().toEpochMilli())
                            .orElse(System.currentTimeMillis());
                    String blockHash = block.ledgerHash().map(Hash256::value).orElse(null);
                    return Mono.just(BlockTx.builder()
                            .blockHeight(height)
                            .blockHash(blockHash)
                            .parentHash(block.parentHash().value())
                            .blockTime(blockTime)
                            .txs(
                                    block.transactions().stream()
                                            .filter(it -> it.transaction().transactionType().equals(TransactionType.PAYMENT))
                                            .map(it -> buildTxByResult(
                                                            (TransactionResult<Payment>) it,
                                                            blockTime,
                                                            height,
                                                            blockHash,
                                                            PaymentStatusEnum.CONFIRMED.getCode()
                                                    )
                                            )
                                            .collect(Collectors.toList())
                            )
                            .build());
                }
                return Mono.error(new RuntimeException("getBlockTx is not success"));
            })
            .onErrorResume(Exception.class, Mono::error);
}
exp0nge commented 1 month ago

FYI: https://github.com/XRPLF/xrpl4j/issues/529