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

Erro nullpointerExcpetion ao tentar adicionar uma foto no banco.

Estou com o seguinte erro ao tentar adicionar uma imagem no meu banco de dados, segue o código.

Classe.

@Entity
@SuppressWarnings("serial")
public class Usuario implements Serializable{


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    private String login;
    private String senha;
    private String confirmarSenha;
    @Lob
    private byte[] imagem;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "perfil_codigo")
    private Perfil perfil = new Perfil();

BEAN

@Named
@ViewScoped
@SuppressWarnings("serial")
public class CadastroUsuarioBean implements Serializable {

    @Inject
    private Usuario usuario;
    @Inject
    private UsuarioDao usuarioDao;
    @Inject
    private Perfil perfil;
    @Inject
    private PerfilDao perfilDao;
    private Part foto;


    @Transacao
    public void adicionarUsuario() throws IOException {
        if (this.usuario.getCodigo() == null) {
            if (verificarSenhaComConfirmarSenha()) {
                usuario.setImagem(IOUtils.toByteArray(this.foto.getInputStream()));
                this.perfilDao.salvar(perfil);
                Perfil perfilCodigo = this.perfilDao.buscarPorCodigo(perfil.getCodigo());
                this.usuario.setPerfil(perfilCodigo);
                this.usuarioDao.salvar(usuario);
                MensagemUtil
                        .mensagemSalvoComSucesso("Usuario salvo com sucesso");
            } else {
                MensagemUtil.mensagemError("Usuario ou senha invalido");
            }
        } else {
            this.perfilDao.editar(perfil);
            this.usuarioDao.editar(usuario);
            MensagemUtil.mensagemSalvoComSucesso("Usuario editado com sucesso");
        }
        this.usuario = new Usuario();
        this.perfil = new Perfil();
    }

HTML

<h:form id="formularioCadastro" enctype="multipart/form-data">
    <p:panelGrid columns="2"
                            columnClasses="ui-grid-col-6,ui-grid-col-6" layout="grid"
                            styleClass="ui-panelgrid-blank">
                            <p:outputLabel value="Foto: " for="foto" />
                            <p:fileUpload allowTypes="/(\.|\/)(gif|jpe?g|png|pdf|doc|rar)$/"
                                skinSimple="true" id="foto" value="#{cadastroUsuarioBean.foto}"
                                mode="simple" required="true" styleClass="secondary"
                                requiredMessage="O campo foto é obrigatório" />
                        </p:panelGrid>

 // RESTANTE DO CODIGO.

Erro.

Caused by: java.lang.NullPointerException
    at br.com.borracharia.bean.CadastroUsuarioBean.adicionarUsuario(CadastroUsuarioBean.java:41)
    at br.com.borracharia.bean.CadastroUsuarioBean$Proxy$_$$_WeldSubclass.adicionarUsuario$$super(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.weld.interceptor.proxy.TerminalAroundInvokeInvocationContext.proceedInternal(TerminalAroundInvokeInvocationContext.java:49)
    at org.jboss.weld.interceptor.proxy.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:77)
    at br.com.borracharia.gerenciamento.Gerenciamento.gerenciarTransacoes(Gerenciamento.java:24)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.weld.interceptor.reader.SimpleInterceptorInvocation$SimpleMethodInvocation.invoke(SimpleInterceptorInvocation.java:74)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeAroundInvoke(InterceptorMethodHandler.java:84)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:72)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:56)
    at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:79)
    at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:68)
    at br.com.borracharia.bean.CadastroUsuarioBean$Proxy$_$$_WeldSubclass.adicionarUsuario(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
    ... 34 more

QUE está acusando nessa linha.

usuario.setImagem(IOUtils.toByteArray(this.foto.getInputStream()));
5 respostas

Fala Alisson, blz?

no seu método vc está fazendo uma verificação para ver se o codigo do usuario está nulo e se estiver vc tenta salvar a imagem. Acredito que o problema esteja ai, vc pode estar recendo um usuario null.

@Transacao
    public void adicionarUsuario() throws IOException {
        if (this.usuario.getCodigo() == null) {
            if (verificarSenhaComConfirmarSenha()) {
                usuario.setImagem(IOUtils.toByteArray(this.foto.getInputStream()));

    //restante do método
 }

tenta colocar um sysout para ver o que esta vindo como nulo, se é o usuário ou a foto.

Samir é a foto que ta vindo nulla mesmo.

@Transacao
    public void adicionarUsuario() throws IOException {
        if (this.usuario.getCodigo() == null) {
            if (verificarSenhaComConfirmarSenha()) {
                System.out.println("FOOOOOTO: " + foto);
                usuario.setImagem(IOUtils.toByteArray(this.foto.getInputStream()));
                this.perfilDao.salvar(perfil);
                Perfil perfilCodigo = this.perfilDao.buscarPorCodigo(perfil.getCodigo());
                this.usuario.setPerfil(perfilCodigo);
                this.usuarioDao.salvar(usuario);
                MensagemUtil
                        .mensagemSalvoComSucesso("Usuario salvo com sucesso");
            } else {
                MensagemUtil.mensagemError("Usuario ou senha invalido");
            }
        } else {
            this.perfilDao.editar(perfil);
            this.usuarioDao.editar(usuario);
            MensagemUtil.mensagemSalvoComSucesso("Usuario editado com sucesso");
        }
        this.usuario = new Usuario();
        this.perfil = new Perfil();
    }

fiz o sysou e a foto ta null

Isso ta acontecendo por que em nenhum momento vc instanciou foto e por isso ela está null.

solução!

Fala Samir, consegui resolver o meu problema, dessa forma eu não consegui mesmo instanciar, porque era uma interface que estava usando, mais agora eu consegui, obrigado pela dedicação. pode marcar a sua resposta como resolvida kkkk.

Boa, Alisson!