当前位置: 首页 > 知识库问答 >
问题:

Spring Integr-放置在标头中的对象返回为String而不是对象类型

陈欣荣
2023-03-14

我已经在Java DSL中编写了一个集成流

我正在丰富消息的标题,使其包含一个原子整数:

.enrichHeaders(t -> t.headerFunction(pollTime,message -> new AtomicInteger()))

如果我在同一个流中的后续handle方法上放置断点,我可以看到标头,它是一个字符串,而不是原子整数。

因此,如果我尝试在另一个流中检索它,例如,我会得到一个非法参数异常:

message.getHeaders().get(pollTime,AtomicInteger.class).getAndAdd(delay);


Caused by: java.lang.IllegalArgumentException: Incorrect type specified for header 'pollTime'. Expected [class java.util.concurrent.atomic.AtomicInteger] but actual type is [class java.lang.String]

如果我在Kotlin DSL中做同样的事情,一切都很好:

       enrichHeaders {
            headerFunction<Any>(pollCount) {
                AtomicInteger()
            }
        }

有人知道我做错了什么吗?

共有1个答案

戴建义
2023-03-14

我创建了一个独立项目来复制错误,并将其作为预期的原子整数添加到标题中。

然后我调试了我们的主应用程序,结果发现有一个OpenTracingChannelInterceptor,它将所有头文件重新写入字符串。

这个图书馆是罪魁祸首:

io.opentracing.contrib:opentracing-spring-消息传递:0.0.5这是io.opentracing.contrib的传递依赖:opentracing-spring-cloud d-starter-jaeger

看起来添加这个库只会破坏Spring集成。

修复方法是排除跟踪自动配置:

@SpringBootApplication(排除={OpenTracingChannelInterceptorAutoConfiguration.class})

更新:

opentracing库现在维护时间更长了,因此长期的解决方案是迁移到另一个跟踪库,希望它不会有相同类型的问题。

看见

https://www.cncf.io/blog/2022/01/31/cncf-archives-the-opentracing-project/

 类似资料:
  • 问题内容: 我有一个元素定义为 我想读取此元素中的文本,即“ ABC”,但这样做是:var client = page.clientRowName.getText(); 返回一个对象而不是一个字符串。还有什么其他方法可以获取元素的文本 问题答案: 返回一个promise,您需要 解决 它: 或者,如果您只想声明文本,请为您解决承诺: 承诺和“控制流”文档页面应清除所有内容。

  • 我有一个sql select查询,它只从数据库中检索单个列(组)(即),我在对象数组列表中接收上面列表的结果 , 理想情况下,结果应该包含一个对象数组列表,但是当我检查时,结果的第0个索引包含String object而不是object数组。 但是,如果我使用多个列(假设在查询的select子句中有2个列),我可以看到结果的第0个索引作为对象数组,即 即使查询的select子句中只提到一列,如何获

  • 问题内容: 可能重复: JavaScript:检查对象是否为数组? 为什么将对象数组视为对象而不是数组?例如: 问题答案: javascript的怪异行为和规范之一就是Array is 。 您可以通过以下几种方法检查变量是否为数组: 但是最可靠的方法是: 由于您使用jQuery标记了问题,因此可以使用jQuery函数:

  • 我是WS和CXF的初学者。我想使用AsyncHandler创建异步客户端,但无法获得响应消息。 我有使用 CXF wsdl2java 生成的 Web 服务类和接口,如下所示: - 客户类别 和处理程序 调用< code>response.get()时,会出现< code > Java . lang . classcastexception:Java . lang . object无法转换为MyMe

  • 问题内容: 我有一个$ .ajax()请求,其dataType设置为“ json”。服务器返回的JSON具有正确的mime类型“ application / json”。但是,我的jqXHR对象中的responseText始终是字符串。我究竟做错了什么?这是应该如何工作的吗? 这是我拨打电话的方式: 所以我必须做一个才能得到一个实际的对象。这似乎没有必要,因为$ .ajax()应该根据文档自动转换