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

QueryRecord processor exception when using JsonPath expression language

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.8.0
    • None
    • Core Framework
    • None
    • Linux x64 (Fedora 29) with OpenJDK 8 (openjdk version "1.8.0_191")

    Description

      (From email to the users list)

       
      I'm hitting an issue using the "jsonPath" expression language function to extract a query to use with the QueryRecord processor. The processor works fine if the expression language subject is contained within the process group variable registry, but fails upon starting with an `AttributeExpressionLanguageException` if the subject was expected to to exist within a flowfile attribute [1]
       
      I've attached a template generated on NiFi 1.8.0 demonstrating the problem - it only appears to be an issue with dynamic outputs from the QueryRecord processor, as the same expression language statement works fine when used as part of UpdateAttribute processor with the subject in a flowfile attribute as per the template. I've dug into the codebase and can trace the error to the `evaluate` function within the `JsonPathEvaluator` class, which throws the exception if the variable can not be referenced. I have a local fix at https://github.com/apache/nifi/compare/master...nstack:fix/jsonpath that returns `StringQueryResult("")` if the subject is empty instead of throwing the exception and this appears to work.
       
      However I'm not sure if this is the correct fix as UpdateAttribute works, perhaps the problem is instead in QueryRecord eagerly evaluating the queries thus triggering the `evaluate` function.
       
      [1] 2018-11-13 14:46:24,899 ERROR [Timer-Driven Process Thread-1] o.a.nifi.processors.standard.QueryRecord QueryRecord[id=0d5684e2-0167-1000-74c1-eb29a1401981] Failed to properly initialize Processor. If still scheduled to run, NiFi will attempt to initialize and run the Processor again after the 'Administrative Yield Duration' has elapsed. Failure is due to java.lang.reflect.InvocationTargetException: java.lang.reflect.InvocationTargetException
      java.lang.reflect.InvocationTargetException: null
      at sun.reflect.GeneratedMethodAccessor916.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at org.apache.nifi.util.ReflectionUtils.invokeMethodsWithAnnotations(ReflectionUtils.java:142)
      at org.apache.nifi.util.ReflectionUtils.invokeMethodsWithAnnotations(ReflectionUtils.java:130)
      at org.apache.nifi.util.ReflectionUtils.invokeMethodsWithAnnotations(ReflectionUtils.java:75)
      at org.apache.nifi.util.ReflectionUtils.invokeMethodsWithAnnotation(ReflectionUtils.java:52)
      at org.apache.nifi.controller.StandardProcessorNode.lambda$initiateStart$4(StandardProcessorNode.java:1499)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
      at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      at java.lang.Thread.run(Thread.java:748)
      Caused by: org.apache.nifi.attribute.expression.language.exception.AttributeExpressionLanguageException: Subject is empty
      at org.apache.nifi.attribute.expression.language.evaluation.functions.JsonPathEvaluator.evaluate(JsonPathEvaluator.java:66)
      at org.apache.nifi.attribute.expression.language.Query.evaluate(Query.java:315)
      at org.apache.nifi.attribute.expression.language.Query.evaluateExpression(Query.java:203)
      at org.apache.nifi.attribute.expression.language.CompiledExpression.evaluate(CompiledExpression.java:58)
      at org.apache.nifi.attribute.expression.language.StandardPreparedQuery.evaluateExpressions(StandardPreparedQuery.java:51)
      at org.apache.nifi.attribute.expression.language.StandardPropertyValue.evaluateAttributeExpressions(StandardPropertyValue.java:160)
      at org.apache.nifi.attribute.expression.language.StandardPropertyValue.evaluateAttributeExpressions(StandardPropertyValue.java:148)
      at org.apache.nifi.attribute.expression.language.StandardPropertyValue.evaluateAttributeExpressions(StandardPropertyValue.java:113)
      at org.apache.nifi.processors.standard.QueryRecord.setupQueues(QueryRecord.java:443)
      ... 14 common frames omitted

      Attachments

        1. QueryRecord_JsonPath_Issue.xml
          29 kB
          Mandeep Gill

        Activity

          People

            Unassigned Unassigned
            mandeepg Mandeep Gill
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: