Hi,
we have a problem when uploading files via Drag&Drop and StreamVariable in Internet Explorer.
Chrome and Firefox work fine!
Vaadin Version: 7.4.5
Server: Wildfly 8.2
When you drag some bigger files to vaadin for upload (make sure the upload takes some time) and then start to use other vaadin-components, e.g. a CheckBox, the streamingFinished method gets called, while the file is not full streamd yet.
[
11:34:02,284 INFO [stdout]
(default task-64) Streaming Finished - ContentLength: 76324232 - Bytes Received: 15204352
]
This results in defect files…
Serverlog (dragged 5 files with a size of arround 72MB for upload - while uploading just changing the value of a ComboBox):
11:34:00,812 INFO [stdout]
(default task-55) Streaming Started - ContentLength: 76324232 - Bytes Received: 0
11:34:01,250 INFO [stdout]
(default task-55) Streaming Finished - ContentLength: 76324232 - Bytes Received: 76324232
11:34:01,251 INFO [stdout]
(default task-57) Streaming Started - ContentLength: 76324232 - Bytes Received: 0
11:34:01,458 INFO [stdout]
(default task-57) Streaming Finished - ContentLength: 76324232 - Bytes Received: 76324232
11:34:01,474 INFO [stdout]
(default task-60) Streaming Started - ContentLength: 76324232 - Bytes Received: 0
11:34:01,843 INFO [stdout]
(default task-60) Streaming Finished - ContentLength: 76324232 - Bytes Received: 76324232
11:34:01,861 INFO [stdout]
(default task-62) Streaming Started - ContentLength: 76324232 - Bytes Received: 0
11:34:02,225 INFO [stdout]
(default task-62) Streaming Finished - ContentLength: 76324232 - Bytes Received: 76324232
11:34:02,245 INFO [stdout]
(default task-64) Streaming Started - ContentLength: 76324232 - Bytes Received: 0
11:34:02,284 INFO [stdout]
(default task-64) Streaming Finished - ContentLength: 76324232 - Bytes Received: [b]
15204352
[/b]
11:34:02,287 SEVERE [com.vaadin.server.DefaultErrorHandler]
(default task-64) : java.io.IOException: Eine bestehende Verbindung wurde softwaregesteuert
durch den Hostcomputer abgebrochen
at sun.nio.ch.SocketDispatcher.write0(Native Method) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:]
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:]
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:]
at sun.nio.ch.IOUtil.write(IOUtil.java:65) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:]
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:466) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:]
at org.xnio.nio.NioSocketConduit.write(NioSocketConduit.java:152)
at io.undertow.server.protocol.http.HttpResponseConduit.write(HttpResponseConduit.java:575) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.conduits.ChunkedStreamSinkConduit.flush(ChunkedStreamSinkConduit.java:260) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at org.xnio.conduits.ConduitStreamSinkChannel.flush(ConduitStreamSinkChannel.java:162)
at io.undertow.channels.DetachableStreamSinkChannel.flush(DetachableStreamSinkChannel.java:118) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at org.xnio.channels.Channels.flushBlocking(Channels.java:63)
at io.undertow.servlet.spec.ServletOutputStreamImpl.close(ServletOutputStreamImpl.java:609) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at com.vaadin.server.communication.FileUploadHandler.sendUploadResponse(FileUploadHandler.java:684) [vaadin-server-7.4.5.jar:7.4.5]
at com.vaadin.server.communication.FileUploadHandler.doHandleXhrFilePost(FileUploadHandler.java:513) [vaadin-server-7.4.5.jar:7.4.5]
at com.vaadin.server.communication.FileUploadHandler.handleRequest(FileUploadHandler.java:291) [vaadin-server-7.4.5.jar:7.4.5]
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1408) [vaadin-server-7.4.5.jar:7.4.5]
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:350) [vaadin-server-7.4.5.jar:7.4.5]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:51) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:56) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.SessionRestoringHandler.handleRequest(SessionRestoringHandler.java:119) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.jrHandle(ServletInitialHandler.java) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at org.zeroturnaround.javarebel.integration.servlet.undertow.cbp.ServletInitialHandlerCBP.handleRequest(ServletInitialHandlerCBP.java:104) [undertow-servlet-jr-plugin-6.2.0.jar:]
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:1.8.0_05]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:1.8.0_05]
at java.lang.Thread.run(Thread.java:745) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:1.8.0_05]
11:34:02,290 ERROR [io.undertow.request]
(default task-64) UT005023: Exception handling request to /hospitools/APP/UPLOAD/0/3/rec-4/bd1c3602-abda-4725-bc06-af7c1359a0af: javax.servlet.ServletException: com.vaadin.server.ServiceException: java.io.IOException: Eine bestehende Verbindung wurde softwaregesteuert
durch den Hostcomputer abgebrochen
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:352) [vaadin-server-7.4.5.jar:7.4.5]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:51) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:56) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.SessionRestoringHandler.handleRequest(SessionRestoringHandler.java:119) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.jrHandle(ServletInitialHandler.java) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at org.zeroturnaround.javarebel.integration.servlet.undertow.cbp.ServletInitialHandlerCBP.handleRequest(ServletInitialHandlerCBP.java:104) [undertow-servlet-jr-plugin-6.2.0.jar:]
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:1.8.0_05]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:1.8.0_05]
at java.lang.Thread.run(Thread.java:745) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:1.8.0_05]
Caused by: com.vaadin.server.ServiceException: java.io.IOException: Eine bestehende Verbindung wurde softwaregesteuert
durch den Hostcomputer abgebrochen
at com.vaadin.server.VaadinService.handleExceptionDuringRequest(VaadinService.java:1463) [vaadin-server-7.4.5.jar:7.4.5]
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1420) [vaadin-server-7.4.5.jar:7.4.5]
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:350) [vaadin-server-7.4.5.jar:7.4.5]
... 33 more
Caused by: java.io.IOException: Eine bestehende Verbindung wurde softwaregesteuert
durch den Hostcomputer abgebrochen
at sun.nio.ch.SocketDispatcher.write0(Native Method) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:]
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:]
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:]
at sun.nio.ch.IOUtil.write(IOUtil.java:65) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:]
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:466) [jrebel-bootstrap-c2164949f71c428b8f15525463f30f3b.jar:]
at org.xnio.nio.NioSocketConduit.write(NioSocketConduit.java:152)
at io.undertow.server.protocol.http.HttpResponseConduit.write(HttpResponseConduit.java:575) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.conduits.ChunkedStreamSinkConduit.flush(ChunkedStreamSinkConduit.java:260) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at org.xnio.conduits.ConduitStreamSinkChannel.flush(ConduitStreamSinkChannel.java:162)
at io.undertow.channels.DetachableStreamSinkChannel.flush(DetachableStreamSinkChannel.java:118) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at org.xnio.channels.Channels.flushBlocking(Channels.java:63)
at io.undertow.servlet.spec.ServletOutputStreamImpl.close(ServletOutputStreamImpl.java:609) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at com.vaadin.server.communication.FileUploadHandler.sendUploadResponse(FileUploadHandler.java:684) [vaadin-server-7.4.5.jar:7.4.5]
at com.vaadin.server.communication.FileUploadHandler.doHandleXhrFilePost(FileUploadHandler.java:513) [vaadin-server-7.4.5.jar:7.4.5]
at com.vaadin.server.communication.FileUploadHandler.handleRequest(FileUploadHandler.java:291) [vaadin-server-7.4.5.jar:7.4.5]
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1408) [vaadin-server-7.4.5.jar:7.4.5]
... 34 more
Code to reproduce:
package de.web.test;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.io.output.ByteArrayOutputStream;
import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.acceptcriteria.AcceptAll;
import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
import com.vaadin.server.StreamVariable;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.DragAndDropWrapper;
import com.vaadin.ui.Html5File;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
public class TestUploadLayout extends VerticalLayout {
private static final long serialVersionUID = 1L;
@Override
public void attach() {
super.attach();
setMargin(true);
setSpacing(true);
ComboBox comboBox = new ComboBox();
for (int i = 0; i < 10; i++) {
comboBox.addItem("Test " + i);
}
addComponent(comboBox);
Panel p = new Panel();
p.setHeight(200, Unit.PIXELS);
p.setWidth(200, Unit.PIXELS);
MyUploadPanel myUploadPanel = new MyUploadPanel(p);
addComponent(myUploadPanel);
}
class MyUploadPanel extends DragAndDropWrapper implements DropHandler{
private static final long serialVersionUID = 1L;
public MyUploadPanel(Component root) {
super(root);
setDropHandler(this);
}
@Override
public void drop(DragAndDropEvent event) {
WrapperTransferable tr = (WrapperTransferable) event.getTransferable();
Html5File files = tr.getFiles();
if (files != null) {
List<Html5File> filesToUpload = Arrays.asList(files);
filesToUpload.forEach(file -> {
file.setStreamVariable(new MyStreamVariable());
});
}
}
@Override
public AcceptCriterion getAcceptCriterion() {
return AcceptAll.get();
}
}
class MyStreamVariable implements StreamVariable{
private static final long serialVersionUID = 1L;
@Override
public OutputStream getOutputStream() {
return new ByteArrayOutputStream();
}
@Override
public boolean listenProgress() {
return false;
}
@Override
public void onProgress(StreamingProgressEvent event) {
System.out.println("Streaming OnProgress - ContentLength: " + event.getContentLength() + " - Bytes Received: " + event.getBytesReceived());
}
@Override
public void streamingStarted(StreamingStartEvent event) {
System.out.println("Streaming Started - ContentLength: " + event.getContentLength() + " - Bytes Received: " + event.getBytesReceived());
}
@Override
public void streamingFinished(StreamingEndEvent event) {
System.out.println("Streaming Finished - ContentLength: " + event.getContentLength() + " - Bytes Received: " + event.getBytesReceived());
}
@Override
public void streamingFailed(StreamingErrorEvent event) {
System.out.println("Streaming Failed - ContentLength: " + event.getContentLength() + " - Bytes Received: " + event.getBytesReceived());
}
@Override
public boolean isInterrupted() {
return false;
}
}
}
Are we doing something wrong or is this a Bug in Vaadin, the Internet Explorer or Wildfly?
Thanks for your help!