2014-09-03 2 views
0

У меня проблема с загрузкой pdf-файла (он находится в том же компоненте, который загружается). если я указать путь к файлу, как C:/.. работает отлично, но если я пытаюсь передать параметр ruta я получаю: #{fileUploadController.downLoad}: java.lang.NullPointerExceptionf: param из CommandButton не получает параметр

FileUploadController.java

@ManagedBean(name = "fileUploadController") 
@SessionScoped 
public class FileUploadController implements Serializable {  

private static final long serialVersionUID = 1L; 
//tama�o del buffer 
private static final int DEFAULT_BUFFER_SIZE = 10240; 
private byte[] archi= new byte[0]; 
private String nombre; 
public String ruta; 

public byte[] getArchi(){ 
    return archi; 
} 
public void setArchi(byte[] archi){ 
    this.archi= archi; 
} 

// Nombre del Archivo 
public String getNombre() { 
    return nombre; 
} 

public void setNombre(String nombre) { 
    this.nombre= nombre; 
} 

public String getRuta() { 
    return ruta; 
} 

public void setRuta(String ruta) { 
    this.ruta= ruta; 
} 

// ruta fisica del archivo 
public String getRealPath() {  
    FacesContext aFacesContext = FacesContext.getCurrentInstance(); 
    ServletContext context = (ServletContext) aFacesContext.getExternalContext().getContext(); 

    return context.getRealPath("/"); 
} 

/* subida del archivo con sus atributos */ 
public void fileUpload(FileUploadEvent event, String type, String directorio) { 
    try {  
     this.nombre = new java.util.Date().getTime() + type; 
     this.ruta = directorio + getNombre(); 
     this.archi =getFileContents(event.getFile().getInputstream());   

     File file = new File(directorio); 

     // Crea el directorio, incluidos subdirectorios q no existan 

     if(!file.exists())   
      file.mkdirs(); 
    } catch (Exception ex) { 
     System.out.println("Error en la subida " + ex); 
    } 
} 

private byte[] getFileContents(InputStream in) { 
    byte[] bytes = null; 
    try {    
     // write the inputStream to a FileOutputStream    
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     int read = 0; 
     bytes = new byte[1024]; 

     while ((read = in.read(bytes)) != -1) { 
      bos.write(bytes, 0, read); 
     } 
     bytes = bos.toByteArray(); 
     in.close(); 
     in = null; 
     bos.flush(); 
     bos.close(); 
     bos = null;  
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 
    return bytes; 
}  

// Guardar el archivo 
public void guardar() { 
    try { 
     FileOutputStream out; 

     out = new FileOutputStream(ruta); 
     System.out.print("out"+ out); 

     out.write(archi); 
     System.out.print(archi); 
     out.close(); 
    } catch (Exception ex) { 
     System.out.println(ex); 
    } 
} 

/*-------------------- Servlet Descarga Archivos----------------------------------------------*/  
public void downLoad() throws IOException, ServletException{ 
    FacesContext contexto = FacesContext.getCurrentInstance(); 
    this.ruta = getRutaParam(contexto); 

    /*yo*/ 
    HttpServletResponse response = (HttpServletResponse) contexto .getExternalContext().getResponse(); 
    //ruta de los archivos 

    File file = new File(ruta); 

    //Validacion 
    if (!file.exists()) { 
     System.out.println("El archivo no existe!"); 
     response.sendError(HttpServletResponse.SC_NOT_FOUND); 
     return; 
    } 

    response.reset(); 
    response.setBufferSize(DEFAULT_BUFFER_SIZE); 
    response.setContentType("application/pdf"); 
    response.setHeader("Content-Length", String.valueOf(file.length())); 
    response.setHeader("Content-Disposition", "attachment;Nombre del Archivo=\"" + file.getName() + "\""); 

    //inicializo el input y el output 
    BufferedInputStream input = null; 
    BufferedOutputStream output = null; 

    try { 
     input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE);     
     output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE); 

     byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; 
     int length; 
     while ((length = input.read(buffer)) > 0) { 
      output.write(buffer, 0, length); 
     } 
    } finally { 
     //cierro 
     input.close(); 
     output.close(); 
    } 
    contexto.responseComplete(); 
}  

