неожиданное исключение java.math.BigDecimal, работающее в IBM WebSphere

Запуск приложения Java в IBM WebSphere вызвал такое исключение:

Caused by: java.lang.NullPointerException
at java.math.BigDecimal.add2DFP(BigDecimal.java:1946)
at java.math.BigDecimal.add(BigDecimal.java:1881)
at com.somepackage.components.view.PremiumSummaryViewModel.setPremiums(PremiumSummaryViewModel.java:101)

Нулевая проверка выполнена. Как я рассмотрел, класс java.math.BigDecimal не имеет такого метода add2DFP и не вызывает его. Возможно, это специфично для IBM JDK.

Любой комментарий по этому поводу будет оценен.

Предоставление кода для исключения

    BigDecimal annualPremiumAmt = nwtPremium != null && nwtPremium.getAnnualAmt() != null ? nwtPremium.getAnnualAmt() : BigDecimal.ZERO;
    if (nwtPremium != null) {
        BigDecimal formPremiumAmt = nwtPremium.getAnnualAmt();
        if (formPremiumAmt != null) {
            policyFormTotal = policyFormTotal.add(annualPremiumAmt); //Bigdecimal
            formList.setFormPremiumAmt(formList.getFormPremiumAmt().add(annualPremiumAmt)); //101 line
        }
    }

Экземпляр работает на IBM JDK 1.6.


person Dalius Šidlauskas    schedule 07.02.2011    source источник
comment
Было бы очень полезно показать блок кода, в котором это генерируется, особенно настройку рассматриваемых переменных.   -  person Riggy    schedule 07.02.2011
comment
Если строка преобразуется в BigDecimal, было бы полезно также увидеть строку.   -  person rajah9    schedule 07.02.2011
comment
В прошлом у IBM JVM были проблемы, связанные с кодировкой, с BigDecimal. Пожалуйста, не кормите его ничем, кроме латыни.   -  person erloewe    schedule 07.02.2011
comment
Откуда вы знаете, что такого метода под названием add2DFP не существует. Скорее всего это частный метод. Вы можете декомпилировать и увидеть, что такой существует. Если бы метод не существовал, вы получили бы другую ошибку (скорее всего, java.lang.NoSuchMethodError).   -  person Manglu    schedule 10.02.2011


Ответы (3)


Я передам ваши вопросы в службу поддержки программного обеспечения IBM. Они не взимают плату за экземпляр, это неограниченное количество запросов, если у вас есть соглашение о поддержке.

person Albert T. Wong    schedule 09.02.2011

Исправлено:

На самом деле все это выражение находится внутри цикла, о котором я счел излишним упоминать. Я переместил объявление BigDecimal AnnualPremiumAmt перед циклом и реорганизовал код:

BigDecimal annualPremiumAmt;
for(...) { 

    if (nwtPremium) {
        annualPremiumAmt = nwtPremium.getAnnualAmt() != null ? nwtPremium.getAnnualAmt() : BigDecimal.ZERO;
        policyFormTotal = policyFormTotal.add(annualPremiumAmt);
        formList.setFormPremiumAmt(formList.getFormPremiumAmt().add(annualPremiumAmt));
    }
}
person Dalius Šidlauskas    schedule 12.02.2011

Является ли policyFormTotal NULL? Как насчет результата formList.getFormPremiumAmt()? Вы никогда не проверяете их в этом блоке кода.

person patros    schedule 09.02.2011
comment
policyFormTotal не был нулевым. - person Dalius Šidlauskas; 12.02.2011