2016-12-07 7 views
1

Я пытаюсь получить атрибуты flowfile в моем питоне скрипт, я сделал следующее:Использование FlowFile атрибутов в питоне executeScript НЕГО

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) 

, но как я могу получить доступ к моему flowfile атрибутов в процессе метод?

ответ

2

Они не будут немедленно доступны в методе процесса, если вы не сделаете что-то вроде передачи ссылки на FlowFile в свой конструктор TransformCallback. Другой вариант состоит в том, чтобы разделить чтение и запись (поскольку вы используете IOUtils.toString(), чтобы сразу прочитать все это) на два отдельных вызова, тогда вы можете выполнять манипуляции с атрибутами вне методов process().

Кстати, если вам просто нужно прочитать весь контент в виде строки, вам не нужен StreamCallback или InputStreamCallback, вы можете использовать session.read (flowFile), который возвращает InputStream (а не выполняет при условии обратного вызова). Вы можете вызвать IOUtils.toString() на этом (и не забудьте закрыть его впоследствии), тем самым избегая обратного вызова и позволяя более легкий доступ к атрибутам файла потока, используя текущую ссылку FlowFile (и getAttribute() или getAttributes() методы).

+0

первое решение работает для меня спасибо – azelix