//get value from "f:param" 
public String getRutaParam(FacesContext contexto){ 
    Map<String,String> params = contexto.getExternalContext().getRequestParameterMap(); 
    return params.get("ruta"); 
}  
} 

Page2.xhtml

<h:body> 
    <h2>Acceso Alumno</h2> 
    <h1>Alumnos registrados </h1> 
    <h:form> 
    <h:dataTable id="tabla" value="#{alumno.getListaAlumno()}" var="var" border="1"> 
     <h:column> 
     <f:facet name="header">Id </f:facet> 
     <h:outputText value = "#{var.id}"/> 
     </h:column> 
     <h:column> 
     <f:facet name="header">Nombre y Apellidos </f:facet> 
     <h:outputText value = "#{var.nombreApellidos}"/> 
     </h:column> 
     <h:column> 
     <f:facet name="header">Matricula </f:facet> 
     <h:outputText value = "#{var.matricula}"/> 
     </h:column> 
     <h:column> 
     <f:facet name="header">ProductBox </f:facet> 
     <h:commandButton value="Guardar Archivo" 
         action="#{fileUploadController.downLoad}"> 
      <f:param name="rutaArchivo" value="#{fileUploadController.ruta}" /> 
     </h:commandButton>         
     </h:column>   
    </h:dataTable> 
    </h:form>  
    <h:form> 
    <h:commandButton action="home?faces-redirect=true" 
        value="Home" />   
    </h:form> 
    <!-- Cerrar Sesion --> 
    <a href="logout">Cerrar Sesion</a>  
</h:body> 

Stacktrace

Advertencia: #{fileUploadController.downLoad}: java.lang.NullPointerException 
javax.faces.FacesException: #{fileUploadController.downLoad}: java.lang.NullPointerException 
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) 
at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
at javax.faces.component.UIData.broadcast(UIData.java:1108) 
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) 
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:70) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
at 

org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    ... 61 more 
Caused by: java.lang.NullPointerException 
    at java.io.File.<init>(File.java:277) 
    at proyecto.upload.FileUploadController.downLoad(FileUploadController.java:161) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:278) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) 
    ... 62 more 

Hibernate: 
    select 
     alumno0_.ID as ID0_, 
     alumno0_.NOMBREAPELLIDOS as NOMBREAP2_0_, 
     alumno0_.MATRICULA as MATRICULA0_, 
     alumno0_.PDF as PDF0_ 
    from 
     test.file alumno0_ 
sep 03, 2014 4:10:29 PM com.sun.faces.context.ExceptionHandlerImpl log 
1100: JSF1073: se ha interceptado javax.faces.FacesException durante el procesamiento de INVOKE_APPLICATION 5 : UIComponent-ClientId=, Mensaje=#{fileUploadController.downLoad}: java.lang.NullPointerException 
sep 03, 2014 4:10:29 PM com.sun.faces.context.ExceptionHandlerImpl log 
1100: #{fileUploadController.downLoad}: java.lang.NullPointerException 
javax.faces.FacesException: #{fileUploadController.downLoad}: java.lang.NullPointerException 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:89) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:70) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: javax.faces.FacesException: #{fileUploadController.downLoad}: java.lang.NullPointerException 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIData.broadcast(UIData.java:1108) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    ... 56 more 
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    ... 61 more 
Caused by: java.lang.NullPointerException 
    at java.io.File.<init>(File.java:277) 
at proyecto.upload.FileUploadController.downLoad(FileUploadController.java:161) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.apache.el.parser.AstValue.invoke(AstValue.java:278) 
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273) 
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) 
... 62 more 
+0

Независимо от конкретной проблемы, вы, есть серьезное отверстие безопасности, если вы продолжаете этот путь, разрешив конечным пользователям загружать полностью произвольный файл на серверной файловой системе на стороне сервера. Другие проблемы, которые вы создаете, рассматриваются в этом связанном Q & A: http://stackoverflow.com/questions/14211843/how-to-save-uploaded-file – BalusC

ответ

0

В page2.xhtml, в час: с помощью командной кнопки, я использую п: setPropertyActionListener вместо F: параметры и работает fine.example:

<h:commandButton action="#{fileUploadController.downLoad}" value="Guardar Archivo" > 

       <f:setPropertyActionListener target="#{updownload.ruta}" value="#{var.nombrepdf}" />    

      </h:commandButton> 
Смежные вопросы