This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new c7bb3cbc01a [CAMEL-19605] camel-xchange - Upgrade to xchange 5.1.0 (#10680) c7bb3cbc01a is described below commit c7bb3cbc01ae6ff2d2326d2e43b24d0aa412cdb8 Author: Thomas Diesler <tdies...@redhat.com> AuthorDate: Fri Jul 14 07:29:35 2023 +0200 [CAMEL-19605] camel-xchange - Upgrade to xchange 5.1.0 (#10680) --- components/camel-xchange/pom.xml | 13 +++++++++ .../apache/camel/component/xchange/XChange.java | 15 ++++++++--- .../camel/component/xchange/XChangeEndpoint.java | 31 ++++++++++++++++------ .../component/xchange/XChangeTestSupport.java | 11 +++++--- .../xchange/account/AccountProducerTest.java | 4 ++- .../xchange/metadata/MetaDataProducerTest.java | 8 +++--- parent/pom.xml | 2 +- 7 files changed, 64 insertions(+), 20 deletions(-) diff --git a/components/camel-xchange/pom.xml b/components/camel-xchange/pom.xml index 2ec39c70f08..ecf3472b35c 100644 --- a/components/camel-xchange/pom.xml +++ b/components/camel-xchange/pom.xml @@ -71,4 +71,17 @@ </dependencies> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <systemPropertyVariables> + <enable.xchange.itests>false</enable.xchange.itests> + </systemPropertyVariables> + </configuration> + </plugin> + </plugins> + </build> </project> diff --git a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChange.java b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChange.java index 7c8a9803a18..4dd9fada07d 100644 --- a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChange.java +++ b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChange.java @@ -18,18 +18,20 @@ package org.apache.camel.component.xchange; import java.io.IOException; import java.util.List; +import java.util.stream.Collectors; import org.knowm.xchange.Exchange; import org.knowm.xchange.ExchangeSpecification; import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.dto.meta.ExchangeMetaData; import org.knowm.xchange.exceptions.ExchangeException; +import org.knowm.xchange.instrument.Instrument; import org.knowm.xchange.service.account.AccountService; import org.knowm.xchange.service.marketdata.MarketDataService; import org.knowm.xchange.service.trade.TradeService; import si.mazi.rescu.SynchronizedValueFactory; -// Wraps the exchange to avoid anem collision with the camel exchange +// Wraps the exchange to avoid name collision with the camel exchange public class XChange implements Exchange { private final Exchange delegate; @@ -49,8 +51,15 @@ public class XChange implements Exchange { } @Override - public List<CurrencyPair> getExchangeSymbols() { - return delegate.getExchangeSymbols(); + public List<Instrument> getExchangeInstruments() { + return delegate.getExchangeInstruments(); + } + + public List<CurrencyPair> getCurrencyPairs() { + return delegate.getExchangeInstruments().stream() + .filter(it -> it instanceof CurrencyPair) + .map(it -> (CurrencyPair) it) + .collect(Collectors.toList()); } @Override diff --git a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeEndpoint.java b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeEndpoint.java index 3faeeffec0e..a1c94ae2bb0 100644 --- a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeEndpoint.java +++ b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeEndpoint.java @@ -18,6 +18,8 @@ package org.apache.camel.component.xchange; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -29,6 +31,8 @@ import org.apache.camel.component.xchange.XChangeConfiguration.XChangeService; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.support.DefaultEndpoint; +import org.knowm.xchange.binance.BinanceAdapters; +import org.knowm.xchange.binance.service.BinanceAccountService; import org.knowm.xchange.currency.Currency; import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.dto.account.AccountInfo; @@ -37,8 +41,9 @@ import org.knowm.xchange.dto.account.FundingRecord; import org.knowm.xchange.dto.account.Wallet; import org.knowm.xchange.dto.marketdata.Ticker; import org.knowm.xchange.dto.meta.CurrencyMetaData; -import org.knowm.xchange.dto.meta.CurrencyPairMetaData; import org.knowm.xchange.dto.meta.ExchangeMetaData; +import org.knowm.xchange.dto.meta.InstrumentMetaData; +import org.knowm.xchange.instrument.Instrument; import org.knowm.xchange.service.account.AccountService; import org.knowm.xchange.service.marketdata.MarketDataService; import org.knowm.xchange.service.trade.params.TradeHistoryParams; @@ -116,13 +121,16 @@ public class XChangeEndpoint extends DefaultEndpoint { public List<CurrencyPair> getCurrencyPairs() { ExchangeMetaData metaData = xchange.getExchangeMetaData(); - return metaData.getCurrencyPairs().keySet().stream().sorted().collect(Collectors.toList()); + return metaData.getInstruments().keySet().stream() + .filter(it -> it instanceof CurrencyPair) + .map(it -> (CurrencyPair) it) + .sorted().collect(Collectors.toList()); } - public CurrencyPairMetaData getCurrencyPairMetaData(CurrencyPair pair) { + public InstrumentMetaData getCurrencyPairMetaData(CurrencyPair pair) { Assert.notNull(pair, "Null currency"); ExchangeMetaData metaData = xchange.getExchangeMetaData(); - return metaData.getCurrencyPairs().get(pair); + return metaData.getInstruments().get(pair); } public List<Balance> getBalances() throws IOException { @@ -154,15 +162,22 @@ public class XChangeEndpoint extends DefaultEndpoint { } public List<Wallet> getWallets() throws IOException { + // [#4741] BinanceAccountService assumes futures account when not using sandbox + // https://github.com/knowm/XChange/issues/4741 AccountService accountService = xchange.getAccountService(); - AccountInfo accountInfo = accountService.getAccountInfo(); - return accountInfo.getWallets().values().stream().sorted((Wallet o1, Wallet o2) -> o1.getName().compareTo(o2.getName())) - .collect(Collectors.toList()); + if (accountService instanceof BinanceAccountService binanceAccountService) { + Wallet wallet = BinanceAdapters.adaptBinanceSpotWallet(binanceAccountService.account()); + return Collections.singletonList(wallet); + } else { + AccountInfo accountInfo = accountService.getAccountInfo(); + return accountInfo.getWallets().values().stream().sorted(Comparator.comparing(Wallet::getName)) + .collect(Collectors.toList()); + } } public Ticker getTicker(CurrencyPair pair) throws IOException { Assert.notNull(pair, "Null currency pair"); MarketDataService marketService = xchange.getMarketDataService(); - return marketService.getTicker(pair); + return marketService.getTicker((Instrument) pair); } } diff --git a/components/camel-xchange/src/test/java/org/apache/camel/component/xchange/XChangeTestSupport.java b/components/camel-xchange/src/test/java/org/apache/camel/component/xchange/XChangeTestSupport.java index cf39c001eef..13bed59db93 100644 --- a/components/camel-xchange/src/test/java/org/apache/camel/component/xchange/XChangeTestSupport.java +++ b/components/camel-xchange/src/test/java/org/apache/camel/component/xchange/XChangeTestSupport.java @@ -24,6 +24,7 @@ import org.junit.jupiter.api.BeforeAll; import org.knowm.xchange.Exchange; import org.knowm.xchange.ExchangeFactory; import org.knowm.xchange.ExchangeSpecification; +import org.knowm.xchange.utils.AuthUtils; import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig; @@ -60,8 +61,11 @@ public abstract class XChangeTestSupport extends CamelTestSupport { if (useMockedBackend()) { specification.setSslUri("http://localhost:" + wireMockServer.port()); } else { - specification.setApiKey(System.getProperty("xchange.api.key", System.getenv("XCHANGE_API_KEY"))); - specification.setSecretKey(System.getProperty("xchange.secret.key", System.getenv("XCHANGE_SECRET_KEY"))); + AuthUtils.setApiAndSecretKey(specification, "binance"); + if (specification.getApiKey() == null) + specification.setApiKey(System.getProperty("xchange.api.key", System.getenv("XCHANGE_API_KEY"))); + if (specification.getSecretKey() == null) + specification.setSecretKey(System.getProperty("xchange.secret.key", System.getenv("XCHANGE_SECRET_KEY"))); } XChange xchange = new XChange(ExchangeFactory.INSTANCE.createExchange(specification)); @@ -71,6 +75,7 @@ public abstract class XChangeTestSupport extends CamelTestSupport { } protected static boolean useMockedBackend() { - return !Boolean.TRUE.toString().equals(System.getProperty("enable.xchange.itests")); + String value = System.getProperty("enable.xchange.itests"); + return !Boolean.parseBoolean(value); } } diff --git a/components/camel-xchange/src/test/java/org/apache/camel/component/xchange/account/AccountProducerTest.java b/components/camel-xchange/src/test/java/org/apache/camel/component/xchange/account/AccountProducerTest.java index f2f84727a3b..56c15fd2f03 100644 --- a/components/camel-xchange/src/test/java/org/apache/camel/component/xchange/account/AccountProducerTest.java +++ b/components/camel-xchange/src/test/java/org/apache/camel/component/xchange/account/AccountProducerTest.java @@ -22,6 +22,7 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.xchange.XChangeComponent; import org.apache.camel.component.xchange.XChangeTestSupport; import org.junit.jupiter.api.Test; +import org.knowm.xchange.ExchangeSpecification; import org.knowm.xchange.dto.account.Balance; import org.knowm.xchange.dto.account.FundingRecord; import org.knowm.xchange.dto.account.Wallet; @@ -75,6 +76,7 @@ public class AccountProducerTest extends XChangeTestSupport { private boolean hasAPICredentials() { XChangeComponent component = context().getComponent("xchange", XChangeComponent.class); - return component.getXChange("binance").getExchangeSpecification().getApiKey() != null; + ExchangeSpecification exchangeSpecification = component.getXChange("binance").getExchangeSpecification(); + return exchangeSpecification.getApiKey() != null; } } diff --git a/components/camel-xchange/src/test/java/org/apache/camel/component/xchange/metadata/MetaDataProducerTest.java b/components/camel-xchange/src/test/java/org/apache/camel/component/xchange/metadata/MetaDataProducerTest.java index a93987d4e91..973a212d805 100644 --- a/components/camel-xchange/src/test/java/org/apache/camel/component/xchange/metadata/MetaDataProducerTest.java +++ b/components/camel-xchange/src/test/java/org/apache/camel/component/xchange/metadata/MetaDataProducerTest.java @@ -24,7 +24,7 @@ import org.junit.jupiter.api.Test; import org.knowm.xchange.currency.Currency; import org.knowm.xchange.currency.CurrencyPair; import org.knowm.xchange.dto.meta.CurrencyMetaData; -import org.knowm.xchange.dto.meta.CurrencyPairMetaData; +import org.knowm.xchange.dto.meta.InstrumentMetaData; import static org.apache.camel.component.xchange.XChangeConfiguration.HEADER_CURRENCY; import static org.apache.camel.component.xchange.XChangeConfiguration.HEADER_CURRENCY_PAIR; @@ -86,12 +86,12 @@ public class MetaDataProducerTest extends XChangeTestSupport { @Test void testCurrencyPairMetaData() { - CurrencyPairMetaData metadata - = template.requestBody("direct:currencyPairMetaData", CurrencyPair.EOS_ETH, CurrencyPairMetaData.class); + InstrumentMetaData metadata + = template.requestBody("direct:currencyPairMetaData", CurrencyPair.EOS_ETH, InstrumentMetaData.class); assertNotNull(metadata, "CurrencyPairMetaData not null"); metadata = template.requestBodyAndHeader("direct:currencyPairMetaData", null, HEADER_CURRENCY_PAIR, - CurrencyPair.EOS_ETH, CurrencyPairMetaData.class); + CurrencyPair.EOS_ETH, InstrumentMetaData.class); assertNotNull(metadata, "CurrencyPairMetaData not null"); } } diff --git a/parent/pom.xml b/parent/pom.xml index cce2a0e0619..6d62b9b4ee2 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -478,7 +478,7 @@ <woodstox-core-version>6.5.1</woodstox-core-version> <xbean-spring-version>4.23</xbean-spring-version> <xbean-asm5-shaded-version>4.5</xbean-asm5-shaded-version> - <xchange-version>5.0.14</xchange-version> + <xchange-version>5.1.0</xchange-version> <xerces-version>2.12.2</xerces-version> <!-- needed to manage the xml-apis version in camel-xmljson --> <xml-apis-version>1.4.01</xml-apis-version>