1

Drools 5.5.0.Final と Guvnor 5.5.0.Final をサンプルの住宅ローン パッケージで使用します。

次のバッチ実行コマンドを使用して REST json リクエストを送信する場合:

{
  "batch-execution": {
     "lookup":"ksession1",
     "commands":[
       {
          "insert":{
             "out-identifier":"outApplicant",
             "return-object":"true",
             "object": {
               "Applicant":{
                 "age":17
               }
             }
           }
       },
       {
          "fire-all-rules":""
       }
     ]
  }
} 

戻り値: 500 内部サーバー エラー

com.thoughtworks.xstream.converters.ConversionException: Applicant : Applicant
---- Debugging information ----
message             : Applicant
cause-exception     : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message       : Applicant
class               : org.drools.command.runtime.rule.InsertObjectCommand
required-type       : org.drools.command.runtime.rule.InsertObjectCommand
converter-type      : org.drools.runtime.help.impl.XStreamJson$JsonInsertConverter
line number         : -1
class[1]            : org.drools.command.runtime.BatchExecutionCommandImpl
converter-type[1]   : org.drools.runtime.help..XSt...$JsonBatchExecutionCommandConverter
version             : null

Applicant クラスは、XSD 内の住宅ローン パッケージで次のように定義されます。

age:Whole number (integer)
applicationDate:Date
creditRating:Text
name:Text
approved:True or False

Applicant クラスの場所を drools に伝えるにはどうすればよいですか? (これは住宅ローンのサンプルで XSD ファイルとして定義されています)

knowledge-services.xml は現在、次のようになっています。

<drools:grid-node id="node1"/>
<drools:kbase id="kbase1" node="node1">
    <drools:resources>
          <drools:resource type="PKG" source="http://localhost:8080/drools-guvnor/org.drools.guvnor.Guvnor/packages/mortgages"/>
    </drools:resources>
</drools:kbase>

Applicant クラスのパッケージ名を完全に指定するように REST json 要求を変更するとうまくいくのではないかと思います。

         ...
          "object": {
           "something.somethingelse.Applicant":{
             "age":17
           }
         }
         ...

しかし、Applicant の完全修飾パッケージ名が宣言されている場所が見つからないようですか?

REST インターフェイスの全体的なポイントは、Web サービス インターフェイスを介して drools にアクセスすることであるため、受け入れ可能な回答は、Java コードを記述しなくても機能する例を示す必要があります。

春の設定、または機能するjsonリクエストを作成する他の方法はありますか?

4

1 に答える 1

1

誰も答えなかったので、問題をデバッグするために使用した根本的な原因と段階的な手順とともに、私のために働いた答えを投稿しています。もっと良い方法があればコメントしてください。

まず、モデルが drools-guvnor GUI インターフェイスで定義され、POJO モデルとしてアップロードされていない場合に、drools-server を使用して Applicant インスタンスをルール エンジンに挿入するための REST Json リクエストの完全で正しい形式を次に示します。

{
  "batch-execution": {
     "lookup":"ksession1",
     "commands":[
       {
          "insert":{
             "out-identifier":"outApplicant",
             "return-object":"true",
             "object": {
               "mortgages.Applicant":{
                 "age":17
               }
             }
           }
       },
       {
          "fire-all-rules":""
       }
     ]
  }
} 

根本原因: $TOMCAT_HOME/webapps/drools-server/WEB-INF/classes/knowledge-services.xml に不適切なリソースがありました。

修正した knowledge-services.xml の関連部分:

<drools:grid-node id="node1"/>
<drools:kbase id="kbase1" node="node1">
    <drools:resources>
          <drools:resource
                   type="PKG"
                   source="http://localhost:8080/drools-guvnor/rest/packages/mortgages/binary"
                   basic-authentication="enabled"
                   username="admin"
                   password="admin"

           />
    </drools:resources>
</drools:kbase>

二次的な問題:認証資格情報が knowledge-services.xml で指定されていないため、次のエラーが発生しました:

Exception: java.io.IOException: Servier returned HTTP response code: 401 for URL: http://localhost:8080/drools-guvnor/rest/packages/mortgages/binary

3 番目の問題: サンプルの住宅ローン パッケージは、Guvnor でバイナリ パッケージとしてビルドされていません。

ERROR: java.io.lang.RunTimeException: jav.io.StreamCorruptionException: Invalid Stream Header

修正するには: Guvnor で... パッケージ.. 住宅ローン..編集..ビルド パッケージ

追記: INFO レベルのロギングは、drools-server ではデフォルトで有効になっていません。$TOMCAT_HOME/logs/catalina.log で詳細なデバッグ メッセージを確認できるように、追加のログを有効にするには、次の手順に従います。

  1. $TOMCAT_HOME/webapps/drools-server/WEB_INF/classes に移動します
  2. ファイル logging.properties を作成します
  3. 次の行を追加します。

    org.apache.catalina.core.ContainerBase.[Catalina].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].handlers = java.util.logging.ConsoleHandler

HTH

于 2013-05-24T15:16:44.093 に答える