I can't seem to get historical rates to work. I've tried a bunch of variations, but I either get the current exchange rate or this exception:
CurrencyConversionException [base=USD, term=CAD, conversionContext=null]: Cannot convert USD into CAD: All delegate prov iders failed to deliver rate, providers=[org.javamoney.moneta.internal.convert.IdentityRateProvider@3b088d51, org.javamoney.moneta.internal.convert.ECBCurrentRateProvider{ context: ProviderContext (
{rateTypes=[DEFERRED], providerDescription=European Central Bank, days=1, provider=ECB})}, org.javamoney.moneta.internal.convert.IMFRateProvider{ context: ProviderContext (
{rateTypes=[DEFERRED], providerDescription=International Monetary Fond, days=1, provider=IMF})}, org.javamoney.moneta.internal.convert.IMFHistoricRateProvider{ context: ProviderContext (
{rateTypes=[HISTORIC], providerDescription=Historic International Monetary Fond, days=0, provider=IMF-HIST})}, org.javamoney.moneta.internal.convert.ECBHistoricRateProvider{ context: ProviderContext (
{rateTypes=[DEFERRED, HISTORIC], providerDescription=European Central Bank, days=1500, provider=ECB-HIST})}, org.javamoney.moneta.internal.convert.ECBHistoric90RateProvider{ context: ProviderContext (
{rateTypes=[DEFERRED, HISTORIC], providerDescription=European Central Bank (last 90 days), days=90, provider=ECB-HIST90})}], query=ConversionQuery (
{Query.termCurrency=CAD, Query.baseCurrency=USD, java.time.LocalDate=2000-01-01})
at org.javamoney.moneta.spi.CompoundRateProvider.getExchangeRate(CompoundRateProvider.java:121)
at com.github.ryanholdren.portfolio.utilities.CurrencyTest.test(CurrencyTest.java:27)
...
import java.time.LocalDate;
import static java.time.Month.JANUARY;
import javax.money.convert.ConversionQuery;
import javax.money.convert.ConversionQueryBuilder;
import javax.money.convert.ExchangeRate;
import javax.money.convert.ExchangeRateProvider;
import static javax.money.convert.MonetaryConversions.getExchangeRateProvider;
import org.junit.Test;
import org.springframework.util.Assert;
public class ExchangeRateTest {
@Test
public void test() {
final ConversionQuery query = ConversionQueryBuilder.of()
.setBaseCurrency("USD")
.setTermCurrency("CAD")
.set(LocalDate.class, LocalDate.of(2000, JANUARY, 1))
.build();
final ExchangeRateProvider provider = getExchangeRateProvider(query);
final ExchangeRate rate = provider.getExchangeRate(query);
Assert.notNull(rate);
}
}