【问题标题】:Spring Integration MessageBuilder getSequenceDetails class java.lang.String cannot be cast to class java.util.ListSpring Integration MessageBuilder getSequenceDetails 类 java.lang.String 不能强制转换为类 java.util.List
【发布时间】:2021-10-15 13:01:36
【问题描述】:

我在我的 Spring Boot 项目中使用 Spring Integration。

我的 Spring Boot 应用程序出现如下错误:

Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader 'bootstrap')
    at org.springframework.integration.support.MessageBuilder.getSequenceDetails(MessageBuilder.java:206)
    at org.springframework.integration.support.AbstractIntegrationMessageBuilder.popSequenceDetails(AbstractIntegrationMessageBuilder.java:87)
    at org.springframework.integration.support.MessageBuilder.popSequenceDetails(MessageBuilder.java:238)
    at org.springframework.integration.support.MessageBuilder.popSequenceDetails(MessageBuilder.java:49)
    at org.springframework.integration.aggregator.AbstractCorrelatingMessageHandler.completeGroup(AbstractCorrelatingMessageHandler.java:843)
    at org.springframework.integration.aggregator.AbstractCorrelatingMessageHandler.processMessageForGroup(AbstractCorrelatingMessageHandler.java:498)
    at org.springframework.integration.aggregator.AbstractCorrelatingMessageHandler.handleMessageInternal(AbstractCorrelatingMessageHandler.java:471)
    at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:170)
    ... 129 more

我没有在任何地方使用 sequenceDetails 标头,看起来 Spring Integrations 自己放置了它,现在给出了异常。

我调试了一下,发现 sequenceDetails 头是这样的:

sequenceDetails [[67eea8d9-3295-4ea1-b85e-9ef970298986, 0, 0]]

为什么我会遇到这个错误?请告诉我你想从我的项目中看到什么来解决这个问题。

【问题讨论】:

    标签: spring-boot spring-integration


    【解决方案1】:

    看起来您在该聚合器之前进行了一些序列化,因此IntegrationMessageHeaderAccessor.SEQUENCE_DETAILS 标头的List<List<Object>> 值以某种方式转换为字符串。可能只是通过简单的toString()

    首先,您不能通过上游拆分器上的applySequence=false 填充此类标头信息。

    其次,您可以在聚合器级别禁用弹出序列详细信息。 查看其各自的属性:

    /**
     * Perform a
     * {@link org.springframework.integration.support.MessageBuilder#popSequenceDetails()}
     * for output message or not. Default to true. This option removes the sequence
     * information added by the nearest upstream component with {@code applySequence=true}
     * (for example splitter).
     * @param popSequence the boolean flag to use.
     * @since 5.1
     */
    public void setPopSequence(boolean popSequence) {
    

    或者您可以通过中间的一些标头丰富器将该字符串从字符串转换回List<List<Object>>

    看到这样的标题被转换为字符串真的很不寻常。我真的很好奇这在您的用例中是如何发生的。如果我们想更多地了解您的场景,也许我们可能会在框架级别上进行一些自动化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多