2016-12-07 3 views
1

Ich versuche Attribute eines Flowfile in meinem Python-Skript zu bekommen, ich habe folgendes getan:Verwenden Flowfile-Attribute in einem ExecuteScript Nifi Python

class TransformCallback(StreamCallback): 

    def __init__(self): 
     pass 

    def process(self, inputStream, outputStream): 
     try: 
      # Read input FlowFile content 
      input_text = IOUtils.toString(inputStream, StandardCharsets.UTF_8) 
      input_obj = json.loads(input_text) 

aber wie kann ich meine Flowfile-Attribute in den Prozess zugreifen Methode ?

Antwort

2

Sie werden nicht sofort in der Prozessmethode verfügbar sein, es sei denn, Sie führen einen Verweis auf die FlowFile in Ihrem TransformCallback-Konstruktor aus. Eine weitere Option ist das Teilen des Lese- und Schreibvorgangs (da Sie IOUtils.toString() verwenden, um das gesamte Objekt gleichzeitig zu lesen) in zwei separate Aufrufe, dann können Sie die Attributmanipulation außerhalb der process() -Methoden durchführen.

Übrigens, wenn Sie nur den gesamten Inhalt als String einlesen müssen, brauchen Sie keinen StreamCallback oder InputStreamCallback, Sie können session.read (flowFile) verwenden, das einen InputStream zurückgibt (statt einen Rückruf zur Verfügung gestellt). Sie können dazu IOUtils.toString() aufrufen (und vergessen Sie nicht, es danach zu schließen), wodurch der Rückruf vermieden und der Zugriff auf die Flow-Dateiattribute mit Ihrem aktuellen FlowFile-Verweis (und dem getAttribute() oder getAttributes() erleichtert wird) Methoden).

+0

die erste Lösung funktioniert für mich danke – azelix