You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat环境Jackson版本冲突致RuntimeException及Shading依赖问题求助

问题:Tomcat环境Jackson版本冲突引发NoClassDefFoundError,Shading后插件无法引用重命名类

背景

我开发的Java插件运行在厂商基于Tomcat的应用服务器上,厂商代码不可修改,仅能通过其框架扩展接口实现自定义功能。厂商将Java版本从11升级至17后,插件出现功能回归问题。

我们已确保Maven pom.xml指定Java 17为目标版本,且所有fasterxml.jackson依赖版本统一为2.13.2:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.13.2</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.13.2</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.2</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-jaxb-annotations</artifactId>
    <version>2.13.2</version>
</dependency>

问题排查与报错信息

排查发现厂商Tomcat的lib目录存在2.9.8版本的Jackson旧库,该版本无TokenStreamFactory类,但无法修改厂商代码。当前报错信息如下:

ERROR: RuntimeException encountered attempting to send message.
java.lang.RuntimeException: org.apache.kafka.common.KafkaException: Failed to construct kafka producerException in thread "ordermessageadapter" java.lang.RuntimeException: org.apache.kafka.common.KafkaException: Failed to construct kafka producer
        at com.vendor.xyz.conn.kafka.KafkaTopicSenderFactory.createAdapter(KafkaTopicSenderFactory.java:39)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at com.vendor.plugin.APIInvocationHandler.invoke(APIInvocationHandler.java:62)
        at jdk.proxy4/jdk.proxy4.$Proxy166.createAdapter(Unknown Source)
        at com.vendor.messageadapter.EndPoint$MySenderBufferThread.run(EndPoint.java:134)
Caused by: org.apache.kafka.common.KafkaException: Failed to construct kafka producer
        at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:442)
        at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:292)
        at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:319)
        at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:304)
        at com.xyz.connection.manager.KafkaBuilder.producerCreation(KafkaBuilder.java:56)
        at com.xyz.connection.manager.KafkaBuilder.connect(KafkaBuilder.java:52)
        at com.vendor.xyz.conn.kafka.KafkaTopicSenderAdapter.<init>(KafkaTopicSenderAdapter.java:49)
        at com.vendor.xyz.conn.kafka.KafkaTopicSenderFactory.createAdapter(KafkaTopicSenderFactory.java:36)
        ... 7 more
Caused by: java.lang.NoClassDefFoundError: Could not initialize class io.confluent.kafka.schemaregistry.client.rest.RestService
        at io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.<init>(CachedSchemaRegistryClient.java:157)
        at io.confluent.kafka.serializers.AbstractKafkaSchemaSerDe.configureClientProperties(AbstractKafkaSchemaSerDe.java:83)
        at io.confluent.kafka.serializers.AbstractKafkaAvroSerializer.configure(AbstractKafkaAvroSerializer.java:56)
        at io.confluent.kafka.serializers.KafkaAvroSerializer.configure(KafkaAvroSerializer.java:50)
        at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:378)
        ... 14 more
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.VerifyError: Bad return type
Exception Details:
  Location:
    com/fasterxml/jackson/databind/cfg/MapperBuilder.streamFactory()Lcom/fasterxml/jackson/core/TokenStreamFactory; @7: areturn
  Reason:
    Type 'com/fasterxml/jackson/core/JsonFactory' (current frame, stack[0]) is not assignable to 'com/fasterxml/jackson/core/TokenStreamFactory' (from method signature)
  Current Frame:
    bci: @7
    flags: { }
    locals: { 'com/fasterxml/jackson/databind/cfg/MapperBuilder' }
    stack: { 'com/fasterxml/jackson/core/JsonFactory' }
  Bytecode:
    0000000: 2ab4 0002 b600 08b0
 [in thread "MyCode"]
        at com.fasterxml.jackson.databind.json.JsonMapper.builder(JsonMapper.java:114)
        at io.confluent.kafka.schemaregistry.utils.JacksonMapper.<clinit>(JacksonMapper.java:27)
        at io.confluent.kafka.schemaregistry.client.rest.RestService.<clinit>(RestService.java:155)
        ... 19 more     

尝试方案与待解决问题

推测是旧版本Jackson干扰所致,尝试通过Shading将Jackson 2.13.2打包至common.jar,并将包路径重命名为my.shaded.com.fasterxml.jackson。但依赖该包的XYZ插件无法引用重命名后的类(如my.shaded.com.fasterxml.jackson.annotation.JsonIgnoreProperties),寻求解决该依赖引用问题的方法。

内容的提问来源于stack exchange,提问作者firstblud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:59:58