Ошибка при загрузке файлов

Добрый день,

Столкнулись с ошибкой при загрузке файлов через компонент fileStorageUploadField. В процессе анализа обнаружили другую проблему - исходное исключение можно теряться из-за возникновения ошибки в секции finally метода StreamReceiverHandler#streamToReceiver. При возникновении ошибки загрузки создается событие FailedEvent, которое обрабатывается в методе FileStorageUploadField.deleteTempFile и там возникает NullPointerException. Эта проблема осложняет анализ, т.к. исходная ошибка не выводится в лог.

Stacktrace:

java.lang.NullPointerException: Cannot invoke "io.jmix.flowui.component.upload.receiver.TemporaryStorageFileData.getFileInfo()" because the return value of "io.jmix.flowui.component.upload.receiver.FileTemporaryStorageBuffer.getFileData()" is null
	at io.jmix.flowui.component.upload.FileStorageUploadField.deleteTempFile(FileStorageUploadField.java:368) ~[jmix-flowui-2.2.1.jar:na]
	at io.jmix.flowui.component.upload.FileStorageUploadField.onFailedEvent(FileStorageUploadField.java:360) ~[jmix-flowui-2.2.1.jar:na]
	at com.vaadin.flow.component.ComponentEventBus.fireEventForListener(ComponentEventBus.java:239) ~[flow-server-24.3.3.jar:24.3.3]
	at com.vaadin.flow.component.ComponentEventBus.fireEvent(ComponentEventBus.java:228) ~[flow-server-24.3.3.jar:24.3.3]
	at com.vaadin.flow.component.Component.fireEvent(Component.java:411) ~[flow-server-24.3.3.jar:24.3.3]
	at com.vaadin.flow.component.upload.Upload.fireUploadInterrupted(Upload.java:473) ~[vaadin-upload-flow-24.3.3.jar:na]
	at com.vaadin.flow.component.upload.Upload$DefaultStreamVariable.streamingFailed(Upload.java:795) ~[vaadin-upload-flow-24.3.3.jar:na]
	at com.vaadin.flow.server.communication.StreamReceiverHandler.onStreamingFailed(StreamReceiverHandler.java:594) ~[flow-server-24.3.3.jar:24.3.3]
	at com.vaadin.flow.server.communication.StreamReceiverHandler.streamToReceiver(StreamReceiverHandler.java:576) ~[flow-server-24.3.3.jar:24.3.3]
	at com.vaadin.flow.server.communication.StreamReceiverHandler.handleFileUploadValidationAndData(StreamReceiverHandler.java:415) ~[flow-server-24.3.3.jar:24.3.3]
	at com.vaadin.flow.server.communication.StreamReceiverHandler.handleStream(StreamReceiverHandler.java:304) ~[flow-server-24.3.3.jar:24.3.3]
	at com.vaadin.flow.server.communication.StreamReceiverHandler.handleMultipartFileUploadFromParts(StreamReceiverHandler.java:249) ~[flow-server-24.3.3.jar:24.3.3]
	at com.vaadin.flow.server.communication.StreamReceiverHandler.doHandleMultipartFileUpload(StreamReceiverHandler.java:202) ~[flow-server-24.3.3.jar:24.3.3]
	at com.vaadin.flow.server.communication.StreamReceiverHandler.handleRequest(StreamReceiverHandler.java:162) ~[flow-server-24.3.3.jar:24.3.3]
	at com.vaadin.flow.server.communication.StreamRequestHandler.handleRequest(StreamRequestHandler.java:116) ~[flow-server-24.3.3.jar:24.3.3]
	at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1573) ~[flow-server-24.3.3.jar:24.3.3]
	at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:398) ~[flow-server-24.3.3.jar:24.3.3]
	at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:106) ~[vaadin-spring-24.3.3.jar:na]
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.18.jar:6.0]

Версия Jmix - 2.2.1.

Добрый день!

А можете написать шаги воспроизведения ошибки?

Создал задачу поправить обработку NPE: NPE in deleteTempFile of FileStorageUploadField hides the original exception · Issue #3111 · jmix-framework/jmix · GitHub

1 симпатия

Шаги для воспроизведения проблемы:

  1. Запустить приложение и открыть экран с компонентом fileStorageUploadField.
  2. Запретить запись в папку .jmix.
  3. Попробовать загрузить файл через upload.

Результат: java.lang.NullPointerException.

1 симпатия