2010-11-15 13 views
5

Ho la seguente regola Drools a cui invio la mappa piena di elementi, ma quando viene eseguita ho un elemento. Perché ottengo null quando dovrebbe essere "Y" per il valore? Quando inserisco il breakpoint nel metodo ACDebug.debug() e ispeziono la mappa dopo che $ map.put() è stato eseguito, sembra buono, ha "Y" per il valore, ma dopo che le mie regole sono state eseguite ho nullo? Qualcuno ha problemi simili?Mappe e stringhe nelle regole di Drools

import java.util.Map; 
import java.util.HashMap; 
import edu.abc.ACDebug; 

rule "POSTPROCESSOR 8" 
    ruleflow-group "supress-processor" 
    when 
     $map:Map(keySet contains "STANDARD_ADDRESS:STREET_NAME") 
    then 
     ACDebug.debug($map, "Map before PUT: "); 
     $map.put("/locationList/sourceAddress/fullStreet",new String("Y")); 
     ACDebug.debug($map, "Map after PUT: "); 
     $map.remove("STANDARD_ADDRESS:STREET_NAME"); 
end 

risposta

7

Dopo aver apportato le modifiche alla mappa, è necessario eseguire un aggiornamento. Ciò consente alla memoria di lavoro di sapere che hai modificato la mappa.

Aggiungere la seguente riga:

update($map); 
+0

Grazie, questo veramente aiutato. Ho visto esempi senza call of update() e ho pensato che funzionasse sempre. – Zec

Problemi correlati