工厂方法引发异常;嵌套异常为java.lang.VerifyError:返回类型错误 [英] Factory method 'kafkaTemplate' threw exception; nested exception is java.lang.VerifyError: Bad return type

查看:24
本文介绍了工厂方法引发异常;嵌套异常为java.lang.VerifyError:返回类型错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我正在将一个微服务从Spring框架迁移到Spring Boot 2.3.10.RELEASE。但当我尝试创建集成测试并启动它时,出现了一个隐晦的错误:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.kafka.core.KafkaTemplate]: Factory method 'kafkaTemplate' threw exception; nested exception is 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:
    0x0000000: 2ab4 0002 b600 08b0                    

    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:652)
    ... 333 common frames omitted
Caused by: 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:
    0x0000000: 2ab4 0002 b600 08b0                    

    at com.fasterxml.jackson.databind.json.JsonMapper.builder(JsonMapper.java:114)
    at org.springframework.kafka.support.JacksonUtils.enhancedObjectMapper(JacksonUtils.java:58)
    at org.springframework.kafka.support.JacksonUtils.enhancedObjectMapper(JacksonUtils.java:47)
    at org.springframework.kafka.support.DefaultKafkaHeaderMapper.<init>(DefaultKafkaHeaderMapper.java:112)
    at org.springframework.kafka.support.converter.MessagingMessageConverter.<init>(MessagingMessageConverter.java:67)
    at org.springframework.kafka.core.KafkaTemplate.<init>(KafkaTemplate.java:101)
    at org.springframework.kafka.core.KafkaTemplate.<init>(KafkaTemplate.java:150)
    at org.springframework.kafka.core.KafkaTemplate.<init>(KafkaTemplate.java:122)
    at com.gdn.x.cart.v2.rest.web.config.kafka.KafkaConfig.kafkaTemplate(KafkaConfig.java:88)
    at com.gdn.x.cart.v2.rest.web.config.kafka.KafkaConfig$$EnhancerBySpringCGLIB$$62380140.CGLIB$kafkaTemplate$0(<generated>)
    at com.gdn.x.cart.v2.rest.web.config.kafka.KafkaConfig$$EnhancerBySpringCGLIB$$62380140$$FastClassBySpringCGLIB$$f4054673.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
    at com.gdn.x.cart.v2.rest.web.config.kafka.KafkaConfig$$EnhancerBySpringCGLIB$$62380140.kafkaTemplate(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
    ... 334 common frames omitted

这是我的KafkaConfiguration:

    @EnableKafka
    @Configuration
    public class KafkaConfig {
      // Some Properties & Consumer Configurations
    
      @Bean
      public Map<String, Object> producerConfigs() {
        Map<String, Object> props = new HashMap<>();
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaBrokerList);
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        props.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, KafkaProducerInterceptor.class.getName());
        return props;
      }
    
      @Bean
      public ProducerFactory<String, String> producerFactory() {
        return new DefaultKafkaProducerFactory<>(producerConfigs());
      }
    
      @Bean
      public KafkaTemplate<String, String> kafkaTemplate() {
        return new KafkaTemplate<>(producerFactory());
      }
    }
服务POM父版本是从2.3.10.RELEASE版本的Spring-Boot-starter-Parent继承而来的。Jackson库版本也是从该父POM继承的,我检查了所有Jackson版本都使用2.11.4,没有冲突的依赖关系。当我运行应用程序时,KafkaTemplate会正常实例化。它只在我开始集成测试时抛出该错误。我错过了什么?有什么方法可以调试它吗?

以下是我尝试但失败的方法:

  • 清理.m2目录
  • 在父POM中显式声明Jackson-data ind版本
  • 将JUnit4更改为JUnit5
  • 将maven插件升级到最新
  • 将Spring Boot版本降低1

推荐答案

我在Cloud Foundry环境中遇到了这个问题。似乎与https://github.com/cloudfoundry/java-buildpack-auto-reconfiguration/issues/69有关。禁用自动重新配置已修复该问题

这篇关于工厂方法引发异常;嵌套异常为java.lang.VerifyError:返回类型错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