javastruts2struts2-interceptorsstruts-actioninterceptorstack

Struts has detected an unhandled exception: java.lang.NullPointerException


Hi I have this problem whit my code, i tried upload file to server and keep on database.

The first version was the same code without fileupload, and all worked good.

struts.xml

<action name="Crear" class="actions.AccionAnadirCliente">
    <interceptor-ref name="fileUpload">
        <param name="maximunSize">1048576</param>
        <param name="allowedTypes">image/png,image/gif,image/jpg,image/jpeg</param>
    </interceptor-ref>  
    <result name="input">/paginaBienvenida.jsp</result>
    <result name="success">/nuevoCliente.jsp</result>
</action>

now, the execute on accionAnadirCliente

public String execute() throws Exception {
    String filePath = "C:\\Users\\alumno\\Desktop\\DWES_JAVA\\imagenes";
    //crea un fichero
    File fileToCreate = new File(filePath, this.fileFileName);
    String rutaCompleta=filePath+ this.fileFileName;
    //volcado de datos.
    FileUtils.copyFile(this.file, fileToCreate);


    Cliente cliente = new Cliente();
    System.out.println(getNombre());

    cliente.setNombre(getNombre()); 
    cliente.setEdad(getEdad());
    cliente.setEmail(getEmail());
    cliente.setTelefono(getTelefono()); 
    cliente.setRuta(rutaCompleta);

    InterfaceClienteDAO clienteDAO = FactoriaDAO.getAlumnoDAO("MySQL");

    clienteDAO.insertarCliente(cliente);    

    return SUCCESS;

}

bean Cliente

private String nombre;
private String email;
private String telefono;
private int edad;
private String ruta;

and getters and setters.

ClienteDAO

public void insertarCliente(Cliente c){

    try {
        db.abrirConexion();
        String query = "insert into cliente values('" + c.getNombre() + "','"
                + c.getEmail() + "','" + c.getTelefono() + "',"
                + c.getEdad() + ","+c.getRuta()+" )";
        db.ejecutarUpdate(query);
        db.commit();
        db.cerrarConexion();

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
}

nuevoCliente.jsp only contains information.

Now the exception.

Struts Problem Report

Struts has detected an unhandled exception:

Messages:   
Stacktraces

java.lang.NullPointerException
    java.io.File.(Unknown Source)
    actions.AccionAnadirCliente.execute(AccionAnadirCliente.java:38)
    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)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:325)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    java.lang.Thread.run(Unknown Source)

thanks, Ivan.

edit: the exception line is this

File fileToCreate = new File(filePath, this.fileFileName);

Solution

  • You are including ONLY the File Upload Interceptor, while you need to include an entire stack along with it (the default one, or a custom one created by you):

    <action name="Crear" class="actions.AccionAnadirCliente">
    
        <interceptor-ref name="defaultStack">
            <param name="fileUpload.maximumSize">1048576</param>
            <param name="fileUpload.allowedTypes">
                image/png,image/gif,image/jpg,image/jpeg
            </param>
        </interceptor-ref>  
    
        <result name="input">/paginaBienvenida.jsp</result>
        <result name="success">/nuevoCliente.jsp</result>
    </action>
    

    There was also a typo in your first param, it's maximum not maximun.