class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader 'bootstrap')

huangapple 未分类评论81阅读模式
英文:

class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader 'bootstrap')

问题

  1. Trying to use ReplyingKafkaTemplate to return the response from the service, but keep getting an error `java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader 'bootstrap')`
  2. # Listener
  3. @KafkaListener(id = ProductTopicConstants.GET_PRODUCTS, topics = ProductTopicConstants.GET_PRODUCTS, splitIterables = false)
  4. @SendTo
  5. public List<Product> GetProducts(@Payload(required = false) String payload) {
  6. List<Product> products = _productRepository.findAll();
  7. return new ArrayList<>(products);
  8. }
  9. # KafkaConfiguration
  10. @Configuration
  11. public class KafkaConfiguration {
  12. @Bean
  13. public ReplyingKafkaTemplate<String, String, List<Product>> replyer(
  14. ProducerFactory<String, String> pf,
  15. ConcurrentKafkaListenerContainerFactory<String, List<Product>> containerFactory
  16. ) {
  17. containerFactory.setReplyTemplate(kafkaTemplate(pf));
  18. ConcurrentMessageListenerContainer<String, List<Product>> container = replyContainer(containerFactory);
  19. ReplyingKafkaTemplate<String, String, List<Product>> replyer = new ReplyingKafkaTemplate<>(pf, container);
  20. return replyer;
  21. }
  22. @Bean
  23. public ConcurrentMessageListenerContainer<String, List<Product>> replyContainer(
  24. ConcurrentKafkaListenerContainerFactory<String, List<Product>> containerFactory
  25. ) {
  26. ConcurrentMessageListenerContainer<String, List<Product>> container =
  27. containerFactory.createContainer(ProductTopicConstants.GET_PRODUCTS_CONTAINER);
  28. container.getContainerProperties().setGroupId(ProductTopicConstants.GET_PRODUCTS_CONTAINER);
  29. container.setBatchErrorHandler(new BatchLoggingErrorHandler());
  30. return container;
  31. }
  32. @Bean
  33. public KafkaTemplate<String, String> kafkaTemplate(ProducerFactory<String, String> pf) {
  34. return new KafkaTemplate<>(pf);
  35. }
  36. @Bean
  37. public NewTopic GetProducts() {
  38. return TopicBuilder.name(ProductTopicConstants.GET_PRODUCTS).partitions(1).replicas(1).build();
  39. }
  40. @Bean
  41. public NewTopic GetProductsContainer() {
  42. return TopicBuilder.name(ProductTopicConstants.GET_PRODUCTS_CONTAINER).partitions(1).replicas(1).build();
  43. }
  44. }
  45. # service
  46. @Service
  47. public class ProductProducer implements IProductProducer {
  48. private final ReplyingKafkaTemplate<String, String, List<Product>> _replyTemplate;
  49. private static final Logger LOG = LoggerFactory.getLogger(ProductProducer.class);
  50. public ProductProducer(ReplyingKafkaTemplate<String, String, List<Product>> replyTemplate) {
  51. this._replyTemplate = replyTemplate;
  52. }
  53. @Override
  54. public List<ProductViewModel> GetProducts() throws InterruptedException, ExecutionException, TimeoutException {
  55. RequestReplyFuture<String, String, List<Product>> future =
  56. this._replyTemplate.sendAndReceive(new ProducerRecord<>(ProductTopicConstants.GET_PRODUCTS, 0, null, null));
  57. LOG.info(future.getSendFuture().get(10, TimeUnit.SECONDS).getRecordMetadata().toString());
  58. List<Product> value = future.get(10, TimeUnit.SECONDS).value(); --> Getting an error over here
  59. return List.of(new ProductViewModel("", "", 0, ""));
  60. }
  61. }
  62. # Error
  63. Getting an error over here `List<Product> value = future.get(10, TimeUnit.SECONDS).value();`
  64. java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader 'bootstrap')
  65. at fete.bird.fetebirdproduct.service.producer.ProductProducer.GetProducts(ProductProducer.java:40) ~[main/:na]
  66. ...

(代码部分已经翻译完毕,以下内容不再包含翻译。)

英文:

Trying to use ReplyingKafkaTemplate to return the response from the service, but keep getting an error java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader &#39;bootstrap&#39;)

Listener

  1. @KafkaListener(id = ProductTopicConstants.GET_PRODUCTS, topics = ProductTopicConstants.GET_PRODUCTS,splitIterables = false)
  2. @SendTo
  3. public List&lt;Product&gt; GetProducts(@Payload(required = false) String payload) {
  4. List&lt;Product&gt; products = _productRepository.findAll();
  5. return new ArrayList&lt;&gt;(products);
  6. }

