[ 
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}
Definitely not a dupe of https://issues.apache.org/jira/browse/NIFI-9896 - 
affects both script file & body, error message changes after following the 
workaround in 9896, plus removing references to 
org.apache.commons.text.StringEscapeUtils in the script (but still retaining 
the Module Directory setting) allows the script to function normally.

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:
{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}


> 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 / GCP
>            Reporter: Armin Aschoff
>            Priority: Critical
>             Fix For: 1.17.0, 1.16.1
>
>
> 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}
> Definitely not a dupe of https://issues.apache.org/jira/browse/NIFI-9896 - 
> affects both script file & body, error message changes after following the 
> workaround in 9896, plus removing references to 
> org.apache.commons.text.StringEscapeUtils in the script (but still retaining 
> the Module Directory setting) allows the script to function normally.
> 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)

Reply via email to