Nifi: перезапись содержимого XML в файле FlowFile в ExecuteScript - PullRequest
0 голосов
/ 03 июня 2019

Последние несколько дней я пытался перезаписать содержимое XML-файла потока в Nifi с использованием ExecuteScript.

В основном я хотел бы добавить новый подэлемент (новый тег) в определенный тег и вставить некоторые значения взатем обновите содержимое само по себе.

import xml.etree.ElementTree as ET
from org.apache.commons.io import IOUtils
from java.nio.charset import StandardCharsets
from org.apache.nifi.processor.io import StreamCallback

class PyStreamCallback(StreamCallback):
def __init__(self):
    pass

def process(self, inputStream, outputStream):
    text_content = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
    tree = ET.fromstring(text_content)
    ### My custom code to update the content ###

    # Overwriting new_value as string elements within new_tag
    for parent in tree.findall(".//parent"):
        # Adding New Tag and its content as child element 
        new_tag = ET.SubElement(parent, 'newtag')
        new_tag.text = str(new_value)

    outputStream.write(bytearray(ET.dump(tree)))


 flowFile = session.get()
 if (flowFile != None):
    flowFile = session.write(flowFile, PyStreamCallback())
    session.transfer(flowFile, REL_SUCCESS)
    session.commit()

Я не смог найти рабочий пример в ExecuteScript для перезаписи содержимого XML в ExecuteScript в Jython.

И я получил следующую ошибку TypeError: «Объект NoneType не повторяется»

Я знаю, что ошибка происходит из части outputStream.write.Но я не знаю, как перезаписать содержимое.

Буду признателен, если кто-нибудь сможет научить меня, как мне обновлять xml-файл потока с помощью outputStream.write.

Спасибо.

...