2008/5/6 Alessandro Lazarotti <
alessandro@siq.com.br>:
Thanks Michael, I simulate.. your rule fire with successful.
I discovered the problem. The object in property (like Foo in your example), when null, it's not throws NullPointerException, but "org.mvel.PropertyAccessException: unable to resolve property".
With that, I never imagined that the problem was nullPointer, but I thought about any access visibility (duh!).
[]'s
Alessandro
Michael B. escreveu:
Okay, I wrote a test case around the following and it works fine so let me
know if this isnt what you are working with...
Foo Class
public class Foo {
private String m_name;
public String getName()
{
return m_name; }
public void setName(String nm)
{
m_name = nm;
}
}
Bar Class
public class Bar {
private Foo m_foo;
public Foo getFoo()
{
return m_foo;
}
public void setFoo(Foo f)
{
m_foo = f;
}
public String toString()
{
return "I have a foo with a name of " + m_foo.getName();
}
}
DRL Rule
rule "FooBar Rule"
when
$bar : Bar( foo.name != "Wrong" )
then System.out.println("Test Successful - " + $bar.toString());
end
Junit Test Case
public void testProperties() {
try
{
final Reader source = new InputStreamReader(
FooBarTest.class.getResourceAsStream( "FooBar.drl" ) );
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl(source);
if ( builder.hasErrors() ) {
System.out.println( builder.getErrors().toString() );
throw new RuntimeException( "Unable to compile
\"FooBar.drl\".");
}
//get the compiled package (which is serializable)
final Package pkg = builder.getPackage();
//add the package to a rulebase (deploy the rule package).
ruleBase.addPackage( pkg );
final StatefulSession session = ruleBase.newStatefulSession();
Foo foo = new Foo();
foo.setName("Test");
Bar bar = new Bar();
bar.setFoo(foo);
session.insert(bar);
session.fireAllRules(); }
catch (Exception e)
{
System.out.println(e.getMessage());
e.printStackTrace();
fail(e.getMessage());
}
}