Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dubbo.consumer.check配置无效 #7385

Closed
caohenghui opened this issue Mar 16, 2021 · 12 comments
Closed

dubbo.consumer.check配置无效 #7385

caohenghui opened this issue Mar 16, 2021 · 12 comments

Comments

@caohenghui
Copy link

版本:2.7.8

Provider端未启动
部分配置如下:
dubbo.protocol.name=dubbo
dubbo.consumer.check=false
伪代码:
@DubboReference
private AppInfoSpi appInfoSpi;

报错内容:
at org.apache.dubbo.config.spring.util.DubboAnnotationUtils.resolveServiceInterfaceClass(DubboAnnotationUtils.java:95)
at org.apache.dubbo.config.spring.util.DubboAnnotationUtils.resolveInterfaceName(DubboAnnotationUtils.java:78)
at org.apache.dubbo.config.spring.beans.factory.annotation.ServiceBeanNameBuilder.(ServiceBeanNameBuilder.java:65)
at org.apache.dubbo.config.spring.beans.factory.annotation.ServiceBeanNameBuilder.create(ServiceBeanNameBuilder.java:78)
at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.buildReferencedBeanName(ReferenceAnnotationBeanPostProcessor.java:303)
at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.buildInjectedObjectCacheKey(ReferenceAnnotationBeanPostProcessor.java:292)
at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.getInjectedObject(AbstractAnnotationBeanPostProcessor.java:404)
at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor$AnnotatedFieldElement.inject(AbstractAnnotationBeanPostProcessor.java:626)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130)
at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.postProcessPropertyValues(AbstractAnnotationBeanPostProcessor.java:179)

@xiaoheng1
Copy link
Contributor

Can you provide a sample and steps to reproduce ? I read the code, there should be no exception

@caohenghui
Copy link
Author

环境:
dubbo 2.7.8
nacos 1.4.1
spring boot 2.3.1
JDK 1.8
现象:
1,正常启动provider端;
2,启动consumer端报以下异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gatewayController': Injection of @DubboReference dependencies is failed; nested exception is java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Class
at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.postProcessPropertyValues(AbstractAnnotationBeanPostProcessor.java:183)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1427)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:893)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
at com.sodo.oilman.web.gateway.Application.main(Application.java:12)
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Class
at org.apache.dubbo.config.spring.util.DubboAnnotationUtils.resolveServiceInterfaceClass(DubboAnnotationUtils.java:95)
at org.apache.dubbo.config.spring.util.DubboAnnotationUtils.resolveInterfaceName(DubboAnnotationUtils.java:78)
at org.apache.dubbo.config.spring.beans.factory.annotation.ServiceBeanNameBuilder.(ServiceBeanNameBuilder.java:65)
at org.apache.dubbo.config.spring.beans.factory.annotation.ServiceBeanNameBuilder.create(ServiceBeanNameBuilder.java:78)
at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.buildReferencedBeanName(ReferenceAnnotationBeanPostProcessor.java:303)
at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.buildInjectedObjectCacheKey(ReferenceAnnotationBeanPostProcessor.java:292)
at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.getInjectedObject(AbstractAnnotationBeanPostProcessor.java:404)
at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor$AnnotatedFieldElement.inject(AbstractAnnotationBeanPostProcessor.java:626)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130)
at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.postProcessPropertyValues(AbstractAnnotationBeanPostProcessor.java:179)
... 18 common frames omitted

代码异常出现在 DubboAnnotationUtils.resolveServiceInterfaceClass()方法中,大约第95行,泛型类型转换异常,使用了@DubboReference都会出现改问题,导致应用无法启动
并非dubbo.consumer.check=false的问题;

@caohenghui
Copy link
Author

看了attributes的内容
[0]=LinkedMap

interfaceClass=void

@caohenghui
Copy link
Author

dubbo-spring-strart 2.7.8
dubbo:
2.7.8
2.7.7
2.7.6
均有此问题;
2.6.3无此问题

@xiaoheng1
Copy link
Contributor

let me have a look.

@xiaoheng1
Copy link
Contributor

xiaoheng1 commented Mar 17, 2021

Can you provide a completed demo? My local test did not show your problem.

test case:

system info
jdk1.8
system macos
dubbo2.7.7

comsumer 
@Component("annotationAction")
public class AnnotationAction {
    @DubboReference(check = false)
    private HelloService helloService;
}
dubbo.application.name=samples-annotation-consumer
dubbo.registry.address=zookeeper://${zookeeper.address:127.0.0.1}:2181
dubbo.consumer.timeout=1000

pom.xml

<properties>
        <source.level>1.8</source.level>
        <target.level>1.8</target.level>
        <dubbo.version>2.7.7</dubbo.version>
        <spring.version>4.3.16.RELEASE</spring.version>
        <junit.version>4.12</junit.version>
        <maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-framework-bom</artifactId>
                <version>${spring.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-bom</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-zookeeper</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <type>pom</type>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

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

@caohenghui
Copy link
Author

查了一圈,是用了spring-context-support-1.0.11.jar导致的问题

@xiaoheng1
Copy link
Contributor

查了一圈,是用了spring-context-support-1.0.11.jar导致的问题

Great, is it convenient to introduce how this problem arises?

@xiaoheng1
Copy link
Contributor

&READY-TO-CLOSE&

@zrlw
Copy link
Contributor

zrlw commented Jul 13, 2021

dubbo和nacos 1.4.x依赖的alibaba spring-context-support版本有冲突
#8217

@kylixs
Copy link
Member

kylixs commented Jul 27, 2021

#8217 has bean merged into master branch (dubbo 2.7.x), please check it again.

@CrazyHZM
Copy link
Member

CrazyHZM commented Oct 9, 2021

Try it with the latest version, if you still have problems, you can reopen the issues.

@CrazyHZM CrazyHZM closed this as completed Oct 9, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants
@kylixs @AlbumenJ @caohenghui @xiaoheng1 @CrazyHZM @zrlw and others