Moneta 1.3 ExchangeRateProvider.getExchangeRate (base, term) возвращает ноль - PullRequest
0 голосов
/ 05 апреля 2019

Я использую Moneta JavaMoney 1.3 для получения обменного курса:

CurrencyUnit base = Monetary.getCurrency(...);
CurrencyUnit term = Monetary.getCurrency(...);
ExchangeRateProvider xrates = MonetaryConversions.getExchangeRateProvider();
ExchangeRate xrate = xrates.getExchangeRate(base, term);

Если я запускаю код в Eclipse, он работает нормально. Но после создания банки с Maven и запуска банки из командной строки, ExchangeRateProvider.getExchangeRate(base, term) возвращает ноль.

Я также попытался указать ExchangeRateProvider: ExchangeRateProvider xrates = MonetaryConversions.getExchangeRateProvider("ECB"); В Eclipse все в порядке, из командной строки выдается исключение MonetoryException, говорящее «Invalid ExchangeRateProvider (not found): ECB»

В этом вопросе упоминается та же проблема: «Потому что, если я использую зависимость от money-api без bp, я получаю нулевое значение». Я попробовал принятый ответ:

ConversionQuery cq = ConversionQueryBuilder.of().setBaseCurrency(Base).setTermCurrency(Term).build();
MonetaryAmount zero = FastMoney.zero(Base);
ExchangeRateProvider xrates = MonetaryConversions.getExchangeRateProvider("ECB");
CurrencyConversion cc = xrates.getCurrencyConversion(cq);
ExchangeRate xrate = cc.getExchangeRate(zero);

Опять не повезло: работает в Eclipse, но возвращает ноль из командной строки. Это как-то связано с зависимостями при сборке фляги? Я использую плагин Maven Shade с выключенной минимизацией.

Или мне тоже использовать moneta-bp? Было бы странно, поскольку moneta-bp встроен в качестве бэкпорта для Java 7, а я использую Java 8. Есть еще идеи?

Заранее спасибо!

EDIT:

При запуске из Eclipse ExchangeRateProvider является экземпляром org.javamoney.moneta.spi.CompoundRateProvider. Из командной строки это экземпляр org.javamoney.moneta.convert.internal.IdentityRateProvider. Глядя на код IdentityRateProvider, становится понятно, что он возвращает ноль. Но как получить CompoundRateProvider?

1 Ответ

0 голосов
/ 06 апреля 2019

Вместо использования плагина Maven Shade я попробовал это решение , и теперь оно работает.

...