If you have data where $panDevice.getSmartDeviceModel() returns null, a condition such as eval( $panDevice.getSmartDeviceModel().getDeviceClass() == null ) will cause a NPE. It is evaluated in parallel and independent from any other rool that might check $panDevice.getSmartDeviceModel() == null
All accesses to fields of $panDevice.getSmartDeviceModel() must be guarded against this reference being null. -W On 14/12/2011, Venkat <[email protected]> wrote: > Please find the rules below. That exception is happening from this rule > > PAN Device MAC Address null or empty rule > > to > > PAN Device Smart Device Model null rule > > > > import java.lang.Error; > import java.util.List; > import com.ge.energy.drms.smartgrid.datamodel.model.Customer > import com.ge.energy.drms.core.datamodel.messagesupport.ServiceContext > import > com.ge.energy.drms.external.integration.service.persistence.RegistrationDeregistrationPersistence > import > com.ge.energy.drms.smartgrid.datamodel.services.enddevicemanagement.pandeviceregistrationservice.MissingEntryFault > import com.ge.energy.drms.smartgrid.datamodel.model.ElectricServiceInterface > import com.ge.energy.drms.smartgrid.datamodel.model.PANDevice > > global Customer customer; > global ServiceContext serviceContext; > > rule "Customer and Service Context null check rule" > no-loop true > salience 1000 > when > eval( customer == null && serviceContext == null ) // condition > then > throw new MissingEntryFault("Customer and ServiceContext are > both > required"); // consequence > end > > rule "User Name null or empty check rule" > no-loop true > salience 900 > when > ServiceContext( userName == null || userName == "" ) // > condition > then > throw new MissingEntryFault("USER ID is required"); // > consequence > end > /* > rule "User Name validation check rule" > no-loop true > salience 800 > when > $serviceContext : ServiceContext() > RegistrationDeregistrationPersistence( eval( validateUserName( > $serviceContext ) <= -1 ) ) // condition > then > throw new Error("USER ID is invalid"); // consequence > end > */ > rule "Service Account Number null or empty rule" > no-loop true > salience 700 > when > Customer( serviceAccountNumber == null || serviceAccountNumber > == "" ) // > condition > then > throw new MissingEntryFault("Service Account Number is > required"); // > consequence > end > > rule "Install Service null or empty rule" > no-loop true > salience 600 > when > Customer( installService == null || installService == "" ) // > condition > then > throw new MissingEntryFault("Install Service is required"); // > consequence > end > > rule "Electric Service Interface null or empty rule" > no-loop true > salience 500 > when > Customer( electricServiceInterfaces == null || > electricServiceInterfaces.size() <=0 ) // condition > then > throw new MissingEntryFault("Electric Service Interfaces are > required"); > // consequence > end > > rule "ESN null or empty rule" > no-loop true > salience 400 > when > $customer : Customer() > $esi : ElectricServiceInterface() from > $customer.getElectricServiceInterfaces() > eval( $esi.getESN() == null || $esi.getESN().isEmpty() ) > //condition > then > throw new MissingEntryFault("ESN cannot be null or empty"); // > consequence > end > > rule "PAN Device null or empty rule" > no-loop true > salience 300 > when > $customer : Customer() > $esi : ElectricServiceInterface() from > $customer.getElectricServiceInterfaces() > eval( $esi.getPANdevices() == null || > $esi.getPANdevices().size()<=0 ) > //condition > then > throw new MissingEntryFault("PAN Device list cannot be null or > empty"); // > consequence > end > > rule "PAN Device MAC Address null or empty rule" > no-loop true > salience 200 > when > $customer : Customer() > $esis : ElectricServiceInterface() from > $customer.getElectricServiceInterfaces() > $panDevice : PANDevice() from $esis.getPANdevices() > eval( $panDevice.getMACAddress() == null || > $panDevice.getMACAddress() == > "" ) //condition > then > throw new MissingEntryFault("MAC Address cannot be null or > empty"); // > consequence > end > > rule "PAN Device Install Code null or empty rule" > no-loop true > salience 100 > when > $customer : Customer() > $esis : ElectricServiceInterface() from > $customer.getElectricServiceInterfaces() > $panDevice : PANDevice() from $esis.getPANdevices() > eval( $panDevice.getInstallCode() == null || > $panDevice.getInstallCode() > == "" ) //condition > then > throw new MissingEntryFault("Install Code cannot be null or > empty"); // > consequence > end > > rule "PAN Device Smart Device Model null rule" > no-loop true > salience 90 > when > $customer : Customer() > $esis : ElectricServiceInterface() from > $customer.getElectricServiceInterfaces() > $panDevice : PANDevice() from $esis.getPANdevices() > eval( $panDevice.getSmartDeviceModel() == null ) > //condition > then > throw new MissingEntryFault("Smart Device Model cannot be > null"); // > consequence > end > > rule "PAN Device Smart Device Model Device Class null rule" > no-loop true > salience 80 > when > $customer : Customer() > $esis : ElectricServiceInterface() from > $customer.getElectricServiceInterfaces() > $panDevice : PANDevice() from $esis.getPANdevices() > eval( $panDevice.getSmartDeviceModel().getDeviceClass() > == null ) > //condition > then > throw new MissingEntryFault("Device Class cannot be null"); // > consequence > end > > rule "PAN Device Smart Device Model Device Type null rule" > no-loop true > salience 70 > when > $customer : Customer() > $esis : ElectricServiceInterface() from > $customer.getElectricServiceInterfaces() > $panDevice :PANDevice() from $esis.getPANdevices() > eval( $panDevice.getSmartDeviceModel().getDeviceType() > == null ) > //condition > then > throw new MissingEntryFault("Device Type cannot be null"); // > consequence > end > > > -- > View this message in context: > http://drools.46999.n3.nabble.com/Eval0Invoker-java-lang-NullPointerException-tp3586222p3586355.html > Sent from the Drools: User forum mailing list archive at Nabble.com. > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users > _______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
