2013-05-22 48 views
1

使用Drools 5.5.0.Final與Guvnor 5.5.0.Final與示例抵押包。Drools REST CannotResolveClassException

當提交用下面的批次執行命令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 

申請人類在抵押貸款包中定義的XSD中,像這樣:

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

我如何知道流口水在哪裏可以找到申請人課?這是抵押貸款樣品中定義爲XSD文件

知識的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> 

我懷疑是改變REST JSON請求完全指定包申請者班級名稱可能有效。

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

但似乎無法找到聲明申請人的完全限定包名稱的位置?

可接受的答案必須顯示一個不需要編寫java代碼就能工作的例子,因爲REST接口的全部要點是通過Web服務接口訪問drools。

是否有彈簧配置,或其他方式來編寫json請求將工作?

回答

1

由於沒有人回覆,我發佈了適合我的答案以及我用來調試問題的根本原因和分步過程。如果有更好的方法,請做評論。

首先,這裏是REST的JSON請求使用時,該模型在Drools中-的Guvnor GUI界面中定義和上傳的POJO Drools的服務器插入一個申請實例的規則引擎的完整和正確的格式模型。

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

根源: $ TOMCAT_HOME/webapps /下滴料服務器/ WEB-INF /班/知識的services.xml有不正確的資源。

我糾正知識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> 

次要的問題:沒有在知識的services.xml 導致此錯誤指定身份驗證憑據:

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

第三期:在Guvnor中,示例抵押包並未構建爲二進制包。

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

要解決: 在的Guvnor ... ..套餐包mortgages..Edit..build

附加說明:信息級別的日誌默認情況下不會在Drools的服務器啓用。 要啓用額外的日誌記錄,這樣就可以在$ TOMCAT_HOME /日誌中看到詳細的調試信息/ catalina.log請按照下列步驟操作:

  1. 轉到$ TOMCAT_HOME/webapps /下滴料機 - 服務器/ WEB_INF /班
  2. 創建一個文件logging.properties
  3. 添加這些行:

    org.apache.catalina.core.ContainerBase [卡塔利娜] .LEVEL = INFO org.apache.catalina.core.ContainerBase [卡塔利娜]。 handlers = java.util.logging.ConsoleHandler

HTH

+0

您好,我想滴料與我的球衣REST Web服務集成。在休息時,所有的條件將被生成,然後插入到Drools引擎以獲得匹配的規則。如何與澤西休息網站服務集成。請給我一步一步的指導。我很新。請幫忙。謝謝。庫馬爾Shorav – Kumar