[
https://issues.apache.org/jira/browse/EXEC-102?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15120277#comment-15120277
]
Chris Price commented on EXEC-102:
----------------------------------
Note that if I change the external command above from {{/bin/true}} to
{{/bin/cat}}, then the exception goes away and the program behaves as expected.
I am guessing that perhaps the difference has something to do with the fact
that {{/bin/cat}} actually expects to receive some input on STDIN, whereas
{{/bin/true}} does not... but that is just a wild guess.
> "Stream closed" error in Java 8 when passing input to processes that don't
> consume it
> -------------------------------------------------------------------------------------
>
> Key: EXEC-102
> URL: https://issues.apache.org/jira/browse/EXEC-102
> Project: Commons Exec
> Issue Type: Bug
> Reporter: Chris Price
>
> When trying to pass an InputStream to a process (i.e. for it to be used as
> STDIN), I am getting an IOException in Java 8 that I did not get in Java 7.
> Here is a simple reproducer:
> {code}
> package foo;
> import org.apache.commons.exec.CommandLine;
> import org.apache.commons.exec.DefaultExecutor;
> import org.apache.commons.exec.Executor;
> import org.apache.commons.exec.PumpStreamHandler;
> import java.io.ByteArrayInputStream;
> import java.io.ByteArrayOutputStream;
> import java.io.IOException;
> public class CommonsExecBinTrue {
> public static void main(String[] args) throws IOException {
> Executor exec = new DefaultExecutor();
> CommandLine cl = new CommandLine("/bin/true");
> String text = "hello";
> ByteArrayInputStream input =
> new ByteArrayInputStream(text.getBytes("UTF-8"));
> ByteArrayOutputStream output = new ByteArrayOutputStream();
> exec.setStreamHandler(new PumpStreamHandler(output, null, input));
> exec.execute(cl);
> System.out.println("result: " + output.toString("UTF-8"));
> }
> }
> {code}
> This program would work fine in Java 7, but in Java 8 it fails with this
> stack trace:
> {code}
> Exception in thread "main" java.io.IOException: Stream closed
> at
> java.lang.ProcessBuilder$NullOutputStream.write(ProcessBuilder.java:433)
> at java.io.OutputStream.write(OutputStream.java:116)
> at
> java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
> at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
> at java.io.FilterOutputStream.close(FilterOutputStream.java:158)
> at
> org.apache.commons.exec.DefaultExecutor.closeProcessStreams(DefaultExecutor.java:306)
> at
> org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:387)
> at
> org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:166)
> at
> org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:153)
> at foo.CommonsExecBinTrue.main(CommonsExecBinTrue.java:27)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)