当前位置: 首页 > news >正文

Drools 规则文件常见报错 20 例(含原因 + 报错信息 + 解决方案)

结合Drools 7.x JDK8 主流环境按语法错误、API 兼容、数据类型、对象调用、集合、日期、运算、命名、导入、引擎运行分类整理覆盖日常开发高频问题每例附带模拟报错、根因、修复方案。一、语法与关键字错误6 例1. 规则结尾缺失end报错plaintextRule Compilation error : [Rule name] unexpected token原因Drools 每条规则必须以end收尾漏写、多写都会解析失败。规则错误示例droolsrule 校验付款单号 when AppayDataBO(payment_doc null) then System.out.println(单号为空); // 缺失 end修复补充enddroolsrule 校验付款单号 when AppayDataBO(payment_doc null) then System.out.println(单号为空); end2. 关键字拼写错误rule/when/then报错plaintextRule Compilation error unexpected token ruel原因关键字rule/when/then/end拼写错误。错误示例droolsruel 测试规则 // ruel 拼写错误 when AppayDataBO() then end修复修正关键字拼写为rule。3. 条件块when/ 执行块then顺序颠倒报错plaintextRule Compilation error : unexpected token when原因Drools 固定结构rule - when - then - end顺序不能乱。错误示例droolsrule 顺序错误 then // then 写在 when 前面 System.out.println(执行); when AppayDataBO() end修复调整为标准顺序。4. 条件语句多余分号报错plaintextRule Compilation error : unexpected token ;原因when匹配条件末尾不能加分号仅then代码块遵循 Java 语法。错误示例droolsrule 多余分号 when AppayDataBO(amount 1000; ) // 条件后加; then end修复删除条件末尾分号。5. 字符串引号不匹配单 / 双引号混用、缺引号报错plaintextRule Compilation error : unterminated string literal原因字符串左右引号不一致、漏写结束引号。错误示例droolswhen AppayDataBO(currency CNY) // 单双引号混用修复统一使用双引号Drools 推荐droolswhen AppayDataBO(currency CNY)6. 规则名称重复报错plaintextDuplicate rule name: [规则名]原因同一个 drl 文件 / 同个知识库中规则名称唯一不能重复。修复修改其中一条规则名称保证全局唯一。二、JDK 方法兼容问题3 例你之前遇到的同类问题7. JDK8 使用String.isBlank()高频报错plaintextThe method isBlank() is undefined for the type String原因String.isBlank()JDK11 才有JDK8 不支持。错误示例droolswhen AppayDataBO(payment_doc.isBlank())修复JDK8 兼容写法droolswhen AppayDataBO(payment_doc null || payment_doc.trim().isEmpty())8. JDK8 使用String.isNotEmpty()Spring 工具类报错plaintextThe method isNotEmpty(String) is undefined原因直接在规则中调用 Spring/Guava 工具类未导入或 JDK 原生无此方法。错误示例droolswhen AppayDataBO(StringUtils.isNotEmpty(description))修复 1原生写法droolswhen AppayDataBO(description ! null !description.trim().isEmpty())修复 2使用工具类drl 顶部手动导入类droolsimport org.springframework.util.StringUtils;9. 使用 JDK8 时间类新方法LocalDateTime.now()报错plaintextThe method now() is undefined for the type LocalDateTime原因未导入java.time.LocalDateTime或低版本 Drools 对新时间类支持差。修复drl 顶部增加导入import java.time.LocalDateTime;JDK8 老项目优先使用new Date()兼容。三、实体类 / 属性调用错误4 例BO/DO 类常用10. 调用不存在的实体属性报错plaintextRule Compilation error : cannot find symbol variable xxx原因Drools 按getter/setter解析属性规则中写了实体不存在的字段。规则中fieldName等价于getFieldName()错误示例实体无pay_amount字段droolswhen AppayDataBO(pay_amount 5000)修复使用实体真实字段名检查 BO 类字段与 getter。11. 实体字段私有、无 getter 方法报错plaintextUnable to resolve property [字段名] for class [实体类]原因字段private且没有 public getter 方法Drools 无法反射读取。错误java运行public class AppayDataBO { private String payment_doc; // 无 getPaymentDoc() }修复给字段补充标准getter/setter。12. 大小写不匹配字段名大小写错误报错plaintextUnable to resolve property Payment_Doc for class AppayDataBO原因Drools 属性区分大小写和实体字段大小写不一致。实体字段private String paymentDoc;错误规则droolswhen AppayDataBO(Payment_Doc PAY2025001)修复和实体字段完全一致paymentDoc。13. 调用 void 方法并取值报错plaintextvoid cannot be dereferenced原因在条件中调用void无返回值的方法试图做判断。错误示例droolswhen AppayDataBO(setErr_message(异常) ! null) // set 是 void 方法修复void方法只能写在then执行块不能用于when条件。四、数据类型与运算错误3 例14. 数值类型不匹配字符串和数字比较报错plaintextCannot compare String and Integer values原因用字符串字段和数字直接比较。错误示例droolswhen AppayDataBO(payment_schedule_num 2) // 数字字段和字符串比较修复统一类型去掉引号droolswhen AppayDataBO(payment_schedule_num 2)15. BigDecimal 直接使用/运算符报错plaintextThe operator is undefined for the argument type(s) BigDecimal, Integer原因BigDecimal是对象不能用普通大小于号必须用compareTo()。错误示例droolswhen AppayDataBO(amount 2000) // amount 是 BigDecimal修复droolswhen AppayDataBO(amount.compareTo(new java.math.BigDecimal(2000)) 0)16. 空对象直接调用属性空指针风险 编译报错报错plaintextNull pointer exception / Cannot access field on null value原因字段为null时直接链式调用属性。错误示例droolswhen AppayDataBO(payer_num.length() 0) // payer_num 为 null 时报错修复先判空再调用droolswhen AppayDataBO(payer_num ! null payer_num.length() 0)五、导入、包名、集合相关报错2 例17. 未导入实体类 / 工具类报错plaintextRule Compilation error : AppayDataBO cannot be resolved to a type原因drl 文件顶部缺少 import 导入规则识别不到实体类。错误drl 无导入直接使用AppayDataBO。修复drl 头部添加全类名导入droolsimport com.xxx.bo.AppayDataBO;18. 集合遍历 / 取值语法错误报错plaintextUnexpected token get(0) for List原因Drools 内置集合语法和 Java 略有区别List 取值写法错误。错误示例droolswhen $list : List() $list.get(0) ! null修复Drools 标准集合写法droolswhen $list : List(size 0)六、运行时 引擎加载报错2 例19. drl 文件编码问题中文乱码 / 解析失败报错plaintextInvalid UTF-8 start byte / 规则解析乱码、中文注释报错原因drl 文件编码非UTF-8中文注释 / 字符串解析异常。修复IDE 中将.drl文件编码设置为UTF-8打包 / 部署时统一文件编码尽量减少特殊中文符号。20. 多规则文件依赖冲突 / 重复导入报错plaintextType already imported: xxx.xxx.Class原因多个 drl 文件重复import同一个类或同一个知识库加载重复规则文件。修复单个 drl 内同类只导入一次检查规则加载逻辑避免重复加载同一份 drl。补充通用排查技巧快速定位优先看报错行号Drools 报错会标注 drl 行数直接定位问题代码区分编译报错 / 运行报错编译报错规则语法、导入、方法不存在启动就报错运行报错空指针、类型转换、业务数据异常启动成功运行触发JDK8 底线原则规则中禁用 JDK9 新方法isBlank、新时间 API 等实体类规范所有规则用到的字段必须有public getter。
http://www.gsyq.cn/news/1400857.html

