2017-09-27 7 views
0

私はdroolsを初めて使っています。 フィールドがPOJOに存在するかどうかをRHSでチェックしたいと思います。ドルゴのpojoの中にフィールドがあることをRHSでチェックしてください。

{ 
    "category": [ 
    { 
     "nlp": [ 
     { 
      "mainCategory": "Politics" 
     } 
     ], 
     "crawler": [ 
     { 
      "isNLP": true, 
      "mainCategory": "Politics" 
     } 
     ] 
    } 
    ] 
} 

これは

  1. EsRootDoc.java
  2. Crawler.java
  3. Nlp.java

EsRootDoc生成されるPOJOのリストを持っている主なクラスがあります方法と分野」。

$RHSmap1:EsRootDoc() 
    and 

    $map1:EsRootDoc($categorylist1:category) 

    $category2:Category($nlplist2:nlp) from $categorylist1 

    $nlp2:Nlp(mainCategory=="politics") from $nlplist2 



then 

    $RHSmap1.setEvent("fight"); 

end` 

これは私に次のエラー

[Error: unable to resolve method using strict-mode: com.orkash.EnrichmentService.EnrichmentController.tempJsonToClass.EsRootDoc.setEvent(java.lang.String)] [Near : {... $RHSmap1.setEvent("fight"); ....}]

を与えている私は、RHSにチェックを提供する必要があります: - EsRootDocがフィールドイベント

+0

、それがお役に立てば幸いです。あなたの 'EsRootDoc'クラスは' setEvent(String) 'メソッドを持っていますか? –

+1

いいえ、このメソッドがありません。私の使用例は、EsRootDocがイベントフィールドを持っている場合にsetEventメソッドを呼び出す前にチェックを行う必要があるということです。** setEvent(String)**メソッドを呼び出す必要があります。 – gaurav9620

+0

普通のJavaでそれをしますか?あなたの 'EsRootDocument'クラスはどのように見えますか?私は、このメソッドを持つ特定のサブクラスとそうでないものがあると仮定します。右? –

答えて

1

を持っている場合は何もDroolsの中に存在しないこと(私が知る限り)、あなたが探していることをすることができます。ルールのRHSは、ほぼ純粋なJavaです。基本的なルールは次のとおりです。Javaで実行できない場合は、DroolsのルールのRHSで実行することはできません。

あなたがやろうとしていることは、リフレクションを使用してJavaで達成できるということです。私のお勧めは、リフレクションを使用してその属性が存在する場合、オブジェクトの属性の値を設定するヘルパークラスを作成することです。あなたのルールは次のようになります。

rule 'Some Rule' 
when 
    $RHSmap1:EsRootDoc() 
    $map1:EsRootDoc($categorylist1:category) 
    $category2:Category($nlplist2:nlp) from $categorylist1 
    $nlp2:Nlp(mainCategory=="politics") from $nlplist2 
then 
    Helper.setAttribute($RHSmap1, "event", "fight"); 
end 

は、ルールのRHSが強く型付けされ

関連する問題