Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

aula 8 - Enviando arquivos ao servidor

Olá!!

quando tento cadastrar, aparece o erro abaixo:

já fiz o que o instrutor Paulo ensinou no blog do Alura,

já vi outros tópicos do fórum, mais não consegui entender o erro

o campo sumarioPath substitui pelo campo arquivo,

e tudo que estava como sumario, substitui pelo arquivo

criei uma pasta chamada arquivo-servidor no local indicado pelo curso

HTTP Status 500 - Request processing failed; nested exception is java.lang.NullPointerException

type Exception report

message Request processing failed; nested exception is java.lang.NullPointerException

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause

java.lang.NullPointerException
    br.com.projeto.cuidandodaatencao.infra.FileSaver.write(FileSaver.java:23)
    br.com.projeto.cuidandodaatencao.controllers.AlunoController.gravar(AlunoController.java:58)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.69 logs.

Apache Tomcat/7.0.69
7 respostas

Oi Lilian,

Precisamos que vc coloque aqui a classe FileSaver, pois o erro está na linha 23 dessa classe. Meu chute é que algum objeto não foi injetado...

olá Alberto,

segue abaixo a FileSaver

package br.com.projeto.cuidandodaatencao.infra;

import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

@Component
public class FileSaver {

    @Autowired
    HttpServletRequest request;

    public String write(String baseFolder,MultipartFile file) {

        try {    

            String realPath = request.getServletContext().getRealPath("/" + baseFolder);
            String path = realPath + "/" + file.getOriginalFilename();
            file.transferTo(new File(path));
            return baseFolder + "/" + file.getOriginalFilename();

        } catch (IllegalStateException | IOException e) {
            throw new RuntimeException(e);    
        }


    }
}

Bom, não veio a linha então vou chutar o ponto do NPE. Acho que a variável file está nula. Confere isso? Caso seja verdade, verifica se o seu formulário está correto em relação ao upload.

Se o que eu tiver falado não for correto, debuga um pouco código para descobrir quem está nulo aí.

olá Alberto,

linha 23 do FileSaver:

String path = realPath + "/" + file.getOriginalFilename();

linha 58 do alunocontroller

String path = fileSaver.write("arquivo-servidor", arquivo);

formulário de cadastro:

    <div>
            <label>Arquivo</label> 
            <input name="arquivo" type="file" />
        </div>

por favor, como verifico se o file está nulo?

obrigada!!!

solução!

Oi Lilian,

Então, você pode debugar ou colocar um simples sysout para verificar o valor. Só que ela deve estar nula mesmo, já que está tomando NPE. Você tem que verificar, no seu controller se o arquivo enviado do formulário está chegando.

Alberto,

não está mais aparecendo mais a exception. no formulário, quando cadastro, no lado do campo arquivo, fica como "nenhum arquivo selecionado"

como verifico no controller se o arquivo está chegando? desculpe.

olá!!

consegui enviar o arquivo, faltava inserir o "Path" em arquivoPath na classe aluno.

eu só tinha colocado arquivo e não arquivoPath.

obrigada pela ajuda e atenção Alberto Souza!! =)