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

申请人类在 XSD 中的抵押包中定义,如下所示:

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

我如何告诉流口水在哪里可以找到应聘者课程?在抵押贷款样本中定义为 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>

我怀疑更改 REST json 请求以完全指定申请人类的包名称可能会起作用。

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

但似乎找不到申请人的完全限定包名称在哪里声明?

可接受的答案必须展示一个无需编写 java 代码即可工作的示例,因为 REST 接口的全部意义在于通过 Web 服务接口访问流口水。

是否有 spring 配置或其他方式来编写可以工作的 json 请求?

4

1 回答 1

1

由于没有人回复,我将发布对我有用的答案以及我用来调试问题的根本原因和分步过程。如果有更好的方法,请发表评论。

首先,当模型在 drools-guvnor GUI 界面中定义且未作为 POJO 模型上传时,这是 REST Json 请求使用 drools-server 将申请人实例插入规则引擎的完整且正确的格式。

{
  "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

第三个问题: 示例抵押包不是在 Guvnor 中构建为二进制包。

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

修复:在 Guvnor 中……包……抵押……编辑……构建包

附加说明:默认情况下,drools-server 中不启用 INFO 级别的日志记录。要启用额外的日志记录,以便您可以在 $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 = 信息 org.apache.catalina.core.ContainerBase.[Catalina].handlers = java.util.logging.ConsoleHandler

高温高压

于 2013-05-24T15:16:44.093 回答