JavaMoney / jsr354-api

JSR 354 - Money and Currency API
http://javamoney.org
Apache License 2.0
353 stars 77 forks source link

NullPointerException on getProviderName() even when provider name exists #100

Open manmedia opened 5 years ago

manmedia commented 5 years ago

The following code generates a query successfully

CurrencyQuery query = CurrencyQueryBuilder.of().setProviderName("ProviderClassName").setCurrencyCodes("CNH").build();

But when the appropriate CurrencyProvider imp is loaded and getCurrencies(CurrencyQuery) is invoked, the following code results into NPE.

if (!query.isEmpty() && query.getProviderName().equals("SomeName")) {

      for (CurrencyUnit c : currencySet) {

          if (c.getCurrencyCodes().equals(query.getCurrencyCodes()) {

             return Collections.singleton(c);

          }

     }

}

We are always building the currency query such that it will have a provider name and currency unit. The above code results into an NPE for getProviderName() where a provider name actually exists.

keilw commented 5 years ago

Was it possible to debug the code to see, which line throws the NPE? In the first one swapping the equals() method and using it on a constant expression like "SomeName" would also be safer, even if the provider name should exist. In the loop below, c.getCurrencyCodes() being null would be another possible source for an NPE. That's why I wonder, if breakpoints allow to narrow it down.