关于Drools 7.6.0 REST端点返回200假响应及向导规则的咨询
Drools 7.6.0 REST端点返回200但响应异常问题排查
我来帮你梳理下这个问题的可能原因和排查方向,结合你提供的规则和请求内容来看:
首先先明确你的核心问题:Drools 7.6.0的REST接口始终返回200状态码,但返回的响应没有预期的实际效果;同时你编写了如下简单向导规则:
package com.test.loanapprovalguidedrule; import java.lang.Number; rule "LoanApprovalGuidedRule" dialect "mvel" when loanApprovalDataObj : LoanApprovalDataobject( loanAmount == "100" ) then loanApprovalDataObj.setLoanAmount( "100" ); end
以及你发起的部分batch-execution请求:
<batch-execution lookup="defaultKieSession"> <insert out-identifier="translator" return-object="true"> <com.test.loanapprovalguidedrule.LoanApprovalDataobject> <l...
可能的问题点及修复建议
1. 规则逻辑无实际生效动作
你的规则里,当loanAmount等于"100"时,又把它赋值为"100"——这是完全无意义的操作,执行后对象没有任何可观测的变化,自然会让你觉得响应是"虚假"的。建议修改规则来产生实际的状态变化,比如:
then loanApprovalDataObj.setLoanAmount("200"); // 修改为不同的数值 loanApprovalDataObj.setApproved(true); // 新增一个审批状态字段并赋值 end
2. 请求XML格式不完整/缺失关键指令
你提供的请求XML是截断的,而且大概率缺少<fire-all-rules/>标签——这个标签是触发规则执行的关键,没有它的话,Drools只会插入对象,不会执行任何规则逻辑。完整的请求应该类似:
<batch-execution lookup="defaultKieSession"> <insert out-identifier="loanData" return-object="true"> <com.test.loanapprovalguidedrule.LoanApprovalDataobject> <loanAmount>100</loanAmount> <!-- 补充其他必填字段 --> </com.test.loanapprovalguidedrule.LoanApprovalDataobject> </insert> <fire-all-rules/> <!-- 必须添加这个标签触发规则 --> </batch-execution>
3. KieSession配置异常
要确保defaultKieSession在你的Kie容器中正确配置:
- 检查
kmodule.xml中是否正确定义了该session:
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule"> <kbase name="defaultKBase" packages="com.test.loanapprovalguidedrule"> <ksession name="defaultKieSession" type="stateful"/> </kbase> </kmodule>
- 如果使用的是无状态session,要确保请求逻辑适配无状态session的处理方式。
4. 响应解析遗漏细节
Drools REST的响应会包含执行后的对象状态,建议你完整查看响应的XML结构,确认是否返回了修改后的对象。正常执行后的响应应该类似:
<execution-results> <result identifier="loanData"> <com.test.loanapprovalguidedrule.LoanApprovalDataobject> <loanAmount>200</loanAmount> <approved>true</approved> </com.test.loanapprovalguidedrule.LoanApprovalDataobject> </result> </execution-results>
5. 日志辅助排查
开启Drools的DEBUG级日志,查看规则是否被正确加载、session是否初始化成功、规则是否被触发执行。可以在log4j.properties中添加:
log4j.logger.org.drools=DEBUG log4j.logger.org.kie=DEBUG
内容的提问来源于stack exchange,提问作者storia321
相关产品推荐
相关产品推荐

