工厂方法引发异常;嵌套异常为java.lang.VerifyError:返回类型错误 [英] Factory method 'kafkaTemplate' threw exception; nested exception is java.lang.VerifyError: Bad return type
本文介绍了工厂方法引发异常;嵌套异常为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屋!
查看全文