fix : js 执行函数报错

This commit is contained in:
clay
2024-04-29 22:07:31 +08:00
parent 6953324c3f
commit 41fbf21128
4 changed files with 32 additions and 6 deletions

View File

@@ -41,9 +41,15 @@ public class JavaScriptEngine {
* @return 返回结构 * @return 返回结构
*/ */
public static Object execute(String script, String functionName, Object args) { public static Object execute(String script, String functionName, Object args) {
try {
Value executeFunction = getFunction(functionName, script); Value executeFunction = getFunction(functionName, script);
Value result = executeFunction.execute(JSON.toJSONString(args)); Value javaObjectAsValue = Value.asValue(args);
Value result = executeFunction.execute(javaObjectAsValue);
return result.as(Object.class); return result.as(Object.class);
} catch (Exception e) {
remove(functionName);
throw new CustomException("运行失败!");
}
} }
@@ -68,7 +74,7 @@ public class JavaScriptEngine {
Value result = executeFunction.execute(javaObjectAsValue); Value result = executeFunction.execute(javaObjectAsValue);
return result.as(Object.class); return result.as(Object.class);
}); });
}catch (CustomException e){ } catch (CustomException e) {
EngineResult result = new EngineResult(); EngineResult result = new EngineResult();
result.setSuccess(Boolean.FALSE); result.setSuccess(Boolean.FALSE);
result.setConsole(e.getMessage()); result.setConsole(e.getMessage());
@@ -90,4 +96,12 @@ public class JavaScriptEngine {
} }
private static void remove(String functionName) {
SegmentLock.lock(functionName, () -> {
functionMap.remove(functionName);
return null;
});
}
} }

View File

@@ -36,6 +36,8 @@ public class PortalVo extends SimplePortalVo {
*/ */
private Boolean page; private Boolean page;
private String url;
/** /**
* 条件映射 * 条件映射
*/ */

View File

@@ -41,6 +41,9 @@ public class JavaEngineExecuteHandler implements EngineExecuteHandler {
@Override @Override
public EngineResult mockExecute(DataAdapter dataAdapter, Object data) { public EngineResult mockExecute(DataAdapter dataAdapter, Object data) {
if (!DataAdapterType.JAVA.equals(dataAdapter.getType())) {
return null;
}
return javaCodeEngine.mockExecute(dataAdapter.getExecuteCode(), getClassName(dataAdapter), return javaCodeEngine.mockExecute(dataAdapter.getExecuteCode(), getClassName(dataAdapter),
"execute", new Object[]{data}); "execute", new Object[]{data});
} }

View File

@@ -129,8 +129,15 @@ public class PortalServiceImpl implements PortalService {
} }
if (PortalEnum.LOCAL.equals(portal.getType())) { if (PortalEnum.LOCAL.equals(portal.getType())) {
UniQuery uniQuery = queryMapper.selectById(portal.getQueryId()); UniQuery uniQuery = queryMapper.selectById(portal.getQueryId());
if (!ObjectUtils.isEmpty(uniQuery)) {
portalVo.setQueryType(uniQuery.getType()); portalVo.setQueryType(uniQuery.getType());
} }
} else {
PortalInterface portalInterface = portalInterfaceMapper.selectById(portal.getInterfaceId());
if (!ObjectUtils.isEmpty(portalInterface)) {
portalVo.setUrl(portalInterface.getUrl());
}
}
if (portal.getCreateDataAdapter()) { if (portal.getCreateDataAdapter()) {
DataAdapter dataAdapter = adapterMapper.selectById(portal.getAdapterId()); DataAdapter dataAdapter = adapterMapper.selectById(portal.getAdapterId());
if (!ObjectUtils.isEmpty(dataAdapter)) { if (!ObjectUtils.isEmpty(dataAdapter)) {
@@ -249,7 +256,7 @@ public class PortalServiceImpl implements PortalService {
} }
if (PortalEnum.EXTERNAL.equals(portal.getType())) { if (PortalEnum.EXTERNAL.equals(portal.getType())) {
createPortalInterface(portalDto, portal); createPortalInterface(portalDto, portal);
}else { } else {
UniQuery uniQuery = queryMapper.selectById(portal.getQueryId()); UniQuery uniQuery = queryMapper.selectById(portal.getQueryId());
if (ObjectUtils.isEmpty(uniQuery)) { if (ObjectUtils.isEmpty(uniQuery)) {
throw new CustomException("未找到对应的查询接口!"); throw new CustomException("未找到对应的查询接口!");