Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring contentType从AMQP转到STOMP消息时遇到问题_Spring_Spring Integration_Spring Amqp_Spring Websocket - Fatal编程技术网

Spring contentType从AMQP转到STOMP消息时遇到问题

Spring contentType从AMQP转到STOMP消息时遇到问题,spring,spring-integration,spring-amqp,spring-websocket,Spring,Spring Integration,Spring Amqp,Spring Websocket,以下是我的(总结) 当消息通过、通过SimpleMessageListenerContainer和my''传入时,有效负载是一个字节[],contentType标头设置为application/octet stream 然后,我的convertMessage函数从负载中创建一条带有一些STOMP头的消息,并将其返回给sendMessage通道,STOMPSubtocolHandler将接管该通道。当它尝试将头转换为stomp消息时,即抛出异常java.lang.String无法转换为org.sp

以下是我的(总结)

当消息通过
、通过
SimpleMessageListenerContainer
和my''传入时,有效负载是一个字节[],contentType标头设置为application/octet stream

然后,我的convertMessage函数从负载中创建一条带有一些STOMP头的消息,并将其返回给sendMessage通道,STOMPSubtocolHandler将接管该通道。当它尝试将头转换为stomp消息时,即抛出异常java.lang.String无法转换为org.springframework.util.MimeType

这是堆栈跟踪

Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to org.springframework.util.MimeType
    at org.springframework.messaging.support.MessageHeaderAccessor.getContentType(MessageHeaderAccessor.java:457)
    at org.springframework.messaging.simp.stomp.StompHeaderAccessor.updateStompHeadersFromSimpMessageHeaders(StompHeaderAccessor.java:169)
    at org.springframework.messaging.simp.stomp.StompHeaderAccessor.<init>(StompHeaderAccessor.java:127)
    at org.springframework.messaging.simp.stomp.StompHeaderAccessor.wrap(StompHeaderAccessor.java:478)
    at org.springframework.web.socket.messaging.StompSubProtocolHandler.getStompHeaderAccessor(StompSubProtocolHandler.java:402)
    at org.springframework.web.socket.messaging.StompSubProtocolHandler.handleMessageToClient(StompSubProtocolHandler.java:329)
    at org.springframework.integration.websocket.outbound.WebSocketOutboundMessageHandler.handleMessageInternal(WebSocketOutboundMessageHandler.java:151)
    at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:78)
原因:java.lang.ClassCastException:java.lang.String无法强制转换为org.springframework.util.MimeType
位于org.springframework.messaging.support.MessageHeaderAccessor.getContentType(MessageHeaderAccessor.java:457)
位于org.springframework.messaging.simp.stomp.StompHeaderAccessor.updateStompHeadersFromSimpMessageHeaders(StompHeaderAccessor.java:169)
位于org.springframework.messaging.simp.stomp.StompHeaderAccessor(StompHeaderAccessor.java:127)
位于org.springframework.messaging.simp.stomp.StompHeaderAccessor.wrap(StompHeaderAccessor.java:478)
位于org.springframework.web.socket.messaging.stompsubtocolhandler.getStompHeaderAccessor(stompsubtocolhandler.java:402)
位于org.springframework.web.socket.messaging.stompsubtocolhandler.handleMessageToClient(stompsubtocolhandler.java:329)
位于org.springframework.integration.websocket.outboundMessageHandler.handleMessageInternal(WebSocketOutboundMessageHandler.java:151)
位于org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:78)
我觉得我没有添加我需要的标题,或者我需要使用一个消息转换器。。。或者也许我只是在一起做得不好

我需要对消息做什么来为StompSubtocolHandler准备它

我是否通过将
SimpleMessageListenerContainer一起使用来正确处理来自AMQP的消息?(我需要容器随着订阅量的增加动态添加更多队列)

但任务很好

当它准备好的时候,你介意把它作为一个样本分享给社区吗? 作为此项目的请求:

由于StackTrace指出
内容类型
字符串
,因此您可以在
subscriptionHandler
中重写它:

AmqpMessageHeaderAccessor amqpMessageHeaderAccessor = AmqpMessageHeaderAccessor.wrap(message);
....
.setHeader(MessageHeaders.CONTENT_TYPE, amqpMessageHeaderAccessor.getContentType())
更新


顺便说一句,我们最近修复了
contentType
歧义:。使用最新的SF
4.1.5
,您不再需要关心
contentType
转换。它是在框架中自动完成的。

太棒了,工作得非常好。我可能无法在GitHub上共享该项目,尽管我真的很想。我写这篇文章的合同,我不相信我可以分享。不过我会调查的。
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to org.springframework.util.MimeType
    at org.springframework.messaging.support.MessageHeaderAccessor.getContentType(MessageHeaderAccessor.java:457)
    at org.springframework.messaging.simp.stomp.StompHeaderAccessor.updateStompHeadersFromSimpMessageHeaders(StompHeaderAccessor.java:169)
    at org.springframework.messaging.simp.stomp.StompHeaderAccessor.<init>(StompHeaderAccessor.java:127)
    at org.springframework.messaging.simp.stomp.StompHeaderAccessor.wrap(StompHeaderAccessor.java:478)
    at org.springframework.web.socket.messaging.StompSubProtocolHandler.getStompHeaderAccessor(StompSubProtocolHandler.java:402)
    at org.springframework.web.socket.messaging.StompSubProtocolHandler.handleMessageToClient(StompSubProtocolHandler.java:329)
    at org.springframework.integration.websocket.outbound.WebSocketOutboundMessageHandler.handleMessageInternal(WebSocketOutboundMessageHandler.java:151)
    at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:78)
AmqpMessageHeaderAccessor amqpMessageHeaderAccessor = AmqpMessageHeaderAccessor.wrap(message);
....
.setHeader(MessageHeaders.CONTENT_TYPE, amqpMessageHeaderAccessor.getContentType())