2011-02-07 113 views
5

運行IBM WebSphere上的Java應用程序運行意外的異常java.math.BigDecimal中造成了這樣的例外:在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上運行的代碼。

+0

顯示的其中這個正在生成將是非常有用的代碼,特別是如果將一個字符串被轉換爲BigDecimal中問題 – Riggy 2011-02-07 16:35:29

+0

變量的設定的塊,這將是有益的,看看字符串爲好。 – rajah9 2011-02-07 16:42:07

回答

1

修正:

其實這整個表達的是,我認爲沒有必要提循環中。我提出的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)); 
    } 
} 
1

我會將您的問題提交給IBM軟件支持。他們不收取每個實例的費用,只要您有支持協議,它就是無限量的請求。

0

是policyFormTotal NULL?如何formList.getFormPremiumAmt()的結果? 你從不檢查這個代碼塊中的那些。

0

我看到在WebSphere同一堆棧跟蹤,在我的情況下,它通過傳遞一個空到java.math.BigDecimal#add引起的。它不是特定於JDK的(Oracle JDK在傳遞null時類似地拋出NPE,但不先委託給另一個方法),只是在使用WebSphere的測試環境中,我們對數據的控制較少,因此空值發生得更多。