[ 
https://issues.apache.org/jira/browse/CAMEL-26173?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18137016#comment-18137016
 ] 

Claus Ibsen commented on CAMEL-26173:
-------------------------------------

The part of this issue not fixed by the PR is tracked in CAMEL-26516, so this 
issue can be resolved when the PR is merged.

_Claude Code on behalf of Claus Ibsen (davsclaus)_

> camel-web3j - ETH_GET_BALANCE and ETH_GET_BLOCK_BY_NUMBER fail with NPE 
> without atBlock (documented default latest is null)
> ---------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26173
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26173
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-web3j
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 4.24.0
>
>
> Found while adding the catalog body types of web3j (CAMEL-24961, PR #28412).
> h4. 1. atBlock, fromBlock and toBlock are documented with default latest but 
> are null
> In {{Web3jConfiguration}} (main 2a465aa4814c, lines 33-40) {{fromBlock}}, 
> {{toBlock}} and {{atBlock}} have {{defaultValue = "latest"}} but the fields 
> are not initialized, and {{Web3jHelper.toDefaultBlockParameter}} (line 29) 
> returns null for null. So {{ETH_GET_BALANCE}} ({{Web3jProducer}} line 258) 
> and {{ETH_GET_BLOCK_BY_NUMBER}} (line 474) without {{atBlock}} fail every 
> call with a NullPointerException "defaultBlockParameter is null". The 
> consumer passes the same null {{fromBlock}}/{{toBlock}} to the log filter and 
> the replay observables ({{Web3jConsumer}} lines 91-92, 137-138, 146-147; read 
> in the code). Checked on 4.24.0-SNAPSHOT with a JDK HTTP server as the 
> JSON-RPC node (the real {{HttpService}}).
> Proposed: initialize the three fields to {{"latest"}} as documented.
> h4. 2. ETH_GET_TRANSACTION_RECEIPT puts an Optional in the body
> {{Web3jProducer.ethGetTransactionReceipt}} (main 2a465aa4814c, line 564) sets 
> the body to {{response.getTransactionReceipt()}}, an 
> {{Optional<TransactionReceipt>}}, while the {{ETH_GET_TRANSACTION_BY_*}} 
> operations unwrap the Optional to the {{Transaction}} or null (lines 497, 
> 510, 524). Checked on 4.24.0-SNAPSHOT with the JSON-RPC node.
> Proposed: unwrap it the same way (the receipt or null), with a note in the 
> upgrade guide.
> h4. 3. The default operation transaction is not valid for the consumer
> The {{operation}} option defaults to {{transaction}} ({{Web3jConfiguration}} 
> lines 30-31). The producer does nothing for it, and a consumer with no 
> {{operation}} fails at start with "Unsupported operation transaction" 
> ({{Web3jConsumer}} line 153). Checked on 4.24.0-SNAPSHOT with the JSON-RPC 
> node.
> Proposed: fail with a clear message that the consumer needs one of the 
> observable operations (and that the producer needs an operation), or document 
> that {{operation}} is required.
> h4. 4. Stopping a consumer reports an UndeliverableException when 
> eth_uninstallFilter fails
> {{Web3jConsumer.doStop}} (main 2a465aa4814c, line 304) disposes the 
> subscription; web3j then calls {{eth_uninstallFilter}}, and when the node 
> answers with an error it goes to the RxJava global error handler as an 
> {{UndeliverableException}} with a stack trace on the shutdown thread. Checked 
> on 4.24.0-SNAPSHOT with the fake JSON-RPC node only.
> Proposed: handle the failure of the filter removal on stop (log it at DEBUG) 
> so it does not reach the RxJava global error handler.
> _Claude Code on behalf of davsclaus_



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to