Java 如何将字符串到字符串的映射传递到Drools会话

Java 如何将字符串到字符串的映射传递到Drools会话,java,drools,Java,Drools,我有将值插入数据库的Drools规则。我想给会话一个字符串值的映射,我必须将字符串值映射到应该写入的字符串值。在我的Java文件中,类似这样的内容: StatefulKnowledgeSession session = ... Map<String, String> stateToPostalCode = new HashMap<>(); stateToPostalCode.insert("Texas", "TX"); stateToPostalCode.inse

我有将值插入数据库的Drools规则。我想给会话一个字符串值的映射,我必须将字符串值映射到应该写入的字符串值。在我的Java文件中,类似这样的内容:

StatefulKnowledgeSession session = ...    
Map<String, String> stateToPostalCode = new HashMap<>();
stateToPostalCode.insert("Texas", "TX");
stateToPostalCode.insert("New Jersey", "NJ");
....
session.insert(stateToPostalCode);
StatefulKnowledgeSession=。。。
Map stateToPostalCode=新HashMap();
州代码。插入(“德克萨斯州”、“德克萨斯州”);
州代码。插入(“新泽西州”、“新泽西州”);
....
插入(状态代码);
然后我的规则可以将各州转换为邮政编码

但是插入它不起作用。我得到一个堆栈跟踪和一个关于

java.lang.ClassCastException:无法将java.lang.String转换为 java.lang.Boolean


插入
Map
工作,但不插入
Map
。我做错了什么?是否有其他方法可以实现我的目标?

更改规则解决了问题。下面是正确的语法

when
...        
   $map : Map($value: this["Texas"])

您可能没有在规则中正确使用映射。为了更好地诊断,您必须将它们添加到Q中。您使用的是哪种映射/哈希映射?我在JDK7/JDK8实现中看不到insert()方法。该会话是drools StatefulKnowledgeSession。我正在尝试将映射插入会话,以便我的规则可以使用它。我无法插入地图,所以规则怎么说无关紧要。请发布规则代码。在插入过程中,这样的失败通常是由于错误的规则代码造成的。(提示:添加@xyz会提醒用户xyz,这样你就不会浪费时间。)-1因为在提问时没有提供相关信息。我不想让你失望,但我不认为这是一个持久的解决方案。根据Drools版本的不同,您可能无法使用以前绑定的变量来代替字符串文字。而且你可能必须要防止钥匙不在地图上,或者拼写不一样。。。祝你好运。