[
https://issues.apache.org/jira/browse/NIFI-1866?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15285298#comment-15285298
]
ASF GitHub Bot commented on NIFI-1866:
--------------------------------------
Github user markap14 commented on a diff in the pull request:
https://github.com/apache/nifi/pull/439#discussion_r63425823
--- Diff:
nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/repository/TestStandardProcessSession.java
---
@@ -323,6 +327,37 @@ public void process(final OutputStream outputStream)
throws IOException {
assertDisabled(outputStreamHolder.get());
}
+ @Test(expected=ProcessException.class)
+ public void testExportTo() throws IOException {
+ final ContentClaim claim = contentRepo.create(false);
+ final FlowFileRecord flowFileRecord = new
StandardFlowFileRecord.Builder()
+ .contentClaim(claim)
+ .addAttribute("uuid", "12345678-1234-1234-1234-123456789012")
+ .entryDate(System.currentTimeMillis())
+ .build();
+ flowFileQueue.put(flowFileRecord);
+ FlowFile flowFile = session.get();
+ assertNotNull(flowFile);
+
+ flowFile = session.append(flowFile, new OutputStreamCallback() {
+ @Override
+ public void process(OutputStream out) throws IOException {
+ out.write("Hello World".getBytes());
+ }
+ });
+
+ // should be OK
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ session.exportTo(flowFile, os);
+ assertEquals("Hello World", new String(os.toByteArray()));
+ os.close();
+
+ // should throw ProcessException because of IOException (from
processor code)
+ FileOutputStream mock = Mockito.mock(FileOutputStream.class);
+ doThrow(new IOException()).when(mock).write((byte[]) notNull(),
any(Integer.class), any(Integer.class));
+ session.exportTo(flowFile, mock);
--- End diff --
I would recommend wrapping this call in a try/catch and ensuring that
ProcessException is thrown here. Indicating that it is expected in the @Test
annotation can be somewhat error-prone, as several other method calls within
this method could actually throw ProcessException
> Exception thrown by StandardProcessSession.exportTo implies issues reading
> from repository
> ------------------------------------------------------------------------------------------
>
> Key: NIFI-1866
> URL: https://issues.apache.org/jira/browse/NIFI-1866
> Project: Apache NiFi
> Issue Type: Bug
> Components: Core Framework
> Reporter: Mark Payne
> Assignee: Mark Payne
> Fix For: 0.7.0
>
>
> When calling ProcessSession.exportTo, if unable to write to the OutputStream
> provided, we end up with a FlowFileAccessException, rather than IOException.
> This implies that we were unable to access the ContentRepository, but this is
> not accurate. We need to ensure that we throw the appropriate Exception here
> so that Processors that cause ProcessException are able to handle the
> Exception properly
> 23:23:03,338 ERROR Timer-Driven Process Thread-3
> standard.HandleHttpResponse:306 -
> org.apache.nifi.processor.exception.FlowFileAccessException: Failed to export
> StandardFlowFileRecord[uuid=366b3598-a1f7-446e-83b6-9d0404532691,claim=StandardContentClaim
> [resourceClaim=StandardResourceClaim[id=1462828983178-2, container=default,
> section=2], offset=49798,
> length=51200000],offset=0,name=1095188501442536,size=51200000] to
> HttpOutput@1eb25c5d{OPEN} due to org.eclipse.jetty.io.EofException
> at
> org.apache.nifi.controller.repository.StandardProcessSession.exportTo(StandardProcessSession.java:2322)
> at
> org.apache.nifi.processors.standard.HandleHttpResponse.onTrigger(HandleHttpResponse.java:166)
> at
> org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)