diff --git a/core/src/main/java/com/bloxbean/cardano/yaci/core/protocol/blockfetch/BlockfetchAgent.java b/core/src/main/java/com/bloxbean/cardano/yaci/core/protocol/blockfetch/BlockfetchAgent.java index 68d02eb..31fbd7e 100644 --- a/core/src/main/java/com/bloxbean/cardano/yaci/core/protocol/blockfetch/BlockfetchAgent.java +++ b/core/src/main/java/com/bloxbean/cardano/yaci/core/protocol/blockfetch/BlockfetchAgent.java @@ -137,9 +137,17 @@ private void onReceiveBlocks(MsgBlock message) { } catch (Exception e) { errorBlks++; log.error("Error in parsing", e); - Array headerArray = (Array) ((Array)array.getDataItems().get(1)).getDataItems().get(0); - BlockHeader blockHeader = BlockHeaderSerializer.INSTANCE.getBlockHeaderFromHeaderArray(headerArray); - log.error("BlockHeader >> Block No: " + blockHeader.getHeaderBody().getBlockNumber() +", Slot: " + blockHeader.getHeaderBody().getSlot()); + + //Catch exception to avoid exception propagation + try { + Array headerArray = (Array) ((Array) array.getDataItems().get(1)).getDataItems().get(0); + BlockHeader blockHeader = BlockHeaderSerializer.INSTANCE.getBlockHeaderFromHeaderArray(headerArray); + log.error("BlockHeader >> Block No: " + blockHeader.getHeaderBody().getBlockNumber() + ", Slot: " + blockHeader.getHeaderBody().getSlot()); + } catch (Exception e1) { + log.error("Error in parsing block header", e1); + } + + getAgentListeners().stream().forEach(blockfetchAgentListener -> blockfetchAgentListener.onParsingError(e)); } } diff --git a/core/src/main/java/com/bloxbean/cardano/yaci/core/protocol/blockfetch/BlockfetchAgentListener.java b/core/src/main/java/com/bloxbean/cardano/yaci/core/protocol/blockfetch/BlockfetchAgentListener.java index 85f967e..ea3dfa8 100644 --- a/core/src/main/java/com/bloxbean/cardano/yaci/core/protocol/blockfetch/BlockfetchAgentListener.java +++ b/core/src/main/java/com/bloxbean/cardano/yaci/core/protocol/blockfetch/BlockfetchAgentListener.java @@ -35,4 +35,8 @@ default void byronEbBlockFound(ByronEbBlock byronEbBlock) { } + default void onParsingError(Exception e) { + + } + } diff --git a/helper/src/main/java/com/bloxbean/cardano/yaci/helper/listener/BlockChainDataListener.java b/helper/src/main/java/com/bloxbean/cardano/yaci/helper/listener/BlockChainDataListener.java index 7946015..e85a3c6 100644 --- a/helper/src/main/java/com/bloxbean/cardano/yaci/helper/listener/BlockChainDataListener.java +++ b/helper/src/main/java/com/bloxbean/cardano/yaci/helper/listener/BlockChainDataListener.java @@ -42,4 +42,6 @@ default void intersactFound(Tip tip, Point point) {} default void intersactNotFound(Tip tip) {} default void onDisconnect() {} + + default void onParsingError(Exception e) {} } diff --git a/helper/src/main/java/com/bloxbean/cardano/yaci/helper/listener/BlockFetchAgentListenerAdapter.java b/helper/src/main/java/com/bloxbean/cardano/yaci/helper/listener/BlockFetchAgentListenerAdapter.java index abfce85..2e2cf91 100644 --- a/helper/src/main/java/com/bloxbean/cardano/yaci/helper/listener/BlockFetchAgentListenerAdapter.java +++ b/helper/src/main/java/com/bloxbean/cardano/yaci/helper/listener/BlockFetchAgentListenerAdapter.java @@ -131,4 +131,9 @@ public void noBlockFound(Point from, Point to) { public void onDisconnect() { blockChainDataListener.onDisconnect(); } + + @Override + public void onParsingError(Exception e) { + blockChainDataListener.onParsingError(e); + } }