一、加載和卸載(每次都新建一個GroovyClassLoader 實例,而後使用新建的classloader去加載)spa
try { GroovyClassLoader groovyClassLoader = new GroovyClassLoader(); Class<?> clazz = groovyClassLoader.parseClass(orchestrationUnitDesc); GroovyObject unit = (GroovyObject) clazz.newInstance(); result.setSuccess(true); result.setResult(unit); return result; } catch (InstantiationException e) { result.setSuccess(false); result.setErrorMsg("groovy:InstantiationException:" + e.getMessage()); DataExchangeLogger.errorLog("", "", "groovy:InstantiationException", e); } catch (IllegalAccessException e) { result.setSuccess(false); result.setErrorMsg("groovy:IllegalAccessException:" + e.getMessage()); DataExchangeLogger.errorLog("", "", "groovy:IllegalAccessException", e); } catch (Exception e) { result.setSuccess(false); result.setErrorMsg("groovy:Exception:" + e.getMessage()); DataExchangeLogger.errorLog("", "", "groovy:Exception", e); }
二、執行code
上面獲得一個GroovyObject對象,執行方法就是調用GroovyObject的invokeMethod方法對象
// > 獲取編排單元 GroovyObject unit = (GroovyObject) ServiceOrchestrationConfigManager.getOrchestrationUnit(message.getMsgType()); if (unit == null) { result.setErrorCode(OpenErrorCode.S07.name()); result.setErrorMsg("orchestrationScript is null."); result.setSuccess(false); return result; } // > 調用服務編排 try { unit.invokeMethod("setDoc", CustomXmlUtil.parseText2Doc(message.getRequestString())); result = (SendResult) unit.invokeMethod("execute", message); if (result == null) { result = new SendResult(); result.setErrorCode(OpenErrorCode.S07.name()); result.setErrorMsg("下發編排腳本執行,返回爲空"); result.setSuccess(false); } } catch (DocumentException e) { result.setErrorCode(OpenErrorCode.S07.name()); result.setErrorMsg("請求報文轉docment對象異常" + e.getMessage()); result.setSuccess(false); DataExchangeLogger.errorLog(message.getBizId(), message.getMsgType(), "call service orchestration parseText2Doc error.", e); return result; } catch (Exception e) { result.setErrorCode(OpenErrorCode.S07.name()); result.setErrorMsg("下發編排腳本執行異常" + e.getMessage()); result.setSuccess(false); DataExchangeLogger.errorLog(message.getBizId(), message.getMsgType(), "call service orchestration excute script error. ", e); }