Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

CurrencyConversionException

Boa tarde estou fazendo o curso Java Brasil: Formate datas, cpf e números nacionais, estou na aula 3, atividade 2, e ao testar o seguinte código:

package br.com.alura;

import javax.money.CurrencyUnit;
import javax.money.Monetary;
import javax.money.MonetaryAmount;
import javax.money.convert.CurrencyConversion;
import javax.money.convert.ExchangeRateProvider;
import javax.money.convert.MonetaryConversions;

import org.javamoney.moneta.FastMoney;
import org.javamoney.moneta.convert.ExchangeRateType;

public class Cotacao {
    public static void main(String[] args) {
        CurrencyUnit dolar = Monetary.getCurrency("USD");
        CurrencyUnit real = Monetary.getCurrency("BRL");

        FastMoney valorProdutoDolar = FastMoney.of(90, dolar);
        FastMoney valorImporstoReal = FastMoney.of(30, real);

        ExchangeRateProvider provider = MonetaryConversions.getExchangeRateProvider(ExchangeRateType.ECB);

        CurrencyConversion conversaoAtual = provider.getCurrencyConversion(dolar);

        MonetaryAmount valorImportoDolar = conversaoAtual.apply(valorImporstoReal);

        MonetaryAmount valorFinalProdutoDolar = valorProdutoDolar.add(valorImportoDolar);

        System.out.println(valorFinalProdutoDolar);


    }
}

Recebi o seguinte erro:

nov 28, 2017 1:17:23 PM org.javamoney.moneta.internal.loader.LoadRemoteDataLoaderService execute
INFORMAÇÕES: The exchange rate with resourceId IMFHistoricRateProvider was started remotely
nov 28, 2017 1:17:24 PM org.javamoney.moneta.internal.loader.LoadRemoteDataLoaderService execute
INFORMAÇÕES: The exchange rate with resourceId ECBHistoric90RateProvider was started remotely
nov 28, 2017 1:17:24 PM org.javamoney.moneta.internal.loader.LoadRemoteDataLoaderService execute
INFORMAÇÕES: The exchange rate with resourceId IMFRateProvider was started remotely
nov 28, 2017 1:17:24 PM org.javamoney.moneta.internal.loader.LoadRemoteDataLoaderService execute
INFORMAÇÕES: The exchange rate with resourceId ECBCurrentRateProvider was started remotely
Exception in thread "main" CurrencyConversionException [base=BRL, term=null, conversionContext=null]: Cannot convert BRL into null
    at org.javamoney.moneta.spi.AbstractCurrencyConversion.apply(AbstractCurrencyConversion.java:109)
    at br.com.alura.Cotacao.main(Cotacao.java:25)

Porém esse erro não tem em nenhum lugar na internet.

2 respostas
solução!

Rafael,

Parece que é um erro conhecido na biblioteca moneta: https://github.com/JavaMoney/jsr354-ri/issues/161

Parece que o erro ocorre quando é usado um Exchange Provider que não terminou de inicializar.

O Exchange Provider que você, o ECB, usou pega os valores daqui: http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml

Corrigiram fazendo uma sincronização no carregamento das currencies, que é assíncrono.

Essa issue foi aberta em 05/07/2017 e foi fechada em 28/07/2017, só que vai ser publicada na versão 1.2 , que será publicada em 12/12/2017.

Se você desligar a conexão com a Internet, ocorrem vários erros de java.net.UnknownHostException mas no finalzinho o erro é parecido:

Exception in thread "main" CurrencyConversionException [base=BRL, term=null, conversionContext=null]: Cannot convert BRL into null
    at org.javamoney.moneta.spi.AbstractCurrencyConversion.apply(AbstractCurrencyConversion.java:109)
    at moedas.Cotacao.main(Cotacao.java:25)

Perguntas pra você, Rafael: - chegou a funcionar se você tentou novamente? - você consegue acessar da sua máquina a URL a seguir? http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml

Olá Alexandre,

O erro persiste na minha máquina, e a url eu consegui acessar normalmente.

Obrigado por sua resposta.

Att,

Rafael