[ https://issues.apache.org/activemq/browse/CAMEL-2551?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen resolved CAMEL-2551. -------------------------------- Resolution: Fixed Fix Version/s: 2.3.0 > File component does not correctly handle PipedInputStream in message body. > -------------------------------------------------------------------------- > > Key: CAMEL-2551 > URL: https://issues.apache.org/activemq/browse/CAMEL-2551 > Project: Apache Camel > Issue Type: Bug > Components: camel-core > Affects Versions: 2.2.0 > Environment: does not matter > Reporter: Sergey Zolotaryov > Assignee: Willem Jiang > Fix For: 2.3.0 > > Attachments: patch.txt > > > Streams that do not have their contents length at immediate disposal, like > PipedInputStream, are not processed correctly by the file component. > \\ > {code} > private void writeFileByStream(InputStream in, File target) throws > IOException { > FileChannel out = null; > try { > out = prepareOutputFileChannel(target, out); > if (LOG.isTraceEnabled()) { > LOG.trace("Using InputStream to transfer from: " + in + " to: > " + out); > } > int size = endpoint.getBufferSize(); > byte[] buffer = new byte[size]; > ByteBuffer byteBuffer = ByteBuffer.wrap(buffer); > while (true) { > int count = in.read(buffer); > if (count <= 0) { > break; > } else if (count < size) { > byteBuffer = ByteBuffer.wrap(buffer, 0, count); > out.write(byteBuffer); > break; > } else { > out.write(byteBuffer); > byteBuffer.clear(); > } > } > } finally { > ObjectHelper.close(in, target.getName(), LOG); > ObjectHelper.close(out, target.getName(), LOG); > } > } > {code} > The code > {code} > } else if (count < size) { > byteBuffer = ByteBuffer.wrap(buffer, 0, count); > out.write(byteBuffer); > break; > } else { > {code} > does not take into account that bytes read can be less than the size of the > buffer passed into the InputStream.read method and stream can still have more > content. The only indication that EOF was reached is -1 returned from the > read method according to Java API. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.