2017-10-22 4 views
0

Ich aktualisiere meine Anwendung von Grails 2.4.4 auf 3.3.1 und habe Probleme beim Herunterladen von Zip-Dateien. Ich scheine eine Null-Zeiger-Ausnahme zu erhalten, wenn ich in response.outputStream schreibe. Hier ist mein Code, der in Grails arbeitete 2.4.4:Probleme beim Herunterladen der ZIP-Datei in Grails 3.3.1

File f = new File(fname) 
if (!f.exists()) { 
    flash.message = "Unable to retrieve file ${f.getName()}" 
    redirect(action: "...") 
    return 
} 
response.setContentType("application/octet-stream") 
response.setHeader("Content-disposition", "attachment; filename*=UTF-8''" + f.getName())   
f.withInputStream { response.outputStream << it } 
null 

Hier ist der Fehler Ich erhalte:

ERROR --- [nio-8080-exec-9] o.g.web.errors.GrailsExceptionResolver : NullPointerException occurred when processing request: [GET] /myapp/mycontroller/myaction - 
Stacktrace follows: 

java.lang.reflect.InvocationTargetException: null 
     at org.grails.core.DefaultGrailsControllerClass$ReflectionInvoker.invoke(DefaultGrailsControllerClass.java:211) 
     at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188) 
     at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
     at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
     at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
     at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55) 
     at com.mrhaki.grails.plugin.xframeoptions.web.XFrameOptionsFilter.doFilterInternal(XFrameOptionsFilter.groovy:70) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) 
     at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) 
     at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
     at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) 
     at grails.plugin.springsecurity.web.UpdateRequestContextHolderExceptionTranslationFilter.doFilter(UpdateRequestContextHolderExceptionTranslationFilter.groovy:64) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
     at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.groovy:54) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
     at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:158) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
     at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
     at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
     at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.groovy:64) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
     at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
     at grails.plugin.springsecurity.web.SecurityRequestHolderFilter.doFilter(SecurityRequestHolderFilter.groovy:58) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
     at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) 
     at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) 
     at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77) 
     at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NullPointerException: null 
     at java.beans.Introspector.getPublicDeclaredMethods(Introspector.java:1337) 
     at java.beans.Introspector.getTargetMethodInfo(Introspector.java:1197) 
     at java.beans.Introspector.getBeanInfo(Introspector.java:426) 
     at java.beans.Introspector.getBeanInfo(Introspector.java:173) 

Antwort

0

ich Erfolg die folgende Methode mit Grails 3

def download() { 
    def file = new File(grailsApplication.config.uploadDir + File.separatorChar + params.fileName) 
    response.setContentType("application/octet-stream") 
    response.setHeader("Content-disposition", "attachment;filename=\"${file.name}\"") 
    response.outputStream << file.bytes 
    } 
gehabt haben
+0

Vielen Dank. Ich bekomme den gleichen Fehler mit Ihrem Code, aber dann habe ich einen anderen Ansatz gewählt und versucht, den Download von einer Helloworld-Anwendung zu bekommen. Sowohl dein Code als auch mein ursprünglicher Code funktionierten dort. Es muss also etwas abgefahrenes mit meiner speziellen App/Einrichtung passieren. – mcam11

0

Das Problem war mit meiner Build.gradle-Datei. Ich hatte diese Linie vor meiner Abhängigkeiten Abschnitt (in Vorbereitung für den Bau eines Krieges unter einem externen Tomcat 7 laufen), aber zur Zeit bin mit meiner app über Grails Lauf App:

ext['tomcat.version'] = '7.0.77' 

Nach dem Löschen der Zeile, meine ursprüngliche Code funktioniert.

Verwandte Themen