2011-02-07 111 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的测试环境中,我们对数据的控制较少,因此空值发生得更多。