groovy

一、加載和卸載(每次都新建一個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);
        }