Skip to content

Add native-image support for spring-rabbit #1467

Closed
@mhalbritter

Description

@mhalbritter

When running the rabbitmq sample from spring-native in the sb-3.0.x branch (don't let the name fool you, it's NOT using spring native, but uses the AOT support from Spring Framework 6 and Spring Boot 3), the native image fails with this exception:

com.oracle.svm.core.jdk.UnsupportedFeatureError: Proxy class defined by interfaces [interface org.springframework.amqp.rabbit.connection.ChannelProxy] not found. Generating proxy classes at runtime is not supported. Proxy classes need to be defined at image build time by specifying the list of interfaces that they implement. To define proxy classes use -H:DynamicProxyConfigurationFiles=<comma-separated-config-files> and -H:DynamicProxyConfigurationResources=<comma-separated-config-resources> options.
        at com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:89) ~[na:na]
        at com.oracle.svm.reflect.proxy.DynamicProxySupport.getProxyClass(DynamicProxySupport.java:158) ~[na:na]
        at java.lang.reflect.Proxy.getProxyConstructor(Proxy.java:48) ~[rabbitmq:na]
        at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:1037) ~[rabbitmq:na]
        at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.getCachedChannelProxy(CachingConnectionFactory.java:662) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.getChannel(CachingConnectionFactory.java:540) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$ChannelCachingConnectionProxy.createChannel(CachingConnectionFactory.java:1418) ~[na:na]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2179) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2146) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2126) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.core.RabbitAdmin.initialize(RabbitAdmin.java:691) ~[na:na]
        at org.springframework.amqp.rabbit.core.RabbitAdmin.lambda$afterPropertiesSet$10(RabbitAdmin.java:619) ~[na:na]
        at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:329) ~[na:na]
        at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:209) ~[na:na]
        at org.springframework.amqp.rabbit.core.RabbitAdmin.lambda$afterPropertiesSet$11(RabbitAdmin.java:618) ~[na:na]
        at org.springframework.amqp.rabbit.connection.CompositeConnectionListener.lambda$onCreate$0(CompositeConnectionListener.java:38) ~[na:na]
        at java.util.concurrent.CopyOnWriteArrayList.forEach(CopyOnWriteArrayList.java:807) ~[rabbitmq:na]
        at org.springframework.amqp.rabbit.connection.CompositeConnectionListener.onCreate(CompositeConnectionListener.java:38) ~[na:na]
        at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:731) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.createConnection(ConnectionFactoryUtils.java:252) ~[na:na]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2173) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2146) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2126) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.useDirectReplyTo(RabbitTemplate.java:1015) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.evaluateFastReplyTo(RabbitTemplate.java:987) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.doSendAndReceive(RabbitTemplate.java:1841) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.convertSendAndReceiveRaw(RabbitTemplate.java:1815) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.convertSendAndReceive(RabbitTemplate.java:1681) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.convertSendAndReceive(RabbitTemplate.java:1633) ~[rabbitmq:3.0.0-M3]
        at org.springframework.amqp.rabbit.core.RabbitTemplate.convertSendAndReceive(RabbitTemplate.java:1625) ~[rabbitmq:3.0.0-M3]
        at com.example.rabbitmq.RabbitApplication.lambda$runner$0(RabbitApplication.java:35) ~[rabbitmq:0.0.1-SNAPSHOT]
        at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:757) ~[rabbitmq:3.0.0-SNAPSHOT]
        at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:747) ~[rabbitmq:3.0.0-SNAPSHOT]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) ~[rabbitmq:3.0.0-SNAPSHOT]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[rabbitmq:3.0.0-SNAPSHOT]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290) ~[rabbitmq:3.0.0-SNAPSHOT]
        at com.example.rabbitmq.RabbitApplication.main(RabbitApplication.java:16) ~[rabbitmq:0.0.1-SNAPSHOT]

I guess there are proxy hints missing.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions