Оценка выражений, а также регулярное выражение в одном поле в пользовательских процессорах Nifi - PullRequest
0 голосов
/ 14 мая 2019

В моем собственном процессоре я добавил поле ниже

public static final PropertyDescriptor CACHE_VALUE = new PropertyDescriptor.Builder()
            .name("Cache Value")
            .description("Cache Value")
            .required(true)
            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
            .expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
            .build();

Где я ожидаю прочитать атрибуты потокового файла, такие как $ {fieldName}, а также регулярное выражение, например. *, Чтобы прочитать весь контент или некоторую часть контента, например$ .nodename.subnodename

Для этого я добавил ниже код

for (FlowFile flowFile : flowFiles) {
                final String cacheKey = context.getProperty(CACHE_KEY).evaluateAttributeExpressions(flowFile).getValue();
                String cacheValue = null;
                cacheValue = context.getProperty(CACHE_VALUE).evaluateAttributeExpressions(flowFile).getValue();
                if (".*".equalsIgnoreCase(cacheValue.trim())) {
                    final ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                    session.exportTo(flowFile, bytes);
                    cacheValue = bytes.toString();
                }
                cache.put(cacheKey, cacheValue);
                session.transfer(flowFile, REL_SUCCESS);
            }

Как добиться этого какой-то частью содержимого, например $ .nodename.subnodename.Нужно ли анализировать JSON или есть другой способ?

1 Ответ

0 голосов
/ 14 мая 2019

Вам нужно будет либо самостоятельно проанализировать JSON, либо использовать процессор EvaluateJsonPath, прежде чем обращаться к этому процессору для извлечения значений содержимого в атрибуты с помощью выражений JSON Path, а затем в своем пользовательском коде ссылаться на значение атрибута.

...