我正在使用JBoss drools 5.1。我的问题是当规则的后果抛出异常时,很难理解导致问题的那一行。例如,在下面的规则中,它抛出异常 -
rule "exception handling"
when
then
String str = null;
str.length();
end
以下是异常堆栈
Caused by: org.drools.runtime.rule.ConsequenceException: rule: exception handling
at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:927)
at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:856)
at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1071)
at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:785)
at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:751)
at org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)... 26 more
Caused by: java.lang.NullPointerException
at defaultpkg.Rule_exception_handling_0.defaultConsequence(Rule_exception_handling_0.java:8)
at defaultpkg.Rule_exception_handling_0DefaultConsequenceInvoker.evaluate(Rule_exception_handling_0DefaultConsequenceInvoker.java:24)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:917)
... 32 more
如何将第8行映射到导致异常的行(在本例中为str.length())?
答案 0 :(得分:1)
我建议您为Drools项目提交一张票,看看它们是否可以改进异常处理和行映射。他们已经为许多事情映射了行号,包括调试,但似乎没有映射运行时结果异常。
同时,它无论如何都不是理想的解决方案,但您可以将生成的类转储到文件系统并查看它们。行号来自这些类。为此,最简单的方法是设置系统属性,例如在执行应用程序时:
java -Ddrools.dump.dir=/tmp/classdump ...
如果您愿意,可以在配置文件或API上设置相同的选项。查看Drools文档,了解如何操作。