Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

服务提供方提供文件下载功能,当Part返回null时,会抛出空指针异常 #2400

Closed
SenixCoder opened this issue Jun 1, 2021 · 3 comments

Comments

@SenixCoder
Copy link

异常堆栈如下

java.lang.NullPointerException: 
	at org.apache.servicecomb.foundation.vertx.http.DownloadUtils.prepareDownloadHeader(DownloadUtils.java:45) 
	at org.apache.servicecomb.foundation.vertx.http.StandardHttpServletResponseEx.sendPart(StandardHttpServletResponseEx.java:107) 
	at org.apache.servicecomb.common.rest.filter.inner.ServerRestArgsFilter.beforeSendResponseAsync(ServerRestArgsFilter.java:78) 
	at org.apache.servicecomb.common.rest.filter.HttpServerFilterBeforeSendResponseExecutor.safeInvoke(HttpServerFilterBeforeSendResponseExecutor.java:52) 
	at org.apache.servicecomb.common.rest.filter.HttpServerFilterBeforeSendResponseExecutor.doRun(HttpServerFilterBeforeSendResponseExecutor.java:82) 
	at org.apache.servicecomb.common.rest.filter.HttpServerFilterBeforeSendResponseExecutor.run(HttpServerFilterBeforeSendResponseExecutor.java:44) 
	at org.apache.servicecomb.common.rest.AbstractRestInvocation.executeHttpServerFilters(AbstractRestInvocation.java:283) 
	at org.apache.servicecomb.common.rest.AbstractRestInvocation.sendResponse(AbstractRestInvocation.java:277) 
	at org.apache.servicecomb.common.rest.AbstractRestInvocation.sendResponseQuietly(AbstractRestInvocation.java:262) 
	at org.apache.servicecomb.common.rest.AbstractRestInvocation.lambda$doInvoke$2(AbstractRestInvocation.java:245) 
	at com.huawei.mateinfo.sdk.service.handler.ProviderMetricsHandler.lambda$onResponse$0(ProviderMetricsHandler.java:52) 
	at org.apache.servicecomb.tracing.zipkin.ZipkinTracingHandler.lambda$onResponse$0(ZipkinTracingHandler.java:74) 
	at org.apache.servicecomb.core.handler.impl.ProducerOperationHandler.syncInvoke(ProducerOperationHandler.java:108) 
	at org.apache.servicecomb.core.handler.impl.ProducerOperationHandler.invoke(ProducerOperationHandler.java:60) 
	at org.apache.servicecomb.core.handler.impl.ProducerOperationHandler.handle(ProducerOperationHandler.java:51) 
	at org.apache.servicecomb.core.Invocation.next(Invocation.java:307) 
	at org.apache.servicecomb.tracing.zipkin.ZipkinTracingHandler.handle(ZipkinTracingHandler.java:52) 
	at org.apache.servicecomb.tracing.zipkin.ZipkinProviderTracingHandler.handle(ZipkinProviderTracingHandler.java:24) 
	at org.apache.servicecomb.core.Invocation.next(Invocation.java:307) 
	at com.huawei.mateinfo.sdk.service.handler.ProviderMetricsHandler.handle(ProviderMetricsHandler.java:41) 
	at org.apache.servicecomb.core.Invocation.next(Invocation.java:307) 
	at org.apache.servicecomb.common.rest.AbstractRestInvocation.doInvoke(AbstractRestInvocation.java:245) 
	at org.apache.servicecomb.common.rest.AbstractRestInvocation.invoke(AbstractRestInvocation.java:219) 
	at org.apache.servicecomb.common.rest.AbstractRestInvocation.runOnExecutor(AbstractRestInvocation.java:203) 
	at org.apache.servicecomb.common.rest.AbstractRestInvocation.lambda$scheduleInvocation$0(AbstractRestInvocation.java:162) 
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_292]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_292]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_292]

报错代码为

    if (responseEx.getHeader(HttpHeaders.CONTENT_TYPE.toString()) == null) {
      responseEx.setHeader(HttpHeaders.CONTENT_TYPE.toString(), part.getContentType());
    }

此处没有对part进行判空;或者应当变为其他处理

@liubao68
Copy link
Contributor

liubao68 commented Jun 4, 2021

你能提供一个使用例子,演示出现part为空的场景吗?

@SenixCoder
Copy link
Author

   public Part exportItemsByProjectAndModule(String projectName, String moduleName, ExportConfig exportConfig) {
        List<DataPackBo> dpList = dataPackService.getByProjectNameAndModuleName(projectName, moduleName);
        if (CollectionUtils.isEmpty(dpList)) {
            return null;
        }

        File zipFile = dataPackService.export(dpList, projectName);
        return new FilePart(null, zipFile).setDeleteAfterFinished(true).setSubmittedFileName(zipFile.getName());
    }

@liubao68
Copy link
Contributor

liubao68 commented Sep 6, 2021

fixed in #2527 , try 2.5.1

@liubao68 liubao68 closed this as completed Sep 6, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants