我试图在kafka中放入带json的音频文件, 她是代码 producer Code
在消费者中,我试图获取此文件Consumer code 错误:
org.springframework.messaging.MessagingException:调用com.sofrecom.service.VoiceCampaignCreator #process [1 args]时抛出异常;嵌套异常是java.lang.NullPointerException 在org.springframework.cloud.stream.binding.StreamListenerMessageHandler.handleRequestMessage(StreamListenerMessageHandler.java:56) 在org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109) 在org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127) at org.springframework.cloud.stream.binding.DispatchingStreamListenerMessageHandler $ ConditionalStreamListenerHandler.handleMessage(DispatchingStreamListenerMessageHandler.java:122) 在org.springframework.cloud.stream.binding.DispatchingStreamListenerMessageHandler.handleRequestMessage(DispatchingStreamListenerMessageHandler.java:75) 在org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109) 在org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127) 在org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116) 在org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:148) 在org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:121) 在org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:89) 在org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:423) 在org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:373) 在org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) 在org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) 在org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105) 在org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:292) 在org.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput(AbstractMessageProducingHandler.java:212) 在org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputs(AbstractMessageProducingHandler.java:129) 在org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:115) 在org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127) 在org.springframework.integration.channel.FixedSubscriberChannel.send(FixedSubscriberChannel.java:70) 在org.springframework.integration.channel.FixedSubscriberChannel.send(FixedSubscriberChannel.java:64) 在org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) 在org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) 在org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105) 在org.springframework.integration.endpoint.MessageProducerSupport.sendMessage(MessageProducerSupport.java:171) 在org.springframework.integration.kafka.inbound.KafkaMessageDrivenChannelAdapter.access $ 000(KafkaMessageDrivenChannelAdapter.java:54) 在org.springframework.integration.kafka.inbound.KafkaMessageDrivenChannelAdapter $ IntegrationRecordMessageListener.onMessage(KafkaMessageDrivenChannelAdapter.java:288) 在org.springframework.integration.kafka.inbound.KafkaMessageDrivenChannelAdapter $ IntegrationRecordMessageListener.onMessage(KafkaMessageDrivenChannelAdapter.java:279) 在org.springframework.kafka.listener.adapter.RetryingAcknowledgingMessageListenerAdapter $ 1.doWithRetry(RetryingAcknowledgingMessageListenerAdapter.java:77) 在org.springframework.kafka.listener.adapter.RetryingAcknowledgingMessageListenerAdapter $ 1.doWithRetry(RetryingAcknowledgingMessageListenerAdapter.java:72) 在org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:286) 在org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:179) 在org.springframework.kafka.listener.adapter.RetryingAcknowledgingMessageListenerAdapter.onMessage(RetryingAcknowledgingMessageListenerAdapter.java:72) 在org.springframework.kafka.listener.adapter.RetryingAcknowledgingMessageListenerAdapter.onMessage(RetryingAcknowledgingMessageListenerAdapter.java:39) at org.springframework.kafka.listener.KafkaMessageListenerContainer $ ListenerConsumer.invokeRecordListener(KafkaMessageListenerContainer.java:771) 在org.springframework.kafka.listener.KafkaMessageListenerContainer $ ListenerConsumer.invokeListener(KafkaMessageListenerContainer.java:715) 在org.springframework.kafka.listener.KafkaMessageListenerContainer $ ListenerConsumer.access $ 2600(KafkaMessageListenerContainer.java:231) 在org.springframework.kafka.listener.KafkaMessageListenerContainer $ ListenerConsumer $ ListenerInvoker.run(KafkaMessageListenerContainer.java:1004) at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) 在java.lang.Thread.run(Thread.java:745) 引起:java.lang.NullPointerException:null at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.getSize(DiskFileItem.java:267) 在org.apache.catalina.core.ApplicationPart.getSize(ApplicationPart.java:110) at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest $ StandardMultipartFile.getSize(StandardMultipartHttpServletRequest.java:287) 在com.sofrecom.service.VoiceCampaignCreator.process(VoiceCampaignCreator.java:44) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) 在org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:180) 在org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:112) 在org.springframework.cloud.stream.binding.StreamListenerMessageHandler.handleRequestMessage(StreamListenerMessageHandler.java:48) ...省略了42个常见帧
请帮助!
答案 0 :(得分:2)
问题似乎很明显......
引起:java.lang.NullPointerException:在org.apache.catalina.core.ApplicationPart.getSize的org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.getSize(DiskFileItem.java:267)中为null (ApplicationPart.java:110)org.springframework.web.multipart.support.StandardMultipartHttpServletRequest $ StandardMultipartFile.getSize(StandardMultipartHttpServletRequest.java:287)at com.sofrecom.service.VoiceCampaignCreator.process(VoiceCampaignCreator.java:44)
看起来您正在尝试在Web环境之外解码Web请求。在将数据发送到Kafka之前,您需要解码多部分。
修改强>
在DiskFileItem
...
private transient DeferredFileOutputStream dfos;
... dfos
是暂时的 - 因此它不会被序列化(显然 - 因为它是一个流)。