KafkaConfiguration

  1. @Configuration
  2. public class KafkaConfiguration {
  3. @Bean
  4. public ReplyingKafkaTemplate&lt;String, String, List&lt;Product&gt;&gt; replyer(ProducerFactory&lt;String, String&gt; pf,
  5. ConcurrentKafkaListenerContainerFactory&lt;String, List&lt;Product&gt;&gt; containerFactory) {
  6. containerFactory.setReplyTemplate(kafkaTemplate(pf));
  7. ConcurrentMessageListenerContainer&lt;String, List&lt;Product&gt;&gt; container = replyContainer(containerFactory);
  8. ReplyingKafkaTemplate&lt;String, String, List&lt;Product&gt;&gt; replyer = new ReplyingKafkaTemplate&lt;&gt;(pf, container);
  9. return replyer;
  10. }
  11. @Bean
  12. public ConcurrentMessageListenerContainer&lt;String, List&lt;Product&gt;&gt; replyContainer(
  13. ConcurrentKafkaListenerContainerFactory&lt;String, List&lt;Product&gt;&gt; containerFactory) {
  14. ConcurrentMessageListenerContainer&lt;String, List&lt;Product&gt;&gt; container =
  15. containerFactory.createContainer(ProductTopicConstants.GET_PRODUCTS_CONTAINER);
  16. container.getContainerProperties().setGroupId(ProductTopicConstants.GET_PRODUCTS_CONTAINER);
  17. container.setBatchErrorHandler(new BatchLoggingErrorHandler());
  18. return container;
  19. }
  20. @Bean
  21. public KafkaTemplate&lt;String, String&gt; kafkaTemplate(ProducerFactory&lt;String, String&gt; pf) {
  22. return new KafkaTemplate&lt;&gt;(pf);
  23. }
  24. @Bean
  25. public NewTopic GetProducts() {
  26. return TopicBuilder.name(ProductTopicConstants.GET_PRODUCTS).partitions(1).replicas(1).build();
  27. }
  28. @Bean
  29. public NewTopic GetProductsContainer() {
  30. return TopicBuilder.name(ProductTopicConstants.GET_PRODUCTS_CONTAINER).partitions(1).replicas(1).build();
  31. }
  32. }

service

  1. @Service
  2. public class ProductProducer implements IProductProducer{
  3. private final ReplyingKafkaTemplate&lt;String, String, List&lt;Product&gt;&gt; _replyTemplate;
  4. private static final Logger LOG = LoggerFactory.getLogger(ProductProducer.class);
  5. public ProductProducer(ReplyingKafkaTemplate&lt;String, String, List&lt;Product&gt;&gt; replyTemplate) {
  6. this._replyTemplate = replyTemplate;
  7. }
  8. @Override
  9. public List&lt;ProductViewModel&gt; GetProducts() throws InterruptedException, ExecutionException, TimeoutException {
  10. RequestReplyFuture&lt;String, String, List&lt;Product&gt;&gt; future =
  11. this._replyTemplate.sendAndReceive(new ProducerRecord&lt;&gt;(ProductTopicConstants.GET_PRODUCTS, 0, null, null));
  12. LOG.info(future.getSendFuture().get(10, TimeUnit.SECONDS).getRecordMetadata().toString());
  13. List&lt;Product&gt; value = future.get(10, TimeUnit.SECONDS).value(); --&gt; Getting an error over here
  14. return List.of(new ProductViewModel(&quot;&quot;,&quot;&quot;,0,&quot;&quot;));
  15. }
  16. }

Error

Getting an error over here List&lt;Product&gt; value = future.get(10, TimeUnit.SECONDS).value();

  1. java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader &#39;bootstrap&#39;)
  2. at fete.bird.fetebirdproduct.service.producer.ProductProducer.GetProducts(ProductProducer.java:40) ~[main/:na]
  3. at fete.bird.fetebirdproduct.api.v1.controller.ProductController.Products(ProductController.java:43) ~[main/:na]
  4. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
  5. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
  6. at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
  7. at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
  8. at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  9. at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  10. at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  11. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  12. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  13. at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  14. at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  15. at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  16. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  17. at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  18. at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  19. at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  20. at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  21. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  22. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  23. at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.36.jar:9.0.36]
  24. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  25. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  26. at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  27. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  28. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  29. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  30. at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  31. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  32. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  33. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  34. at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93) ~[spring-boot-actuator-2.3.1.RELEASE.jar:2.3.1.RELEASE]
  35. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  36. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  37. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  38. at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  39. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]
  40. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  41. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  42. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  43. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  44. at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  45. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  46. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  47. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  48. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  49. at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  50. at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  51. at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  52. at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  53. at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  54. at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[na:na]
  55. at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[na:na]
  56. at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.36.jar:9.0.36]
  57. at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]

Configuration

  1. spring:
  2. profiles:
  3. active: dev
  4. kafka:
  5. bootstrapAddress: localhost:9092
  6. producer:
  7. key-serializer: org.springframework.kafka.support.serializer.JsonSerializer
  8. value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
  9. consumer:
  10. key-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
  11. value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
  12. auto-offset-reset: earliest
  13. properties:
  14. spring:
  15. json:
  16. trusted:
  17. packages: *

答案1

得分: 1

  1. 我在包名前缺少 &#39;*&#39;
  2. spring:
  3. profiles:
  4. active: dev
  5. kafka:
  6. bootstrapAddress: localhost:9092
  7. producer:
  8. key-serializer: org.springframework.kafka.support.serializer.JsonSerializer
  9. value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
  10. consumer:
  11. key-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
  12. value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
  13. auto-offset-reset: earliest
  14. properties:
  15. spring:
  16. json:
  17. trusted:
  18. packages: &#39;*&#39;
英文:

I was missing '*' at the package

  1. spring:
  2. profiles:
  3. active: dev
  4. kafka:
  5. bootstrapAddress: localhost:9092
  6. producer:
  7. key-serializer: org.springframework.kafka.support.serializer.JsonSerializer
  8. value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
  9. consumer:
  10. key-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
  11. value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
  12. auto-offset-reset: earliest
  13. properties:
  14. spring:
  15. json:
  16. trusted:
  17. packages: &#39;*&#39;

huangapple
  • 本文由 发表于 2020年7月25日 23:46:22
  • 转载请务必保留本文链接:https://java.coder-hub.com/63090326.html
匿名

发表评论

匿名网友
#

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定