Я пытаюсь передать локальные mp3-файлы. Песня, которую я тестирую, длится 5: 33. В обоих хром и край песня играет чуть меньше 4 минут, прежде чем она остановится.StreamingOutput - EofException перед потоком, закончившим запись
Вот моя служба
@Path ("clips")
public class ClipService {
@GET
@Path(...)
@Produces("audio/mp3")
public Response streamAudio() {
Clip clip = ...
StreamingOutput output = buildStreamingOutput(clip);
return Response.ok(output).header(HttpHeaders.CONTENT_LENGTH, clip.getLength()).build();
}
private StreamingOutput buildStreamingOutput(Clip clip)
throws Exception {
return new StreamingOutput() {
@Override
public void write(final OutputStream out)
throws IOException, WebApplicationException {
byte[] buffer = new byte[1024];
int bytesRead;
try (InputStream in = clip.getInputStream()) {
while ((bytesRead = in.read(buffer)) > 0) {
out.write(buffer, 0, bytesRead);
}
out.flush();
}
}
};
}
}
Класс клип
public class Clip {
private InputStream inputStream; // The file
private long length; // File.length()
И ошибка я получаю ...
SEVERE: An I/O error has occurred while writing a response message entity to the container output stream.
org.glassfish.jersey.server.internal.process.MappableException: org.eclipse.jetty.io.EofException
at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:92)
...
Caused by: org.eclipse.jetty.io.EofException
at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:200)
...
Caused by: java.io.IOException: An established connection was aborted by the software in your host machine
at sun.nio.ch.SocketDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:51)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)
at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:178)
... 67 more
Я попытался установить ServerProperties.OUTBOUND_CONTENT_LENGTH_BUFFER
0 в мой AppConfig безрезультатно.
У вас нет никакой информации о том, кто вас выручил, но посмотрите на трассировку стека. «EofException» был вызван «IOException», поэтому «IOException» является настоящей проблемой здесь, поэтому мое редактирование было правильным и полезным, а редактирование моего редактирования не было. Не делай этого. Я пытаюсь вам помочь. – EJP
Я добавлю для разработчиков Jetty, что при чтении происходит конец файла. Бросать конец файла при записи - это смешно. Было бы лучше вообще не исключать исключение, или даже не поймать его. – EJP
Вам нужно прекратить гадать и начать читать. Я четко изложил как причину, так и мотивацию для моего редактирования, и что было не так с вашим названием. «Недостаток пунктуации» - смехотворная причина отклонить все правки, которые были скопированы/вставлены непосредственно из вашей трассировки стека. Если вы не хотите, чтобы ваш вопрос отвечал людьми, которые могут объяснить базовое «IOException», вы пойдете правильно. Я нарисовал эту войну редактирования вниманию модераторов. – EJP