相关文章:

  • Campus-i茅台:告别手动抢购的智能茅台预约解决方案
  • 别只用白点当笔刷了!在Unity里用ShaderGraph制作自定义刮卡笔刷(含雪花、纹理、动画效果)
  • 不止于切水果:用Unity的LineRenderer制作可交互的涂鸦、签名与教学划线系统
  • LookScanned.io终极指南:3分钟让PDF秒变专业扫描件
  • PyQt-Fluent-Widgets终极指南:用60+组件打造Windows 11风格Python桌面应用
  • GPT-Neo 2.7B性能评测:与GPT-2、GPT-3对比分析及实际应用效果
  • 别再让wsappx偷跑CPU了!Win10下彻底关闭这个高占用进程的保姆级教程
  • 梅河口市黄金回收 白银回收 铂金回收 彩金回收全攻略:五家靠谱门店横向评测,附避坑要点 - 前途无量YY
  • 千问 LeetCode 2719. 统计整数数目 Python3实现
  • listmonk容器日志保留策略终极指南:基于大小与时间的完整配置方法
  • 如何永久备份微信聊天记录:WeChatExporter完整指南
  • 定量暴露因素的趋势性分析【9天实用统计学公益训练营Day5-1】
  • 因果推断前门准则的图条件泛化:原理、证明与实战指南
  • C宏参数展开问题与##操作符深度解析
  • 思源宋体TTF深度解析:开源字体工程的架构革命与跨平台实战应用
  • DrBERT-7GB在真实医疗场景的终极应用指南:病例分析、药物发现与临床决策支持
  • PlantUML Editor:像写代码一样绘制专业UML图表的在线神器
  • AB Download Manager多线程下载引擎架构深度解析与性能优化实践
  • 为什么你的Windows系统越来越慢?3步高效解决驱动存储膨胀问题
  • 免费开源!Windows音频均衡器终极指南:如何用Equalizer APO打造专业级音效
  • XML Notepad终极指南:微软官方免费XML编辑器完全解析
  • 终极指南:如何使用XUnity.AutoTranslator轻松实现Unity游戏实时翻译
  • Export Customizing Transports 在 SAP S/4HANA cloud 传输体系中的位置
  • 中国海力士:长鑫科技 VS 海力士 VS 三星 科技分析,长鑫科技有望破2万亿
  • 高效管理大型邮件列表:listmonk批量订阅者操作API终极指南
  • WeChatPad终极指南:如何在手机上同时登录微信平板和手机版
  • 太阳膜性价比高的品牌有哪些?龙膜广州番禺臻选店值得选 - mypinpai
  • 终极指南:Listmonk CDN配置最佳实践与性能优化方案
  • BetterNCM Installer:3分钟快速安装网易云音乐插件管理器终极指南
  • VMware Workstation Pro 17终极免费激活指南:5步获取完整许可证密钥