1

フローファイル コンテンツの JSON オブジェクトに属性/文字列を追加できるカスタム プロセッサを Apache NiFi で作成しようとしています。現時点では、文字列を使用するだけでは機能しますが、NiFi の式言語をコードでサポートしているにもかかわらず使用すると機能しません。

式言語は別のプロセッサで動作するため 100% 正しいです。また、別の属性を試して、それが属性ではないことを確認しました。

プロパティ:

public static final PropertyDescriptor ADD_ATTRIBUTE = new PropertyDescriptor
        .Builder().name("Add Attribute")
        .description("Example Property")
        .required(true)
        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
        .expressionLanguageSupported(true)
        .build();

コードの後半で、値を取得して、使用する JSON オブジェクトに入れたい場合:

jsonObject.put("hostname", context.getProperty(ADD_ATTRIBUTE).evaluateAttributeExpressions().getValue());

単体テストも作成しましたが、testrunner.setProperty にテキスト値を割り当てると機能します。ただし、テストランナーに属性を割り当てる方法や、テストで式言語を使用する方法がわかりません。

提案や解決策をお寄せいただきありがとうございます。

4

2 に答える 2

2

テストに関して...

受信 FlowFile (evaluateAttributeExpressions(flowFile)) に対して式言語を評価していると仮定すると、次のことができます。

runner.setProperty(ADD_ATTRIBUTE, "${my.attribute}");

次に、 my.attribute を含む属性 Map を作成します。

final Map<String,String> attributes = new HashMap<>(); attributes.put("my.attribute", myAttribute);

次に、いくつかのコンテンツを属性とともにキューに入れます。

runner.enqueue(fileIn, attributes); runner.run();

コードベースの例:

https://github.com/apache/nifi/blob/1e56de9521e4bc0752b419ffc7d62e096db1c389/nifi-nar-bundles/nifi-solr-bundle/nifi-solr-processors/src/test/java/org/apache/nifi/processors/solr/ TestPutSolrContentStream.java#L243

于 2016-03-12T15:38:22.600 に答える