微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ObjectToJsonTrasnformer with Spring RabbitMq (spring boot 2.5.0) 在 bean 创建时抛出 java.lang.VerifyError: Bad return type

如何解决ObjectToJsonTrasnformer with Spring RabbitMq (spring boot 2.5.0) 在 bean 创建时抛出 java.lang.VerifyError: Bad return type

我有一个通过rabbitmq 进行通信的微服务。 它的pom如下:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

 
  <artifactId>demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.0</version>
    <relativePath/> 
  </parent>

  <dependencies>

    <dependency>
      <groupId>org.springframework.integration</groupId>
      <artifactId>spring-integration-amqp</artifactId>
    </dependency>

   
    <dependency>
      <groupId>org.springframework.amqp</groupId>
      <artifactId>spring-rabbit</artifactId>
    </dependency>


    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
   
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
      <optional>true</optional>
    </dependency>
   
   <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.amqp</groupId>
      <artifactId>spring-rabbit-test</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.integration</groupId>
      <artifactId>spring-integration-ip</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.12.0</version>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>
   
   <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
    </dependency>
   
   <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
    </dependency>

  </dependencies>


  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>

RabbitMqConfiguration 在@Configuration 类中配置:

  @Bean
  public ConnectionFactory connectionFactory() {
    com.rabbitmq.client.ConnectionFactory connectionFactoryClient = new com.rabbitmq.client.ConnectionFactory();
    connectionFactoryClient.setUsername(username);
    connectionFactoryClient.setPassword(password);
    connectionFactoryClient.setHost(hostname);
    connectionFactoryClient.setVirtualHost(vhost);
    return new ThreadChannelConnectionFactory(connectionFactoryClient);}

  @Bean
  @Primary
  public RabbitTemplate rabbitTemplateAdapter(ConnectionFactory connectionFactory) {
    RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
    rabbitTemplate.setMandatory(true);
    return rabbitTemplate;
  }

我还在 AppConfiguration 类中定义了 ObjectToJsonTransformer 和 JsonToObjectTransformer bean:

  @Bean
  public ObjectToJsonTransformer objectToJsonTransformer() {
    return new ObjectToJsonTransformer();
  }

  @Bean
  public JsonToObjectTransformer jsonToObjectTransformer() {
    return new JsonToObjectTransformer();
  }

我有一个使用 ObjectToJsonTransformer 的 @Component 类:

public class RabbitMessageService {
  private final RabbitTemplate rabbitTemplateAdapter;
  private final ObjectToJsonTransformer objectToJsonTransformer;
  
  public void messageTransforming(Message<?> message) {
     Message<?> jsonMessage = objectToJsonTransformer.transform(message);
    try {...}
}
....}

问题是,当我将其部署到 Cloud Foundry(版本 6.46.0+29d6257f1.2019-07-09)时,出现以下错误

    Application run Failed
           2021-06-14T16:54:21.36+0300 Error creating bean with name 'rabbitMessageService ' defined in file [....]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'objectToJsonTransformer' defined in class path resource [/path to ApplicationConfiguration class]: Bean instantiation via factory method Failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate
[org.springframework.integration.json.ObjectToJsonTransformer]: Factory method 'objectToJsonTransformer' threw exception; nested exception is java.lang.VerifyError: Bad return type
           2021-06-14T16:54:21.36+0300  OUT Exception Details:
           2021-06-14T16:54:21.36+0300  OUT   Location:
           2021-06-14T16:54:21.36+0300  OUT     com/fasterxml/jackson/databind/cfg/MapperBuilder.streamFactory()Lcom/fasterxml/jackson/core/TokenStreamFactory; @7: areturn
           2021-06-14T16:54:21.36+0300  OUT   Reason:
           2021-06-14T16:54:21.36+0300  OUT     Type 'com/fasterxml/jackson/core/JsonFactory' (current frame,stack[0]) is not assignable to 'com/fasterxml/jackson/core/TokenStreamFactory' (from method signature)
           2021-06-14T16:54:21.36+0300  OUT   Current Frame:
           2021-06-14T16:54:21.36+0300  OUT     bci: @7
           2021-06-14T16:54:21.36+0300  OUT     flags: { }
           2021-06-14T16:54:21.36+0300  OUT     locals: { 'com/fasterxml/jackson/databind/cfg/MapperBuilder' }
           2021-06-14T16:54:21.36+0300  OUT     stack: { 'com/fasterxml/jackson/core/JsonFactory' }
           2021-06-14T16:54:21.36+0300  OUT   Bytecode:
           2021-06-14T16:54:21.36+0300  OUT     0x0000000: 2ab4 0002 b600 08b0
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.7.jar:5.3.7]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) ~[spring-beans-5.3.7.jar:5.3.7]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.autowireConstructor(AbstractAutowireCapablebeanfactory.java:1354) ~[spring-beans-5.3.7.jar:5.3.7]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBeanInstance(AbstractAutowireCapablebeanfactory.java:1204) ~[spring-beans-5.3.7.jar:5.3.7]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.doCreateBean(AbstractAutowireCapablebeanfactory.java:564) ~[spring-beans-5.3.7.jar:5.3.7]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBean(AbstractAutowireCapablebeanfactory.java:524) ~[spring-beans-5.3.7.jar:5.3.7]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.beans.factory.support.Abstractbeanfactory.lambda$doGetBean$0(Abstractbeanfactory.java:335) ~[spring-beans-5.3.7.jar:5.3.7]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.7.jar:5.3.7]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:333) ~[spring-beans-5.3.7.jar:5.3.7]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:208) ~[spring-beans-5.3.7.jar:5.3.7]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.beans.factory.support.DefaultListablebeanfactory.preInstantiateSingletons(DefaultListablebeanfactory.java:944) ~[spring-beans-5.3.7.jar:5.3.7]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.context.support.AbstractApplicationContext.finishbeanfactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.7.jar:5.3.7]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.7.jar:5.3.7]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) [spring-boot-2.5.0.jar:2.5.0]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:438) [spring-boot-2.5.0.jar:2.5.0]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.boot.SpringApplication.run(SpringApplication.java:337) [spring-boot-2.5.0.jar:2.5.0]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1336) [spring-boot-2.5.0.jar:2.5.0]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1325) [spring-boot-2.5.0.jar:2.5.0]
           2021-06-14T16:54:21.36+0300  OUT     at pathToFile.ApplicationRun.main(ApplicationRun.java:10) [classes/:0.0.1-SNAPSHOT]
           2021-06-14T16:54:21.36+0300  OUT   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_202]
           2021-06-14T16:54:21.36+0300  OUT     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_202]
           2021-06-14T16:54:21.36+0300  OUT     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_202]
           2021-06-14T16:54:21.36+0300  OUT     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_202]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) [app/:na]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) [app/:na]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) [app/:na]
           2021-06-14T16:54:21.36+0300  OUT     at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) [app/:na]

在 pom.xml 中,我还使用了 roder 中的 spring-boot-starter-data-redis-reactive 依赖项来将有效负载保存在 redis 中。

我认为这可能是依赖项之间的冲突? 我不知道如何绕过这个。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?