Skip to content

[Bug]After upgrading from dubbo3.beta2 to dubbo3, native image runs error #14720

@imgoby

Description

@imgoby

Steps to reproduce this issue

Step 1 run my demo appliction under dubbo3-beta2 is OK
(1)jdk 17.dubbo3-beta2
reproducer:
https://github.com/imgoby/dubbo3beta2-native-demo
<dubbo.version>3.3.0-beta.2</dubbo.version>
comment: I have added org.apache.dubbo.common.utils.ClassLoaderResourceLoader to my project source to resolve a URL issue under native-image

(2) build:
mvn clean package native:compile -P native

(3)run

cd spring-cloud-alibaba-consul-dubbo-consumer/target
./spring-cloud-alibaba-consul-dubbo-consumer

Everything is OK.

Step 2 run my demo appliction under dubbo3 is failed

(1)jdk 17.dubbo3
reproducer:
https://github.com/imgoby/dubbo3-native-demo
<dubbo.version>3.3.0</dubbo.version>
comment:

(2) build:
mvn clean package native:compile -P native

(3)run

cd spring-cloud-alibaba-consul-dubbo-consumer/target
./spring-cloud-alibaba-consul-dubbo-consumer
com.oracle.svm.core.jdk.UnsupportedFeatureError: Proxy class defined by interfaces [interface com.yuhoutian.demo.api.DemoService, interface org.apache.dubbo.rpc.service.EchoService, interface org.apache.dubbo.rpc.service.Destroyable] 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 org.graalvm.nativeimage.builder/com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:96)
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.reflect.proxy.DynamicProxySupport.getProxyClass(DynamicProxySupport.java:171)
	at java.base@17.0.12/java.lang.reflect.Proxy.getProxyConstructor(Proxy.java:47)
	at java.base@17.0.12/java.lang.reflect.Proxy.newProxyInstance(Proxy.java:1037)
	at org.apache.dubbo.config.spring.ReferenceBean.generateFromJdk(ReferenceBean.java:422)
	at org.apache.dubbo.config.spring.ReferenceBean.createLazyProxy(ReferenceBean.java:369)
	at org.apache.dubbo.config.spring.ReferenceBean.getObject(ReferenceBean.java:213)
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:148)
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:90)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1823)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1273)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:259)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
	at org.apache.dubbo.config.spring6.beans.factory.aot.ReferencedFieldValueResolver.resolveValue(ReferencedFieldValueResolver.java:191)
	at org.apache.dubbo.config.spring6.beans.factory.aot.ReferencedFieldValueResolver.resolveAndSet(ReferencedFieldValueResolver.java:169)
	at com.yuhoutian.demo.consumer.Task__DubboReference.apply(Task__DubboReference.java:14)
	at org.springframework.beans.factory.support.InstanceSupplier$1.get(InstanceSupplier.java:83)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:947)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1214)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1158)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:942)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:310)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293)
	at com.yuhoutian.demo.consumer.ConsumerApplication.main(ConsumerApplication.java:29)

2024-09-25T10:39:04.354+08:00  WARN 22243 --- [           main] w.s.c.ServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'task': Unsatisfied dependency expressed through field 'demoService': Error creating bean with name 'demoService': FactoryBean threw exception on object creation
2024-09-25T10:39:04.355+08:00  INFO 22243 --- [           main] c.a.c.d.s.DubboGenericServiceFactory     : The Dubbo GenericService ReferenceBeans are destroying...
2024-09-25T10:39:04.355+08:00  INFO 22243 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2024-09-25T10:39:04.356+08:00 ERROR 22243 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'task': Unsatisfied dependency expressed through field 'demoService': Error creating bean with name 'demoService': FactoryBean threw exception on object creation
	at org.apache.dubbo.config.spring6.beans.factory.aot.ReferencedFieldValueResolver.resolveValue(ReferencedFieldValueResolver.java:198)
	at org.apache.dubbo.config.spring6.beans.factory.aot.ReferencedFieldValueResolver.resolveAndSet(ReferencedFieldValueResolver.java:169)
	at com.yuhoutian.demo.consumer.Task__DubboReference.apply(Task__DubboReference.java:14)
	at org.springframework.beans.factory.support.InstanceSupplier$1.get(InstanceSupplier.java:83)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:947)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1214)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1158)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:942)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:310)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293)
	at com.yuhoutian.demo.consumer.ConsumerApplication.main(ConsumerApplication.java:29)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'demoService': FactoryBean threw exception on object creation
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:154)
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:90)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1823)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1273)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:259)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
	at org.apache.dubbo.config.spring6.beans.factory.aot.ReferencedFieldValueResolver.resolveValue(ReferencedFieldValueResolver.java:191)
	... 22 common frames omitted
Caused by: com.oracle.svm.core.jdk.UnsupportedFeatureError: Proxy class defined by interfaces [interface com.yuhoutian.demo.api.DemoService, interface org.apache.dubbo.rpc.service.EchoService, interface org.apache.dubbo.rpc.service.Destroyable] 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 org.graalvm.nativeimage.builder/com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:96)
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.reflect.proxy.DynamicProxySupport.getProxyClass(DynamicProxySupport.java:171)
	at java.base@17.0.12/java.lang.reflect.Proxy.getProxyConstructor(Proxy.java:47)
	at java.base@17.0.12/java.lang.reflect.Proxy.newProxyInstance(Proxy.java:1037)
	at org.apache.dubbo.config.spring.ReferenceBean.generateFromJdk(ReferenceBean.java:422)
	at org.apache.dubbo.config.spring.ReferenceBean.createLazyProxy(ReferenceBean.java:369)
	at org.apache.dubbo.config.spring.ReferenceBean.getObject(ReferenceBean.java:213)
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:148)
	... 28 common frames omitted

I know I should add something to file proxy-config.json
for example:
[interface com.yuhoutian.demo.api.DemoService, interface org.apache.dubbo.rpc.service.EchoService, interface org.apache.dubbo.rpc.service.Destroyable]

But it was not needed under dubbo3-beta2. Why dubbo3 should do that.

I think something is wrong under dubbo3.
Please Check it and resolve it.

@CrazyHZM

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions