반응형
지연된 결과로 인해 Weblogic에서 예외 발생
지연된 결과를 반환하는 엔드포인트가 있는 Java 7 Spring Boot (1.5.4) RESTfull 서비스가 있습니다.
@RequestMapping(value = "/download/{templateName:.+}")
public DeferredResult<ResponseEntity> download(@PathVariable final String templateName,
@RequestParam final Map<String, Object> args) {
final DeferredResult<ResponseEntity> result = new DeferredResult<>();
try {
// it returns a RxJava Observable
final ReportService reportService = getReportService(templateName);
reportService.process(templateName, args).subscribe(new Consumer<byte[]>() {
public void accept(byte[] bytes) throws Exception {
HttpHeaders header = new HttpHeaders();
header.setContentType(new MediaType("application", MEDIA_TYPE_SPREADSHEET));
header.setContentDispositionFormData("attachment", templateName);
InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(bytes));
result.setResult(ResponseEntity.ok().headers(header).body(resource));
}
}, new Consumer<Throwable>() {
public void accept(Throwable e) throws Exception {
result.setResult(ResponseEntity.badRequest().build());
// ...
}
});
} catch (Exception e) {
result.setResult(ResponseEntity.badRequest().build());
// ...
}
return result;
}
Spring Boot 내장 서버를 사용하거나 Tomcat에 배포하는 것이 좋습니다.그러나 이를 Weblogic(v.12.2.1.2.0)에 배포하면 다음 오류가 발생합니다.
java.lang.NullPointerException
at weblogic.servlet.internal.ServletResponseImpl.sendContentError(ServletResponseImpl.java:727)
at weblogic.servlet.internal.ServletResponseImpl.sendError(ServletResponseImpl.java:779)
at weblogic.servlet.internal.ServletResponseImpl.sendError(ServletResponseImpl.java:702)
at org.springframework.boot.web.support.ErrorPageFilter$ErrorWrapperResponse.flushBuffer(ErrorPageFilter.java:315)
at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:305)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
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 javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:105)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:115)
at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:59)
at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:90)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:108)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3683)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3649)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)
at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)
at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2433)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2281)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2259)
at weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1691)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1651)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270)
at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)
at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)
at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)
at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:406)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)
서비스에서 파일을 다운로드할 수 있지만 항상 이 오류가 발생합니다.동기식으로 작업하면 문제가 해결되지만 비동기식이어야 합니다.무엇이 이러한 오류를 유발할 수 있는지 및/또는 오류를 방지할 수 있는 방법을 알고 있습니까?
DeferredResult
필요.AsyncContext
servlet 3.0의, 그래서 당신의web.xml
및 WebLogic 설명서를 사용하여 WebLogic에서 응용 프로그램에 대해 Servlet 3.0을 활성화할 수 있도록 모든 작업을 올바르게 수행할 수 있습니다.
언급URL : https://stackoverflow.com/questions/45461825/deferredresult-causes-an-exception-in-weblogic
반응형
'programing' 카테고리의 다른 글
Python의 산점도 및 색상 매핑 (0) | 2023.07.27 |
---|---|
Angular 2에서 한 구성 요소에서 다른 구성 요소로 객체를 전달하는 방법은 무엇입니까? (0) | 2023.07.27 |
AWS: 구성 프로파일(MyName)을 찾을 수 없습니다. (0) | 2023.07.22 |
기관.스프링 골조웹.클라이언트HttpClientErrorException: 400 잘못된 요청 (0) | 2023.07.22 |
사용자에게 Oracle의 추가 스키마에 대한 액세스 권한을 부여하는 올바른 방법 (0) | 2023.07.22 |