You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "Armin Aschoff (Jira)" <ji...@apache.org> on 2022/04/21 03:33:00 UTC
[jira] [Updated] (NIFI-9944) InvokeScriptedProcessor not seeing classes in imported Modules
[ https://issues.apache.org/jira/browse/NIFI-9944?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Armin Aschoff updated NIFI-9944:
--------------------------------
Description:
Create a new InvokeScriptedProcessor.
Set Module Directory: ./scripts/jars/commons-text-1.6/
- have tried setting absolute & relative paths, paths to directories, paths to jar files, different versions of commons-text, trailing slash/no trailing slash, etc. No differences
Set script engine ECMAScript
Write js script that tries to call a static method in commons-text. Script can be either script file or script body, no difference
Always get ClassNotFoundException error:
{noformat}
Component is invalid: 'ScriptValidation' validated against './scripts/testCsv.js' is invalid because Unable to load script due to java.lang.ClassNotFoundException: org.apache.commons.text.StringEscapeUtils{noformat}
Have tried Java.type and Packages. to try to access the class.
Any/all help much appreciated as rapidly losing remaining hair!
Sample script:
{code:java}
// base interface & class stuff
var Processor = Java.type("org.apache.nifi.processor.Processor")
var Relationship = Java.type("org.apache.nifi.processor.Relationship")
var HashSet = Java.type("java.util.HashSet")
var log = null
// stuff to read/write flowfile content
var InputStreamCallback = Java.type("org.apache.nifi.processor.io.InputStreamCallback")
var OutputStreamCallback = Java.type("org.apache.nifi.processor.io.OutputStreamCallback")
var IOUtils = Java.type("org.apache.commons.io.IOUtils")
var StandardCharsets = Java.type("java.nio.charset.StandardCharsets")
var StringEscapeUtils = Java.type("org.apache.commons.text.StringEscapeUtils")
function getPropertyDescriptors() { return []}
// =========== Define output relationships ================
var REL_SUCCESS = new Relationship.Builder().name("success").description("FlowFiles that were successfully processed are routed here").build()
function getRelationships() {
var r = new HashSet()
r.add(REL_SUCCESS)
return r
}
//=======================================
// Execute the main script when triggered
function onTrigger(context, sessionFactory) {
var session = sessionFactory.createSession()
var flowFile = session.get()
if (flowFile !== null) {
var test = "boo"
test = StringEscapeUtils.escapeCsv("foo")
log.warn(test)
session.transfer(flowFile, REL_SUCCESS)
}
session.commit()
}
// ======================================================
// Other functions required to satisfy interface contract
function initialize(context) {log = context.logger}
function validate(context) {return null}
function getPropertyDescriptor(name) {return getPropertyDescriptors().find(function (property) {
return property.getName().equalsIgnoreCase(name)
})}
function onPropertyModified(descriptor, oldValue, newValue) {return null}
function getIdentifier() {return null}
processor = this
{code}
was:
Create a new InvokeScriptedProcessor.
Set Module Directory: ./scripts/jars/commons-text-1.6/
- have tried setting absolute & relative paths, paths to directories, paths to jar files, different versions of commons-text, trailing slash/no trailing slash, etc. No differences
Set script engine ECMAScript
Write js script that tries to call a static method in commons-text. Script can be either script file or script body, no difference
Always get ClassNotFoundException error:
>Component is invalid: 'ScriptValidation' validated against './scripts/testCsv.js' is invalid because Unable to load script due to java.lang.ClassNotFoundException: org.apache.commons.text.StringEscapeUtils
Have tried Java.type and Packages. to try to access the class.
Any/all help much appreciated as rapidly losing remaining hair!
Sample script:
```
// base interface & class stuff
var Processor = Java.type("org.apache.nifi.processor.Processor")
var Relationship = Java.type("org.apache.nifi.processor.Relationship")
var HashSet = Java.type("java.util.HashSet")
var log = null
// stuff to read/write flowfile content
var InputStreamCallback = Java.type("org.apache.nifi.processor.io.InputStreamCallback")
var OutputStreamCallback = Java.type("org.apache.nifi.processor.io.OutputStreamCallback")
var IOUtils = Java.type("org.apache.commons.io.IOUtils")
var StandardCharsets = Java.type("java.nio.charset.StandardCharsets")
var StringEscapeUtils = Java.type("org.apache.commons.text.StringEscapeUtils")
function getPropertyDescriptors() {
return []
}
// =========== Define output relationships ================
var REL_SUCCESS = new Relationship.Builder().name("success").description("FlowFiles that were successfully processed are routed here").build()
function getRelationships() {
var r = new HashSet()
r.add(REL_SUCCESS)
return r
}
//=======================================
// Execute the main script when triggered
function onTrigger(context, sessionFactory) {
var session = sessionFactory.createSession()
var flowFile = session.get()
if (flowFile !== null) {
var test = "boo"
test = StringEscapeUtils.escapeCsv("foo")
log.warn(test)
session.transfer(flowFile, REL_SUCCESS)
}
session.commit()
}
// ======================================================
// Other functions required to satisfy interface contract
function initialize(context) {
log = context.logger
}
function validate(context) {
return null
}
function getPropertyDescriptor(name) {
return getPropertyDescriptors().find(function (property) {
return property.getName().equalsIgnoreCase(name)
})
}
function onPropertyModified(descriptor, oldValue, newValue) {
return null
}
function getIdentifier() {
return null
}
processor = this
```
> InvokeScriptedProcessor not seeing classes in imported Modules
> --------------------------------------------------------------
>
> Key: NIFI-9944
> URL: https://issues.apache.org/jira/browse/NIFI-9944
> Project: Apache NiFi
> Issue Type: Bug
> Components: Core Framework
> Affects Versions: 1.15.3
> Environment: Linux, Apache NiFi docker image of convenience
> Reporter: Armin Aschoff
> Priority: Major
>
> Create a new InvokeScriptedProcessor.
> Set Module Directory: ./scripts/jars/commons-text-1.6/
> - have tried setting absolute & relative paths, paths to directories, paths to jar files, different versions of commons-text, trailing slash/no trailing slash, etc. No differences
> Set script engine ECMAScript
> Write js script that tries to call a static method in commons-text. Script can be either script file or script body, no difference
> Always get ClassNotFoundException error:
> {noformat}
> Component is invalid: 'ScriptValidation' validated against './scripts/testCsv.js' is invalid because Unable to load script due to java.lang.ClassNotFoundException: org.apache.commons.text.StringEscapeUtils{noformat}
>
> Have tried Java.type and Packages. to try to access the class.
> Any/all help much appreciated as rapidly losing remaining hair!
> Sample script:
> {code:java}
> // base interface & class stuff
> var Processor = Java.type("org.apache.nifi.processor.Processor")
> var Relationship = Java.type("org.apache.nifi.processor.Relationship")
> var HashSet = Java.type("java.util.HashSet")
> var log = null
> // stuff to read/write flowfile content
> var InputStreamCallback = Java.type("org.apache.nifi.processor.io.InputStreamCallback")
> var OutputStreamCallback = Java.type("org.apache.nifi.processor.io.OutputStreamCallback")
> var IOUtils = Java.type("org.apache.commons.io.IOUtils")
> var StandardCharsets = Java.type("java.nio.charset.StandardCharsets")
> var StringEscapeUtils = Java.type("org.apache.commons.text.StringEscapeUtils")
> function getPropertyDescriptors() { return []}
> // =========== Define output relationships ================
> var REL_SUCCESS = new Relationship.Builder().name("success").description("FlowFiles that were successfully processed are routed here").build()
> function getRelationships() {
> var r = new HashSet()
> r.add(REL_SUCCESS)
> return r
> }
> //=======================================
> // Execute the main script when triggered
> function onTrigger(context, sessionFactory) {
> var session = sessionFactory.createSession()
> var flowFile = session.get()
> if (flowFile !== null) {
> var test = "boo"
> test = StringEscapeUtils.escapeCsv("foo")
> log.warn(test)
> session.transfer(flowFile, REL_SUCCESS)
> }
> session.commit()
> }
> // ======================================================
> // Other functions required to satisfy interface contract
> function initialize(context) {log = context.logger}
> function validate(context) {return null}
> function getPropertyDescriptor(name) {return getPropertyDescriptors().find(function (property) {
> return property.getName().equalsIgnoreCase(name)
> })}
> function onPropertyModified(descriptor, oldValue, newValue) {return null}
> function getIdentifier() {return null}
> processor = this
> {code}
--
This message was sent by Atlassian Jira
(v8.20.7#820007)