2011-02-07 19 views
5

Chạy ứng dụng Java trên IBM WebSphere gây ra ngoại lệ như:bất ngờ ngoại lệ java.math.BigDecimal chạy trên 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) 

séc Null được thực hiện. Khi tôi xem xét lớp java.math.BigDecimal không có phương pháp như vậy add2DFP và không gọi một trong hai. Có lẽ nó là đặc trưng cho JDK của IBM.

Bất kỳ nhận xét nào về điều này sẽ được đánh giá cao.

cung cấp mã liên quan đến ngoại lệ

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 
     } 
    } 

Instance đang chạy trên IBM JDK 1.6.

+0

Hiển thị khối mã nơi tạo mã này sẽ rất hữu ích, đặc biệt là cài đặt các biến được đề cập đến – Riggy

+0

Nếu chuỗi đang được chuyển đổi thành BigDecimal, sẽ hữu ích khi xem chuỗi đó. – rajah9

+0

IBM JVM đã có các vấn đề liên quan đến mã hóa trong quá khứ với BigDecimal. Xin vui lòng không ăn nó bất cứ điều gì khác ngoài latin. – erloewe

Trả lời

1

Đã sửa lỗi:

Thực ra toàn bộ biểu thức này nằm trong vòng lặp mà tôi nghĩ là không cần thiết phải đề cập đến. Tôi đã chuyển lời tuyên bố của BigDecimal annualPremiumAmt trước khi vòng lặp và tổ chức lại mã:

BigDecimal annualPremiumAmt; 
for(...) { 

    if (nwtPremium) { 
     annualPremiumAmt = nwtPremium.getAnnualAmt() != null ? nwtPremium.getAnnualAmt() : BigDecimal.ZERO; 
     policyFormTotal = policyFormTotal.add(annualPremiumAmt); 
     formList.setFormPremiumAmt(formList.getFormPremiumAmt().add(annualPremiumAmt)); 
    } 
} 
1

Tôi sẽ gửi các vấn đề của bạn tới Bộ phận hỗ trợ phần mềm của IBM. Họ không tính phí cho mỗi trường hợp, số lượng yêu cầu không giới hạn miễn là bạn có thỏa thuận hỗ trợ.

0

Is policyFormTotal NULL? Làm thế nào về kết quả của formList.getFormPremiumAmt()? Bạn không bao giờ kiểm tra những người trong khối mã này.

+0

policyFormTotal không phải là null. –

0

tôi nhìn thấy stacktrace cùng trên WebSphere, trong trường hợp của tôi nó gây ra bằng cách thông qua một null vào java.math.BigDecimal#add. Nó không có gì đặc trưng cho JDK (Oracle JDK ném NPE tương tự khi truyền một giá trị null, nhưng không có ủy quyền cho phương thức khác trước), chỉ trong môi trường thử nghiệm với WebSphere, chúng ta có ít quyền kiểm soát dữ liệu hơn.