2017-10-22 1 views
0

애플리케이션을 Grails 2.4.4에서 3.3.1로 업그레이드 중이며 zip 파일을 다운로드하는 데 문제가 있습니다. response.outputStream에 쓸 때 Null 포인터 예외가 발생하는 것 같습니다. 여기 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 

내가지고있어 오류 발생 : 다음은 Grails를 2.4.4에서 일을 내 코드의

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 파일에서 발생했습니다. 나는 (외부 톰캣 7에서 실행하기 위해 전쟁을 구축하기위한 준비) 내 종속 섹션 전에이 줄을했지만, 현재 Grails를 통해 내 응용 프로그램을 실행하고 실행 - 응용 프로그램 :

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

이 줄을 제거한 후, 내 원래 코드가 작동했습니다.

관련 문제