[rules-users] Maps again - key derived from another object

KDR dr.soprano at neverbox.com
Sat Aug 22 09:04:27 EDT 2009


Hi, I'm still having issues with this despite getting the snapshot update to
the mvel jar. Can anyone suggest what else to try please? Am I doing
something wrong?

Say I insert 2 objects:
- ObjectWithKey which has a field that is a string to be used as the key.
- ObjectWithMap has a field that is a map, which contains entries -
including one for the key string that's in the inserted ObjectWithKey.

With the rule below, trying to get the value with the key always produces
null (although with the updated jar at least I no longer get a compilation
error!). However if I use a literal for the key, or from an inserted String
object (the commented out $s below), then it works to print out the right
value for the key.

rule "Tester"
	dialect "mvel"
	when
		# $s : String (this == "aString") # works if I use $s as key
		$a : ObjectWithKey (
			$k: aStringForKey,
			$o: objectWithMap
			) 
		$b: ObjectWithMap (
			this == $o,  
			map != null # works fine, it can see there's a map in existence
			# map[$k] != null, # no good, Drools thinks this value is always null  
			# map[$s]  # this works however
		)
	then 
		System.out.println("ObjectWithMap has non-null map, value for key is "); #
prints OK
		System.out.println($b.map[$k]); # prints out null!
end

I'm at my wit's end. I've also tried Java (with get) and eval alternatives
and can't get it to work. If anyone can suggest a way to get a value out of
the map (for testing against other conditions) when the map is a field of
one object, using a key that is a field in another object, I'd really
appreciate it.

Cheers

-- 
View this message in context: http://www.nabble.com/Maps-again---key-derived-from-another-object-tp25093672p25093672.html
Sent from the drools - user mailing list archive at Nabble.com.




More information about the rules-users mailing list