Drools JBoss将结果异常映射到实际规则结果的行号

Drools JBoss将结果异常映射到实际规则结果的行号,drools,Drools,我正在使用JBossDrools 5.1。我的问题是,当规则的结果抛出异常时,很难理解导致问题的行。例如,在下面的规则中,它抛出异常- rule "exception handling" when then String str = null; str.length(); end 下面是异常堆栈 Caused by: org.drools.runtime.rule.ConsequenceException: rule: exception handling a

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

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

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

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

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

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

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

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

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

转储整个生成的类也非常有用。异常中的行号可能很酷,但我可以在开发期间使用转储。谢谢。转储整个生成的类也很有帮助。异常中的行号可能很酷,但我可以在开发期间使用转储。谢谢