excepción inesperada java.math.BigDecimal ejecutándose en IBM WebSphere
nullpointerexception (4)
La ejecución de la aplicación Java en IBM WebSphere provocó dicha excepción:
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)
La verificación nula está hecha. Cuando revisé la clase java.math.BigDecimal no tiene dicho método add2DFP y tampoco llama a ninguno. Tal vez sea específico para JDK de IBM.
Cualquier comentario sobre esto sería apreciado.
Proporcionando un código con respecto a la excepción
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
}
}
La instancia se está ejecutando en IBM JDK 1.6.
¿Es policyFormTotal NULL? ¿Qué tal el resultado de formList.getFormPremiumAmt ()? Nunca revisas esos en este bloque de código.
Enviaría sus problemas al Soporte de software de IBM. No cobran por instancia, es una cantidad ilimitada de solicitudes siempre que tenga un acuerdo de soporte.
Fijo:
En realidad, toda esta expresión está dentro del ciclo que pensé que era innecesario mencionar. He movido la declaración de BigDecimal annualPremiumAmt antes del bucle y el código reorganizado:
BigDecimal annualPremiumAmt;
for(...) {
if (nwtPremium) {
annualPremiumAmt = nwtPremium.getAnnualAmt() != null ? nwtPremium.getAnnualAmt() : BigDecimal.ZERO;
policyFormTotal = policyFormTotal.add(annualPremiumAmt);
formList.setFormPremiumAmt(formList.getFormPremiumAmt().add(annualPremiumAmt));
}
}
Veo el mismo stacktrace en WebSphere, en mi caso es causado al pasar un nulo a java.math.BigDecimal#add
. No es nada específico del JDK (el Oracle JDK arroja un NPE de manera similar cuando pasa un nulo, pero sin delegar primero a otro método), solo que en el entorno de prueba con WebSphere tenemos menos control sobre los datos para que los nulos sucedan más.