code: @Override
      public ExchangeRate getExchangeRate(ConversionQuery conversionQuery) {
          for (ExchangeRateProvider prov : this.providers) {
              try {
                  if (prov.isAvailable(conversionQuery)) {
                      ExchangeRate rate = prov.getExchangeRate(conversionQuery);
                      if (Objects.nonNull(rate)) {
                          return rate;
                      }
                  }
              } catch (Exception e) {
                  throw new CurrencyConversionException(conversionQuery.getBaseCurrency(), conversionQuery.getCurrency(), null,
                      "Rate Provider did not return data though at check before data was flagged as available," +
                          " provider=" + prov.getContext().getProviderName() + ", query=" + conversionQuery, e);
              }
          }
          throw new CurrencyConversionException(conversionQuery.getBaseCurrency(), conversionQuery.getCurrency(), null,
                  "All delegate prov iders failed to deliver rate, providers=" + this.providers +
                          ", query=" + conversionQuery);
      }
docs: /*
  (non-Javadoc)
  
  @see
  javax.money.convert.ExchangeRateProvider#getExchangeRate(javax.money.
  CurrencyUnit, javax.money.CurrencyUnit,
  javax.money.convert.ConversionContext)