JBoss将映射行号从后果异常映射到实际规则后果

时间:2012-02-10 02:42:30

标签: drools

我正在使用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())?

1 个答案:

答案 0 :(得分:1)

我建议您为Drools项目提交一张票,看看它们是否可以改进异常处理和行映射。他们已经为许多事情映射了行号,包括调试,但似乎没有映射运行时结果异常。

同时,它无论如何都不是理想的解决方案,但您可以将生成的类转储到文件系统并查看它们。行号来自这些类。为此,最简单的方法是设置系统属性,例如在执行应用程序时:

java -Ddrools.dump.dir=/tmp/classdump ...

如果您愿意,可以在配置文件或API上设置相同的选项。查看Drools文档,了解如何操作。