Claus Ibsen created CAMEL-26171:
-----------------------------------

             Summary: camel-xchange - the option currency=BTC fails with no 
type converter, and a String currency pair body or header is not converted
                 Key: CAMEL-26171
                 URL: https://issues.apache.org/jira/browse/CAMEL-26171
             Project: Camel
          Issue Type: Bug
          Components: camel-xchange
            Reporter: Claus Ibsen
             Fix For: 4.24.0


Found while adding the catalog body types of xchange (CAMEL-24961, PR #28412).

h4. 1. The endpoint option currency=BTC fails with no type converter

The generated {{XChangeEndpointConfigurer}} (line 26) sets {{currency}} with 
{{setCurrency(Currency)}} after converting the value to 
{{org.knowm.xchange.currency.Currency}}, and there is no String to Currency 
converter, so 
{{xchange:binance?service=metadata&method=currencyMetaData&currency=BTC}} fails 
with "No type converter available to convert from type: java.lang.String to the 
required type: org.knowm.xchange.currency.Currency". The 
{{setCurrency(String)}} setter in {{XChangeConfiguration}} (line 102) is never 
used. Checked on 4.24.0-SNAPSHOT with a fake {{Exchange}} (dynamic proxy) set 
with {{putXChange}}.

Proposed: add a String to {{Currency}} type converter (or make the option a 
String as {{currencyPair}} is).

h4. 2. A String body or header with a currency pair or currency is not converted

{{XChangeMarketDataProducer.process}} (main 2a465aa4814c, lines 45-46) and 
{{XChangeMetaDataProducer.process}} (lines 52-53 and 58-59) read the 
{{CamelXChangeCurrencyPair}} / {{CamelXChangeCurrency}} header and then the 
body as {{CurrencyPair}} / {{Currency}}. A String such as {{"BTC/USDT"}} or 
{{"USDT"}} is not converted, so the call fails with "Null currency pair" or 
"Null currency". Checked on 4.24.0-SNAPSHOT with the fake {{Exchange}}.

Proposed: add String to {{CurrencyPair}} ({{new CurrencyPair(String)}}) and 
String to {{Currency}} type converters.

h4. 3. currencyPairMetaData with no pair reports "Null currency"

{{XChangeEndpoint.getCurrencyPairMetaData}} (main 2a465aa4814c, line 132) uses 
{{Assert.notNull(pair, "Null currency")}}, so a missing pair is reported as a 
missing currency. Read in the code, not run.

Proposed: use the message "Null currency pair".

h4. 4. A method of another service silently does nothing

Each producer only handles its own methods: for example 
{{XChangeMarketDataProducer.process}} (line 44) only handles {{ticker}}, so 
{{service=marketdata&method=currencies}} does nothing and leaves the body 
unchanged, with no error. Checked on 4.24.0-SNAPSHOT with the fake {{Exchange}}.

Proposed: fail at endpoint creation when the method does not belong to the 
service.

_Claude Code on behalf of davsclaus_



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

Reply via email to