Nifi:在ExecuteScript

时间:2019-06-03 08:26:39

标签: xml jython apache-nifi outputstream

过去几天,我一直在尝试使用ExecuteScript覆盖Nifi中的流文件xml内容。

基本上,我想在特定标签内添加新的子元素(新标签),并在其中插入一些值,然后更新自身内容。

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中找不到工作示例来覆盖Jython中ExecuteScript中的xml内容。

我收到以下TypeError:“ NoneType对象不可迭代”

我知道错误来自outputStream.write部分。 但是我不知道如何覆盖内容。

如果有人能教我如何使用outputStream.write更新xml流文件,我将不胜感激。

谢谢。

0 个答案:

没有答案