apache / apache/incubator-seata

feign client used by multiple dubbo services,throw NPE

Open
#1,381 2 comments 0 reactions 0 assignees View on GitHub
RPC: Dubbo
Dominant language
Java
Stars
26k
Forks
8.8k
Avg merge
1d 8h
Merged PRs (30d)
4

Description

- [√ ] I have searched the [issues](https://github.com/seata/seata/issues) of this repository and believe that this is not a duplicate.

### Ⅰ. Issue Description

feign client used by multiple dubbo services,throw NPE

### Ⅱ. Describe what happened

same question in dubbo

[issue 3990](https://github.com/apache/dubbo/issues/3990)
[pr 4197](https://github.com/apache/dubbo/pull/4197)

when i use pr4197 fix dubbo`s bug,seata throw NPE like this

![image](https://user-images.githubusercontent.com/7148259/62272310-66c2fb00-b46d-11e9-9fbb-d905fc83dc01.png)

```
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.thctay.web.rpc.UserAuthCardProxy': FactoryBean threw exception on object creation; nested exception is java.lang.RuntimeException: java.lang.NullPointerException
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:178)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1644)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1174)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:257)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:251)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1322)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1288)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1098)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1062)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:581)
... 156 common frames omitted
Caused by: java.lang.RuntimeException: java.lang.NullPointerException
at io.seata.spring.annotation.GlobalTransactionScanner.wrapIfNecessary(GlobalTransactionScanner.java:245)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.getEarlyBeanReference(AbstractAutoProxyCreator.java:243)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getEarlyBeanReference(AbstractAutowireCapableBeanFactory.java:900)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.lambda$doCreateBean$1(AbstractAutowireCapableBeanFactory.java:566)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:184)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:164)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:246)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:239)
at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:196)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:133)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:400)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:406)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:354)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:886)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
at org.springframework.cloud.context.named.NamedContextFactory.createContext(NamedContextFactory.java:117)
at org.springframework.cloud.context.named.NamedContextFactory.getContext(NamedContextFactory.java:85)
at org.springframework.cloud.context.named.NamedContextFactory.getInstance(NamedContextFactory.java:126)
at org.springframework.cloud.openfeign.FeignClientFactoryBean.get(FeignClientFactoryBean.java:205)
at org.springframework.cloud.openfeign.FeignClientFactoryBean.feign(FeignClientFactoryBean.java:84)
at org.springframework.cloud.openfeign.FeignClientFactoryBean.getTarget(FeignClientFactoryBean.java:241)
at org.springframework.cloud.openfeign.FeignClientFactoryBean.getObject(FeignClientFactoryBean.java:232)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:171)
... 167 common frames omitted
Caused by: java.lang.NullPointerException: null
at io.seata.rm.tcc.remoting.parser.DefaultRemotingParser.parserRemotingServiceInfo(DefaultRemotingParser.java:170)
at io.seata.spring.util.TCCBeanParserUtils.parserRemotingServiceInfo(TCCBeanParserUtils.java:143)
at io.seata.spring.util.TCCBeanParserUtils.isTccAutoProxy(TCCBeanParserUtils.java:44)
at io.seata.spring.annotation.GlobalTransactionScanner.wrapIfNecessary(GlobalTransactionScanner.java:212)
... 190 common frames omitted
```

### Ⅲ. Describe what you expected to happen

startup success

### Ⅳ. How to reproduce it (as minimally and precisely as possible)

1. create a feignClient
2. two or more dubbo service inject this feignClient
3. add seata-all pom
4. startup

### Ⅴ. Anything else we need to know?

### Ⅵ. Environment:

- JDK version : 1.8
- Dubbo version : 2.7.1
- Seata version:0.7.1
- OS : windows

Contributor guide

Open the contributing guide

Research direction

Start with the stack-trace entry points in io.seata.spring.annotation.GlobalTransactionScanner.wrapIfNecessary, io.seata.spring.util.TCCBeanParserUtils, and io.seata.rm.tcc.remoting.parser.DefaultRemotingParser.parserRemotingServiceInfo. Reproduce the startup with one Feign client injected into two or more Dubbo services using the listed JDK, Dubbo, and Seata versions. Done means the application starts successfully without this NullPointerException.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, spring
Domain
backend, distributed-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.