All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edi.rule.core.JSRuleService Maven / Gradle / Ivy

package edi.rule.core;

import edi.rule.config.JSRuleContext;
import edi.rule.config.JSRuleSecurity;
import edi.rule.work.enums.JSRuleSecurityEnum;
import edi.rule.model.JSBody;
import edi.rule.model.JSResult;
import edi.rule.model.JSRuleAction;
import edi.rule.util.ZSRule;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * @author 摩拉克斯
 * @apiNote 所有调用start方法上加事务是因为考虑到嵌套使用start时如果后面的方法报错,前面的方法应该回滚
 * 

框架内置的service,用于启动引擎解析json字符串 * */ @Service public class JSRuleService { @Autowired private JSRuleArgsVessel vessel; /** *

用于启动插件引擎,此方式需自行考虑globalArgs参数的初始化,此外如果项目中有全局异常处理并涵盖了JSRuleException异常(如@ExceptionHandler),则需自行处理异常返回结果 *

非http的请求时如内部rpc请求,此时可以关闭安全模式配置 * @apiNote 此处不能抛出异常否则会有事务失效的问题 * @apiNote 修改此处应同步修改IJSRuleActionModel对应方法 * */ private String start(JSRuleGlobalArgs globalArgs) { try{ vessel.init(globalArgs); R rm = JSResult.success(); JSBody body = vessel.getGlobalArgs().getBody(); for (JSRuleAction action: body.getActions()) { rm.getResult().put(action.getName(), action.getModel().start(action, vessel)); } String result = ZSRule.modelToJson(rm); JSRuleSecurityEnum security = JSRuleContext.getSecurity(); if (JSRuleSecurity.isSecurityMode(security)){ if (body.getEncrypt()){ result = security.encrypt.apply(result); } if (body.getSign()){ security.httpResponse.accept(vessel.getGlobalArgs().getResponse(),security.sign.apply(result)); } } return result; }finally{ vessel.clean(); } } /** *

用于启动插件引擎,此方式需自行考虑globalArgs参数的初始化 *

globalArgs中如果存在sign属性文本则会以该文本为签名对文本进行签名验证 * @param body 请求的body字符串 * @param args 全局参数对象 * */ @Transactional(rollbackFor = Exception.class) public String start(String body, JSRuleGlobalArgs args) { if (args == null){ args = new JSRuleGlobalArgs(); } args.setBody(ZSRule.parseJSBody(body,args.getSign())); return start(args); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy