Uploaded image for project: 'Apache NiFi'
  1. Apache NiFi
  2. NIFI-9944

InvokeScriptedProcessor not seeing classes in imported Modules

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Critical
    • Resolution: Fixed
    • 1.15.3
    • 1.17.0, 1.16.2
    • Core Framework
    • None
    • Linux / GCP
    • Important

    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:

      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

      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:

      // 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
      
      
      
      

      Attachments

        Issue Links

          Activity

            People

              mattyb149 Matt Burgess
              The Original Mr Wolf Armin Aschoff
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 1h 10m
                  1h 10m