[
https://issues.jboss.org/browse/JBRULES-2621?page=com.atlassian.jira.plug...
]
Mark Proctor updated JBRULES-2621:
----------------------------------
Fix Version/s: 5.3.0.M1
(was: 5.2.0.CR1)
Moving this one to Drools 5.3 for now. Discussed with edson and would like to think on
this more. We aren't sure if filtering is correct, maybe an sSValid or getFactHandle(
String ).
NPE due to activation.getDeclarationValue( declId )
---------------------------------------------------
Key: JBRULES-2621
URL:
https://issues.jboss.org/browse/JBRULES-2621
Project: Drools
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: drools-api
Affects Versions: 5.1.0.FINAL
Reporter: Wolfgang Laun
Assignee: Edson Tirelli
Fix For: 5.3.0.M1
Trying to access the declarations and their values of an activation, as used during
ActivationEvent logging:
List<String> declIds = );
for( String declId: activation.getDeclarationIDs( ){
Object declVal = activation.getDeclarationValue( declId );
// ...
}
If, however, a fact is retracted, this code, when executed for an
AfterActivationFiredEvent, throws a NPE when declId is a binding for a component of the
retracted fact.
The optimum solution would be to not get such useless bindings in the List<String>
returned by getDeclarationIDs() which is in AgendaItem.java. I have added the
if-statement. The following code is untested:
public List<String> getDeclarationIDs() {
Declaration[] declArray = this.getRule().getDeclarations();
List<String> declarations = new ArrayList<String>();
for( Declaration decl : declArray ) {
// return only "sound" declaration IDs
if( this.tuple.get( decl ).getObject() != null ){
declarations.add( decl.getIdentifier() );
}
}
return Collections.unmodifiableList( declarations );
}
--
This message is automatically generated by JIRA.
For more information on JIRA, see:
http://www.atlassian.com/software/jira