Support Questions

Find answers, ask questions, and share your expertise
Announcements
Celebrating as our community reaches 100,000 members! Thank you!

How can I send FlowFile content to String in Java?

avatar
New Contributor

I'm new in NiFi and i'm trying to make a simple processor in Java. I need to send flowFile content to String and compare with Processor Property (which is actually in string). Is any method in NiFi packages for it?

1 ACCEPTED SOLUTION

avatar

@Marceli Stawicki There are a few ways to do this. The most common way is to read the FlowFile contents in a ProcessSession#read and assign the contents to an AtomicReference. For example:

final AtomicReference<String> contentsRef = new AtomicReference<>(null);

session.read(flowFile, new InputStreamCallback() {
    @Override
    public void process(final InputStream in) throws IOException {
        final String contents = IOUtils.toString(in, "UTF-8");
        contentsRef.set(contents);
    }
})

final String contents = contentsRef.get();

Another approach is to use ProcessSession#exportTo:

final ByteArrayOutputStream bytes = new ByteArrayOutputStream();
session.exportTo(flowFile, bytes);
final String contents = bytes.toString();

From there you should be able to compare contents to the value of the property.

View solution in original post

2 REPLIES 2

avatar

@Marceli Stawicki There are a few ways to do this. The most common way is to read the FlowFile contents in a ProcessSession#read and assign the contents to an AtomicReference. For example:

final AtomicReference<String> contentsRef = new AtomicReference<>(null);

session.read(flowFile, new InputStreamCallback() {
    @Override
    public void process(final InputStream in) throws IOException {
        final String contents = IOUtils.toString(in, "UTF-8");
        contentsRef.set(contents);
    }
})

final String contents = contentsRef.get();

Another approach is to use ProcessSession#exportTo:

final ByteArrayOutputStream bytes = new ByteArrayOutputStream();
session.exportTo(flowFile, bytes);
final String contents = bytes.toString();

From there you should be able to compare contents to the value of the property.

avatar
New Contributor

Thanks, it worked!