List of usage examples for javax.script Invocable getInterface
public <T> T getInterface(Object thiz, Class<T> clasz);
From source file:org.apache.nifi.processors.script.InvokeScriptedProcessor.java
/** * Reloads the script Processor. This must be called within the lock. * * @param scriptBody An input stream associated with the script content * @return Whether the script was successfully reloaded */// www .j a v a 2 s. c o m private boolean reloadScript(final String scriptBody) { // note we are starting here with a fresh listing of validation // results since we are (re)loading a new/updated script. any // existing validation results are not relevant final Collection<ValidationResult> results = new HashSet<>(); try { // get the engine and ensure its invocable if (scriptEngine instanceof Invocable) { final Invocable invocable = (Invocable) scriptEngine; // Find a custom configurator and invoke their eval() method ScriptEngineConfigurator configurator = scriptingComponentHelper.scriptEngineConfiguratorMap .get(scriptingComponentHelper.getScriptEngineName().toLowerCase()); if (configurator != null) { configurator.eval(scriptEngine, scriptBody, scriptingComponentHelper.getModules()); } else { // evaluate the script scriptEngine.eval(scriptBody); } // get configured processor from the script (if it exists) final Object obj = scriptEngine.get("processor"); if (obj != null) { final ComponentLog logger = getLogger(); try { // set the logger if the processor wants it invocable.invokeMethod(obj, "setLogger", logger); } catch (final NoSuchMethodException nsme) { if (logger.isDebugEnabled()) { logger.debug("Configured script Processor does not contain a setLogger method."); } } // record the processor for use later final Processor scriptProcessor = invocable.getInterface(obj, Processor.class); processor.set(scriptProcessor); if (scriptProcessor != null) { try { scriptProcessor.initialize(new ProcessorInitializationContext() { @Override public String getIdentifier() { return InvokeScriptedProcessor.this.getIdentifier(); } @Override public ComponentLog getLogger() { return logger; } @Override public ControllerServiceLookup getControllerServiceLookup() { return InvokeScriptedProcessor.super.getControllerServiceLookup(); } @Override public NodeTypeProvider getNodeTypeProvider() { return InvokeScriptedProcessor.super.getNodeTypeProvider(); } @Override public String getKerberosServicePrincipal() { return InvokeScriptedProcessor.this.kerberosServicePrincipal; } @Override public File getKerberosServiceKeytab() { return InvokeScriptedProcessor.this.kerberosServiceKeytab; } @Override public File getKerberosConfigurationFile() { return InvokeScriptedProcessor.this.kerberosConfigFile; } }); } catch (final Exception e) { logger.error("Unable to initialize scripted Processor: " + e.getLocalizedMessage(), e); throw new ProcessException(e); } } } else { throw new ScriptException("No processor was defined by the script."); } } } catch (final Exception ex) { final ComponentLog logger = getLogger(); final String message = "Unable to load script: " + ex.getLocalizedMessage(); logger.error(message, ex); results.add(new ValidationResult.Builder().subject("ScriptValidation").valid(false) .explanation("Unable to load script due to " + ex.getLocalizedMessage()) .input(scriptingComponentHelper.getScriptPath()).build()); } // store the updated validation results validationResults.set(results); // return whether there was any issues loading the configured script return results.isEmpty(); }