2012-02-10 6 views
1

私はJBossのdrools 5.1を使用しています。私の問題は、ルールの結果が例外をスローするときです。問題を引き起こした行を理解することは難しいです。以下のルールの例では、それは例外をスロー -JBossは結果例外から実際のルール結果にマップ行番号を落とす

rule "exception handling" 
when 
then 
    String str = null; 
    str.length(); 
end 
以下

は、例外スタックこの場合STRに(例外を引き起こした行に行番号8をマッピングする方法

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 

あります。長さ())?

答えて

1

Droolsプロジェクトのチケットを提出し、例外処理とラインマッピングを改善できるかどうかを確認することをお勧めします。彼らはすでにデバッグを含む多くのものの行番号をマップしていますが、実行時の結果の例外はマップされていないようです。

一方、理想的な解決策ではありませんが、生成されたクラスをファイルシステムにダンプして見ることができます。行番号はそれらのクラスから来ます。ご希望の場合は

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

同じオプションが設定ファイルやAPIによって設定することができます。これを行うには、最も簡単な方法は、アプリケーションを実行すると、たとえば、システムプロパティを設定することです。どのようにDroolsのドキュメントをチェックしてください。

+0

生成されたクラス全体のダンプも非常に役に立ちます。例外の行番号はクールでしたが、私は開発中にダンプと一緒に暮らすことができます。ありがとう。 – Shamik

関連する問題