You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/07/14 05:29:41 UTC

[camel] branch main updated: [CAMEL-19605] camel-xchange - Upgrade to xchange 5.1.0 (#10680)

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 <td...@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>