[jboss-jira] [JBoss JIRA] Assigned: (JBRULES-854) I have following problem with null valuated string properties
Edson Tirelli (JIRA)
jira-events at lists.jboss.org
Fri Jun 29 16:11:59 EDT 2007
[ http://jira.jboss.com/jira/browse/JBRULES-854?page=all ]
Edson Tirelli reassigned JBRULES-854:
-------------------------------------
Assignee: Edson Tirelli (was: Mark Proctor)
> I have following problem with null valuated string properties
> -------------------------------------------------------------
>
> Key: JBRULES-854
> URL: http://jira.jboss.com/jira/browse/JBRULES-854
> Project: JBoss Rules
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: Reteoo
> Affects Versions: 4.0.0.MR2
> Environment: Windows XP SP2
> Reporter: Vesa Tuononen
> Assigned To: Edson Tirelli
> Priority: Blocker
>
> I have very simple object with PropertyChangeSupport.
> Java code listed bellow object and test method:
> import java.beans.PropertyChangeListener;
> import java.beans.PropertyChangeSupport;
> import java.io.InputStreamReader;
> import org.drools.RuleBase;
> import org.drools.RuleBaseFactory;
> import org.drools.StatefulSession;
> import org.drools.compiler.DroolsParserException;
> import org.drools.compiler.PackageBuilder;
> public class OwnTest{
> public static class Row{
> private final PropertyChangeSupport changes = new PropertyChangeSupport( this );
> private String field1;
> private String field2;
>
> public Row(){}
>
> public String getField1() {
> return field1;
> }
> public void setField1(String field1) {
> String oldField1 = this.field1;
> this.field1 = field1;
> this.changes.firePropertyChange( "field1",
> oldField1,
> this.field1 );
> }
> public String getField2() {
> return field2;
> }
> public void setField2(String field2) {
> String oldField2 = this.field2;
> this.field2 = field2;
> this.changes.firePropertyChange( "field2",
> oldField2,
> this.field2 );
> }
>
> public void addPropertyChangeListener(final PropertyChangeListener l) {
> this.changes.addPropertyChangeListener( l );
> }
> public void removePropertyChangeListener(final PropertyChangeListener l) {
> this.changes.removePropertyChangeListener( l );
> }
> }
> /**
> * @param args
> * @throws Exception
> * @throws DroolsParserException
> * @throws Exception
> */
> public static void main(String[] args) throws Exception {
> Row r = new Row();
> r.setField1(null);
> r.setField2(null);
> PackageBuilder builder = new PackageBuilder();
> builder.addPackageFromXml(new InputStreamReader( OwnTest.class.getResourceAsStream("rule.xml")));
> RuleBase ruleBase = RuleBaseFactory.newRuleBase();
> ruleBase.addPackage( builder.getPackage() );
> StatefulSession workingMemory = ruleBase.newStatefulSession();
> workingMemory.assertObject(r, true);
> workingMemory.fireAllRules();
> }
> }
> and rule.xml
> <?xml version="1.0" encoding="UTF-8"?>
> <package name="test"
> xmlns="http://drools.org/drools-3.0"
> xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
> xs:schemaLocation="http://drools.org/drools-3.0 drools-3.0.xsd">
> <import name="OwnTest.Row"/>
> <rule name="1">
> <lhs>
> <pattern object-type="Row">
> <field-constraint field-name="field1">
> <literal-restriction evaluator="==" value="1" />
> </field-constraint>
> </pattern>
> </lhs>
> <rhs>
> System.out.println("--"+input.getField1());
> input.setField1("2");
> </rhs>
> </rule>
> <rule name="2">
> <lhs>
> <pattern identifier="input" object-type="Row">
> <field-constraint field-name="field1">
> <literal-restriction evaluator="==" value="2" />
> </field-constraint>
> </pattern>
> </lhs>
> <rhs>
> System.out.println("--"+input.getField1());
> input.setField1("3");
> </rhs>
> </rule>
> <rule name="3">
> <lhs>
> <pattern identifier="input" object-type="Row">
> <field-constraint field-name="field1">
> <literal-restriction evaluator="==" value="3" />
> </field-constraint>
> </pattern>
> </lhs>
> <rhs>
> System.out.println("--"+input.getField1());
> input.setField1("4");
> </rhs>
> </rule>
> <rule name="4">
> <lhs>
> <pattern identifier="input" object-type="Row">
> <field-constraint field-name="field1">
> <literal-restriction evaluator="==" value="4" />
> </field-constraint>
> </pattern>
> </lhs>
> <rhs>
> System.out.println("--"+input.getField1());
> input.setField1("0");
> input.setField2("5");
> </rhs>
> </rule>
> <rule name="5">
> <lhs>
> <pattern identifier="input" object-type="Row">
> <field-constraint field-name="field2">
> <literal-restriction evaluator="==" value="2" />
> </field-constraint>
> </pattern>
> </lhs>
> <rhs>
> System.out.println("--"+input.getField1());
> System.out.println("--"+input.getField2());
> input.setField2("2b");
> </rhs>
> </rule>
> </package>
> with this rule set I get following StackTrace:
> Exception in thread "main" java.lang.NullPointerException
> at org.drools.reteoo.CompositeObjectSinkAdapter$HashKey.setValue(CompositeObjectSinkAdapter.java:478)
> at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:292)
> at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:183)
> at org.drools.reteoo.Rete.assertObject(Rete.java:121)
> at org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:201)
> at org.drools.reteoo.ReteooWorkingMemory.doAssertObject(ReteooWorkingMemory.java:70)
> at org.drools.common.AbstractWorkingMemory.assertObject(AbstractWorkingMemory.java:724)
> at org.drools.common.AbstractWorkingMemory.assertObject(AbstractWorkingMemory.java:568)
> but if I remove some rules everything works fine.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list