Sorry empty List.

Sent from my iPhone

> On Apr 3, 2017, at 5:52 PM, Matt Burgess <[email protected]> wrote:
> 
> Jim,
> 
> I'm not at my keyboard but I'm guessing it is a NullPointerException from 
> returning None from getPropertyDescriptors(), try returning an empty PyMap 
> instead.
> 
> Regards,
> Matt
> 
> Sent from my iPhone
> 
>> On Apr 3, 2017, at 5:35 PM, James McMahon <[email protected]> wrote:
>> 
>> Good evening. I am trying to get this simple update attribute function to 
>> work in an InvokeScriptedProcessor ....processor. I wish to initialize 
>> custom logging to a distinct log file specifically associated with this 
>> processor. While updating an attribute is (should be) a very simple case, it 
>> seems that making the ISP work with this custom directed logging is not.
>> 
>> I was able to get a simple filename attribute change to work, but a 
>> particular ERROR gets thrown each and every time the ISP wkaes up and checks 
>> for flowfiles to process. The error is this:
>> 
>> 2017-04-03 10:59:31,370 ERROR [Timer-Driven Process Thread-4] 
>> o.a.n.p.script.InvokeScriptedProcessor 
>> InvokeScriptedProcessor[id=1f379.....] Unable to get property descriptors 
>> from Processor: java.lang.reflect.UndeclaredThrowableException
>> 
>> I am running NiFi 0.7.1.
>> 
>> Either there is something obvious that I've done wrong in the following code 
>> or I'm not using ISP properly. I did research this error and found a link 
>> that appeared to be directly related (at Hortonworks), but unfortunately 
>> when I incorporated the change to PySet it did not resolve my issue. Here is 
>> that link in case you are interested:
>> https://community.hortonworks.com/questions/75420/invokescriptedprocessor-in-python.html
>> 
>> I also want to point out that I found this approach documented here, and 
>> referenced by Matt. B:
>> https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/test/resources/jython/test_update_attribute.py
>> 
>> Please note that I had to recreate my code here. Typos if found are not in 
>> the code but are introduced by my mad typing "skills" here.
>> 
>> Anyone encounter and fix such a problem, eliminating this error? Thanks in 
>> advance for any help. Code shown below. -Jim
>> 
>> # Approach:
>> # First, get a simple attribute to update (DONE)
>> # Second, add directed logging to a specific file (getting many of the 
>> ERRORs detailed above)
>> # Third, expand on the update attribute concept to select a small subset of 
>> attributes, form them into a json object, and replace the existing flowfile 
>> payload with that
>> 
>> import sys
>> import traceback
>> import logging
>> from org.apache.nifi.processor import Processor
>> from org.apache.nifi.processor import Relationship
>> from org.apache.nifi.components import PropertyDescriptor
>> from org.apache.nifi.processor.util import StandardValidators
>> from org.python.core import PySet
>> 
>> class UpdateAttributes(Processor) :
>>      #__rel_success = 
>> Relationship.Builder().description("Success").name("success".build()
>>      def __init__(self) :
>>           self.__rel_success = 
>> Relationship.Builder().description("Success").name("success".build()
>>           self.log = None
>> 
>>      def initialize(self,context) :
>>           try :
>>                LOG_FILENAME='/home/nifi/latest/logs/TestLog.log'
>>                # Still tbd:
>>                # FORMAT='%(asctime)-15s %(message)s'
>>                # formatter = logging.Formatter('%(asctime)-15s %(message)s)'
>>                # self.log = context.getLogger()
>>                # handler = context.FileHandler(LOG_FILENAME)
>>                # handler.setFormatter(formatter)
>>                #self.addHandler(handler)
>>           except :
>>                pass
>> 
>>      def getRelationships(self) :
>>           return PySet([self.__rel_success])
>> 
>>      def validate(self,context) :
>>           return None
>> 
>>      def getPropertyDescriptor(self) :
>>           return None
>>           # try :
>>           #      descriptor = 
>> PropertyDescriptor.Builder().name("filename").addValidators(StandardValidators.NON_EMPTY_VALIDATOR).build()
>>           #      return [descriptor]
>>           # except :
>>           #      pass
>> 
>>      def getPropertyDescriptors(self) :
>>           return None
>> 
>>      def onPropertyModified(self,descriptor,newValue,oldValue) :
>>           pass
>> 
>>      def onTrigger(self,context,sessionFactory) :
>>           session = sessionFactory.createSession()
>>           try :
>>                # ensure there is work to do
>>                flowfile = session.,get()
>>                if flowfile is None :
>>                     return
>> 
>>                # extract some attribute value of interest
>>                # fromPropertyValue = 
>> context.getProperty("for-attributes").getValue()
>>                fromAttributeValue = flowfile.getAttribute("filename")
>> 
>>                # set our attribute to the desired new value
>>                # flowfile = session.putAttribute(flowfile, "from-property", 
>> fromPropertyValue)
>>                flowfile = session.putAttribute(flowfile, "filename", 
>> "LARRY_CURLEY_MOE")
>> 
>>                # transfer
>>                session.transfer(flowfile, self.__rel_success)
>>                session.commit()
>>           except:
>>                session.rollback()
>>                raise
>> 
>> processor = UpdateAttributes()

Reply via email to