【问题标题】:Spring Integration: exception on receiving messageSpring Integration:接收消息时出现异常
【发布时间】:2013-10-14 12:38:22
【问题描述】:

在我们的 Spring Integration 应用程序中,当接收到消息时,会引发异常并且转换器不会接收到消息。 我认为这可能是由于消息的内容,因为字符串类型的消息被正确处理。

以下是该消息类型的转换器的签名:

@Transformer
public String transform(Message inboundMessage){

也试过

@Transformer
public String transform(Byte[] inboundMessage){

但在这两种情况下,都会引发以下异常:

2013-10-14 07:21:33,547 D|DefaultMessageListenerContainer         |Received message of type [class com.solacesystems.jms.message.SolTextMessage] from consumer [Cached JMS MessageConsumer: com.solacesystems.jms.SolQueueReceiver@13b5500] of session [Cached JMS Session: com.solacesystems.jms.SolSession@1fa0f19]
2013-10-14 07:21:33,579 W|DefaultMessageListenerContainer         |Execution of JMS message listener failed, and no ErrorHandler has been set.
java.lang.RuntimeException: UTF-8 format error
    at com.solacesystems.common.util.UTF8Util.getStringFromUTF8(UTF8Util.java:272) ~[sol-common-6.0.0.146.jar:na]
    at com.solacesystems.jms.message.SolTextMessage.load(SolTextMessage.java:82) ~[sol-jms-6.0.0.146.jar:na]
    at com.solacesystems.jms.message.SolTextMessage.getText(SolTextMessage.java:69) ~[sol-jms-6.0.0.146.jar:na]
    at org.springframework.jms.support.converter.SimpleMessageConverter.extractStringFromMessage(SimpleMessageConverter.java:177) ~[spring-jms-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    at org.springframework.jms.support.converter.SimpleMessageConverter.fromMessage(SimpleMessageConverter.java:94) ~[spring-jms-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    at org.springframework.integration.jms.ChannelPublishingJmsMessageListener.onMessage(ChannelPublishingJmsMessageListener.java:266) ~[spring-integration-jms-2.2.0.RC2.jar:na]
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:537) ~[spring-jms-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:497) ~[spring-jms-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:468) ~[spring-jms-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:326) [spring-jms-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:264) [spring-jms-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1071) [spring-jms-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1063) [spring-jms-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:960) [spring-jms-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    at java.lang.Thread.run(Unknown Source) [na:1.6.0_06]
2013-10-14 07:21:33,579 D|SolMessageConsumer                      |Entering receive(), timeout: 1000
2013-10-14 07:21:34,391 D|SolMessageConsumer                      |Leaving receive()

非常感谢任何帮助

【问题讨论】:

    标签: spring-integration spring-jms


    【解决方案1】:

    它没有到达变压器那么远。当 Spring 调用 getText 时,问题出在 Solace 库中...

    java.lang.RuntimeException: UTF-8 format error
    at com.solacesystems.common.util.UTF8Util.getStringFromUTF8(UTF8Util.java:272) ~[sol-common-6.0.0.146.jar:na]
    at com.solacesystems.jms.message.SolTextMessage.load(SolTextMessage.java:82) ~[sol-jms-6.0.0.146.jar:na]
    at com.solacesystems.jms.message.SolTextMessage.getText(SolTextMessage.java:69) ~[sol-jms-6.0.0.146.jar:na]
    at org.springframework.jms.support.converter.SimpleMessageConverter.extractStringFromMessage(SimpleMessageConverter.java:177) ~[spring-jms-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    ...
    

    看起来库认为数据是 UTF-8 格式,但实际上不是。

    【讨论】:

    • 加里,谢谢。 Spring 是否有可能调用 getText() 并因此 Solace 将消息视为文本,即使它不是?有没有办法告诉 Spring Integration 这不是文本消息而是二进制消息?
    • 否;如果是TextMessage,消息转换器只会调用getText();它显然一条短信(SolTextMessage);这是某种错误的字符编码。看起来产生消息的任何东西都会导致问题。二进制数据应存储在BytesMessage 而不是TextMessage。 Spring 尝试转换的消息类型由代理控制,而不是 Spring。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    相关资源
    最近更新 更多