我有用于从 Kafka 主题读取 avro 消息的 spring 程序。当消息读取发生异常时:
org.springframework.messaging.converter.MessageConversionException:无法从 [com.mycompany.myapp.domain.avro.GreetingRecord] 转换为 [com.mycompany.myapp.domain.avro.GreetingRecord]
在调试中,我看到 ClassUtils.isAssignable 为同一类返回 false:
Class <?> targetClass = parameter.getParameterType();
Class <?> payloadClass = payload.getClass();
if (ClassUtils.isAssignable(targetClass, payloadClass)) { // return false for same class
this.validate(message, parameter, payload);
return payload;
} else {
if (this.converter instanceof SmartMessageConverter) {
SmartMessageConverter smartConverter = (SmartMessageConverter)this.converter;
payload = smartConverter.fromMessage(message, targetClass, parameter);
} else {
payload = this.converter.fromMessage(message, targetClass);
}
}
Run Code Online (Sandbox Code Playgroud)
我发现 targetClass 和 payloadClass 中的类加载器不同(RestartClassLoader和Launcher$AppClassLoader)
目标(有效载荷)类定义:
/**
* Autogenerated by …Run Code Online (Sandbox Code Playgroud)