2017-10-22 8 views
0

アプリケーションをGrails 2.4.4から3.3.1にアップグレードしていて、zipファイルのダウンロードに問題があります。 response.outputStreamに書き込むときに、Null Pointer Exceptionが発生しているようです。 ここでのGrails 2.4.4で働いていた私のコードだ:Grails 3.3.1でzipファイルをダウンロードする際の問題

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 

ここで私が取得していますエラーです:

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) 

答えて

0

を私は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 
    } 
の成功次のメソッドを持っていたが、
+0

ありがとうございます。あなたのコードで同じエラーが発生しましたが、別のアプローチをとり、helloworldアプリケーションからダウンロードを試みました。あなたのコードと私の元のコードの両方がそこで働いた。だから私の特定のアプリケーション/セットアップで何かファンキーなことが起こっている必要があります。 – mcam11

0

問題は私のbuild.gradleファイルにありました。私は(外部のTomcat 7の下で実行するために戦争を構築するための準備中)私の依存関係のセクションの前にこのラインを持っていましたが、Grailsの実行アプリを介して、現在、私のアプリを実行しています:

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

この行を削除した後、私の元コードが働いた。

関連する問題