问题描述:在网上拉去开源代码,部署完成后,使用urule规则引擎,已完成rule-server页面资源库、决策集、知识包配置,现在代码中编写用例进行接口调试,接口调试接连失败
开源路径:https://gitee.com/wuxi-creeper-network/urule#https://gitee.com/link?target=http%3A%2F%2Flocalhost%3A8787%2Frule%2FageRule
解决步骤:
1.rule-server下的启动项,页面无法进行接口调试,我们如需调试接口,需要启动rule-client下启动项(rule-server和rule-client同时启动),在此启动项同级目录可以创建一个controller方便接口调试
2.打开postman,输入接口地址,提交类型,传参
3.通过debug,可得知resporityServerUrl需要访问到rule-server服务
4.修改配置信息
5.重新编译,启动服务后,knowledgePackage=null问题将解决
6.因原接口中涉及的知识包没有配置,调试失败,在下方重新写了一个接口,这里附上接口代码和实体
package com.bstek;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.pshtec.workshop.toc.test.domain.Customer;
import com.pshtec.workshop.toc.test.domain.Result;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.bstek.urule.Utils;
import com.bstek.urule.runtime.KnowledgePackage;
import com.bstek.urule.runtime.KnowledgeSession;
import com.bstek.urule.runtime.KnowledgeSessionFactory;
import com.bstek.urule.runtime.response.RuleExecutionResponse;
import com.bstek.urule.runtime.service.KnowledgeService;
@RestController
@RequestMapping("rule")
public class RuleController {
@RequestMapping("/ageRule")
public RuleExecutionResponse rule(@RequestParam String age) throws IOException {
//创建一个KnowledgeSession对象
KnowledgeService knowledgeService = (KnowledgeService) Utils.getApplicationContext().getBean(KnowledgeService.BEAN_ID);
// KnowledgePackage knowledgePackage = knowledgeService.getKnowledge("edas/user_package");
//项目名称/包编号
KnowledgePackage knowledgePackage = knowledgeService.getKnowledge("customer/customer");
KnowledgeSession session = KnowledgeSessionFactory.newKnowledgeSession(knowledgePackage);
Map<String, Object> param = new HashMap<>();
param.put("age", age);
RuleExecutionResponse result = session.fireRules(param);
System.out.println("年龄:" + session.getParameter("age"));
return result;
}
@RequestMapping("/customer")
public Result rule(@RequestBody Customer customer) throws IOException {
KnowledgeService knowledgeService = (KnowledgeService) Utils.getApplicationContext().getBean(KnowledgeService.BEAN_ID);
KnowledgePackage knowledgePackage = knowledgeService.getKnowledge("customer/customer");
KnowledgeSession knowledgeSession = KnowledgeSessionFactory.newKnowledgeSession(knowledgePackage);
//Stu stu = BeanUtil.copyProperties(stuReq, Stu.class);
knowledgeSession.insert(customer);
knowledgeSession.fireRules();
Result result= new Result();
// result.setName("张三");
result.setAge(20);
result.setLevel(5);
return result;
}
}
```java
package com.pshtec.workshop.toc.test.domain;
import com.bstek.urule.model.Label;
/**
* @Title: Result
* @Package: com.pshtec.workshop.toc.test
* @Description:
* @Author: ycq
* @Date: 2023/10/31 - 16:54
*/
public class Result {
@Label("年龄")
private int age;
@Label("名称")
private String name;
@Label("等级")
private int level;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
}
8.Customer
package com.pshtec.workshop.toc.test.domain;
import com.bstek.urule.model.Label;
/**
* @Title: Customer
* @Package: com.pshtec.workshop.toc.model
* @Description:
* @Author: ycq
* @Date: 2023/10/30 - 16:47
*/
public class Customer {
@Label("年龄")
private int age;
@Label("名称")
private String name;
@Label("等级")
private int level;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
}
9.postman调试,网上还有其他好的案例可以尝试