问题描述
当前,我们正在将应用程序从Camel 2.x迁移到Camel 3.x,并且遇到一个问题,即JacksonDataFormat
在默认情况下不再从应用程序上下文使用ObjectMapper
。相反,您需要提供属性camel.dataformat.json-jackson.auto-discover-object-mapper=true
才能使此功能正常工作。我不明白为什么true
模块的默认值不等于camel-jackson-starter
,这对我来说似乎不合逻辑。也许有人知道背后的原因?
解决方法
Apache Camel正在根据您的ObjectMapper
定义来修改JacksonDataFormat
bean属性。如果看似不相关的DataFormat
定义正在更改注册表中的单例ObjectMapper
bean,这可能会造成混淆,您可能已为应用程序的不同部分进行了配置。对于某些开发人员来说,这可能是意外的,因此已决定在启动过程中快速执行故障操作。
如果您使用多个JacksonDataFormat
定义,请不要设置camel.dataformat.json-jackson.auto-discover-object-mapper=true
。您将看到一些奇怪的行为,这将非常难以调试。
请参见CAMEL-14101:
json-jackson数据格式的当前默认行为是尝试在注册表中查找ObjectMapper实例,如果找不到则创建一个新实例。如果找到一个,则数据格式实例会根据其本地属性对其进行自定义,但是由于同一ObjectMapper实例可以在不同的json-jackson数据格式之间共享,因此可能导致不一致或不可预测的行为。