Browse Source

Call endUpload() in finally block of fail handling (#14677).

Change-Id: I0b5976abf0d8804e8cd34c5dd489da8617ef89f1
tags/7.4.0.beta1
Denis Anisimov 9 years ago
parent
commit
3f728bea50

+ 14
- 12
server/src/com/vaadin/ui/Upload.java View File

@@ -1150,23 +1150,25 @@ public class Upload extends AbstractComponent implements Component.Focusable,
fireUploadSuccess(event.getFileName(), event.getMimeType(),
event.getContentLength());
endUpload();
markAsDirty();
}

@Override
public void streamingFailed(StreamingErrorEvent event) {
Exception exception = event.getException();
if (exception instanceof NoInputStreamException) {
fireNoInputStream(event.getFileName(),
event.getMimeType(), 0);
} else if (exception instanceof NoOutputStreamException) {
fireNoOutputStream(event.getFileName(),
event.getMimeType(), 0);
} else {
fireUploadInterrupted(event.getFileName(),
event.getMimeType(), 0, exception);
try {
Exception exception = event.getException();
if (exception instanceof NoInputStreamException) {
fireNoInputStream(event.getFileName(),
event.getMimeType(), 0);
} else if (exception instanceof NoOutputStreamException) {
fireNoOutputStream(event.getFileName(),
event.getMimeType(), 0);
} else {
fireUploadInterrupted(event.getFileName(),
event.getMimeType(), 0, exception);
}
} finally {
endUpload();
}
endUpload();
}
};
}

+ 101
- 0
server/tests/src/com/vaadin/tests/server/component/upload/UploadTest.java View File

@@ -0,0 +1,101 @@
/*
* Copyright 2000-2014 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.tests.server.component.upload;

import org.junit.Assert;
import org.junit.Test;

import com.vaadin.server.StreamVariable;
import com.vaadin.server.StreamVariable.StreamingErrorEvent;
import com.vaadin.ui.Upload;

/**
*
* @author Vaadin Ltd
*/
public class UploadTest {

@Test
public void getStreamVariable_streamingFailed_endUploadIsCalled() {
TestUpload upload = new TestUpload();
upload.startUpload();
StreamVariable variable = upload.getStreamVariable();
try {
variable.streamingFailed(new TestStreamingErrorEvent());
} catch (Exception e) {
}
Assert.assertFalse(upload.isUploading());
}

private static class TestStreamingErrorEvent implements StreamingErrorEvent {

@Override
public String getFileName() {
return null;
}

@Override
public String getMimeType() {
return null;
}

@Override
public long getContentLength() {
return 0;
}

@Override
public long getBytesReceived() {
return 0;
}

@Override
public Exception getException() {
return new Exception();
}

}

private static class TestUpload extends Upload {

@Override
public StreamVariable getStreamVariable() {
return super.getStreamVariable();
}

@Override
protected void fireNoInputStream(String filename, String MIMEType,
long length) {
fireEvent();
}

@Override
protected void fireNoOutputStream(String filename, String MIMEType,
long length) {
fireEvent();
}

@Override
protected void fireUploadInterrupted(String filename, String MIMEType,
long length, Exception e) {
fireEvent();
}

private void fireEvent() {
throw new NullPointerException();
}
}
}

Loading…
Cancel
Save