This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new a2f1650526 [3.0]fix #9863, @Method annotation parma isReturn invalid
(#9865)
a2f1650526 is described below
commit a2f165052661bbdcf7c97b04e7be7cf7ee1ccffd
Author: Wang Chengming <[email protected]>
AuthorDate: Sat May 7 14:00:06 2022 +0800
[3.0]fix #9863, @Method annotation parma isReturn invalid (#9865)
---
.../java/org/apache/dubbo/config/MethodConfig.java | 2 +-
.../config/spring/reference/ReferenceCreator.java | 12 +++-
.../factory/annotation/ReferenceCreatorTest.java | 70 +++++++++++-----------
3 files changed, 46 insertions(+), 38 deletions(-)
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java
b/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java
index 80020e28c6..d8696fadc4 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java
@@ -177,7 +177,7 @@ public class MethodConfig extends AbstractMethodConfig {
}
if (method.arguments() != null && method.arguments().length != 0) {
- List<ArgumentConfig> argumentConfigs = new
ArrayList<ArgumentConfig>(method.arguments().length);
+ List<ArgumentConfig> argumentConfigs = new
ArrayList<>(method.arguments().length);
this.setArguments(argumentConfigs);
for (int i = 0; i < method.arguments().length; i++) {
ArgumentConfig argumentConfig = new
ArgumentConfig(method.arguments()[i]);
diff --git
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/reference/ReferenceCreator.java
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/reference/ReferenceCreator.java
index 4d7493e772..d8b1aed9b3 100644
---
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/reference/ReferenceCreator.java
+++
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/reference/ReferenceCreator.java
@@ -57,8 +57,13 @@ public class ReferenceCreator {
static final String[] IGNORE_FIELD_NAMES = of("application", "module",
"consumer", "monitor", "registry", "interfaceClass");
private static final String ONRETURN = "onreturn";
+
private static final String ONTHROW = "onthrow";
+
private static final String ONINVOKE = "oninvoke";
+
+ private static final String ISRETURN = "isReturn";
+
private static final String METHOD = "Method";
protected final Log logger = LogFactory.getLog(getClass());
@@ -78,7 +83,7 @@ public class ReferenceCreator {
this.attributes = attributes;
this.applicationContext = applicationContext;
this.classLoader = applicationContext.getClassLoader() != null ?
- applicationContext.getClassLoader() :
Thread.currentThread().getContextClassLoader();
+ applicationContext.getClassLoader() :
Thread.currentThread().getContextClassLoader();
moduleModel = DubboBeanUtils.getModuleModel(applicationContext);
Assert.notNull(moduleModel, "ModuleModel not found in Spring
ApplicationContext");
}
@@ -145,7 +150,7 @@ public class ReferenceCreator {
} else if (consumer instanceof ConsumerConfig) {
consumerConfig = (ConsumerConfig) consumer;
} else {
- throw new IllegalArgumentException("Unexpected 'consumer'
attribute value: "+consumer);
+ throw new IllegalArgumentException("Unexpected 'consumer'
attribute value: " + consumer);
}
referenceBean.setConsumer(consumerConfig);
}
@@ -226,7 +231,7 @@ public class ReferenceCreator {
String beanName = strValue.substring(0, index);
String methodName = strValue.substring(index + 1);
methodAttributes.put(callbackName,
applicationContext.getBean(beanName));
- methodAttributes.put(callbackName+METHOD, methodName);
+ methodAttributes.put(callbackName + METHOD, methodName);
} else {
methodAttributes.put(callbackName,
applicationContext.getBean(strValue));
}
@@ -235,6 +240,7 @@ public class ReferenceCreator {
MethodConfig methodConfig = new MethodConfig();
DataBinder mcDataBinder = new DataBinder(methodConfig);
+ methodConfig.setReturn((Boolean) methodAttributes.get(ISRETURN));
mcDataBinder.setConversionService(conversionService);
AnnotationPropertyValuesAdapter propertyValues = new
AnnotationPropertyValuesAdapter(methodAttributes,
applicationContext.getEnvironment());
mcDataBinder.bind(propertyValues);
diff --git
a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceCreatorTest.java
b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceCreatorTest.java
index a5d785f036..0db3ce4ea8 100644
---
a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceCreatorTest.java
+++
b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceCreatorTest.java
@@ -77,35 +77,36 @@ public class ReferenceCreatorTest {
private static final String REGISTRY_CONFIG_ID = "myregistry";
@DubboReference(
- //interfaceClass = HelloService.class,
- version = "1.0.0", group = "TEST_GROUP", url =
"dubbo://localhost:12345",
- client = "client", generic = false, injvm = false,
- check = false, init = false, lazy = true,
- stubevent = true, reconnect = "reconnect", sticky = true,
- proxy = "javassist", stub =
"org.apache.dubbo.config.spring.api.HelloService", cluster = "failover",
- connections = 3, callbacks = 1, onconnect = "onconnect",
ondisconnect = "ondisconnect",
- owner = "owner", layer = "layer", retries = 1,
- loadbalance = "random", async = true, actives = 3,
- sent = true, mock = "mock", validation = "validation",
- timeout = 3, cache = "cache", filter = {"echo", "generic",
"accesslog"},
- listener = {"deprecated"}, parameters = {"n1=v1 ", "n2 = v2 ", "
n3 = v3 "},
- application = "application",
- module = MODULE_CONFIG_ID, consumer = CONSUMER_CONFIG_ID, monitor
= MONITOR_CONFIG_ID, registry = {REGISTRY_CONFIG_ID},
- // @since 2.7.3
- id = "reference",
- // @since 2.7.8
- services = {"service1", "service2", "service3", "service2",
"service1"},
- providedBy = {"service1", "service2", "service3"},
- methods = @Method(name = "sayHello",
- loadbalance = "loadbalance",
- oninvoke = "notifyService.onInvoke",
- onreturn = "notifyService.onReturn",
- onthrow = "notifyService.onThrow",
- timeout = 1000,
- retries = 2,
- parameters = {"a", "1", "b", "2"},
- arguments = @Argument(index = 0, callback = true)
- )
+ //interfaceClass = HelloService.class,
+ version = "1.0.0", group = "TEST_GROUP", url =
"dubbo://localhost:12345",
+ client = "client", generic = false, injvm = false,
+ check = false, init = false, lazy = true,
+ stubevent = true, reconnect = "reconnect", sticky = true,
+ proxy = "javassist", stub =
"org.apache.dubbo.config.spring.api.HelloService", cluster = "failover",
+ connections = 3, callbacks = 1, onconnect = "onconnect", ondisconnect
= "ondisconnect",
+ owner = "owner", layer = "layer", retries = 1,
+ loadbalance = "random", async = true, actives = 3,
+ sent = true, mock = "mock", validation = "validation",
+ timeout = 3, cache = "cache", filter = {"echo", "generic",
"accesslog"},
+ listener = {"deprecated"}, parameters = {"n1=v1 ", "n2 = v2 ", " n3
= v3 "},
+ application = "application",
+ module = MODULE_CONFIG_ID, consumer = CONSUMER_CONFIG_ID, monitor =
MONITOR_CONFIG_ID, registry = {REGISTRY_CONFIG_ID},
+ // @since 2.7.3
+ id = "reference",
+ // @since 2.7.8
+ services = {"service1", "service2", "service3", "service2",
"service1"},
+ providedBy = {"service1", "service2", "service3"},
+ methods = @Method(name = "sayHello",
+ isReturn = false,
+ loadbalance = "loadbalance",
+ oninvoke = "notifyService.onInvoke",
+ onreturn = "notifyService.onReturn",
+ onthrow = "notifyService.onThrow",
+ timeout = 1000,
+ retries = 2,
+ parameters = {"a", "1", "b", "2"},
+ arguments = @Argument(index = 0, callback = true)
+ )
)
private HelloService helloService;
@@ -128,8 +129,8 @@ public class ReferenceCreatorTest {
// filter default value
AnnotationAttributes attributes =
AnnotationUtils.getAnnotationAttributes(reference, true);
ReferenceConfig referenceBean = ReferenceCreator.create(attributes,
context)
- .defaultInterfaceClass(helloServiceField.getType())
- .build();
+ .defaultInterfaceClass(helloServiceField.getType())
+ .build();
Assertions.assertEquals(HelloService.class,
referenceBean.getInterfaceClass());
Assertions.assertEquals("org.apache.dubbo.config.spring.api.HelloService",
referenceBean.getInterface());
Assertions.assertEquals("1.0.0", referenceBean.getVersion());
@@ -182,6 +183,7 @@ public class ReferenceCreatorTest {
Assertions.assertEquals(1, methods.size());
MethodConfig methodConfig = methods.get(0);
Assertions.assertEquals("sayHello", methodConfig.getName());
+ Assertions.assertEquals(false, methodConfig.isReturn());
Assertions.assertEquals(1000, methodConfig.getTimeout());
Assertions.assertEquals(2, methodConfig.getRetries());
Assertions.assertEquals("loadbalance", methodConfig.getLoadbalance());
@@ -205,7 +207,7 @@ public class ReferenceCreatorTest {
Assertions.assertEquals(true, argumentConfig.isCallback());
// Asserts Null fields
- Assertions.assertThrows(IllegalStateException.class, () ->
referenceBean.getApplication());
+ Assertions.assertThrows(IllegalStateException.class,
referenceBean::getApplication);
Assertions.assertNotNull(referenceBean.getModule());
Assertions.assertNotNull(referenceBean.getConsumer());
Assertions.assertNotNull(referenceBean.getMonitor());
@@ -231,12 +233,12 @@ public class ReferenceCreatorTest {
}
@Bean(MONITOR_CONFIG_ID)
- public MonitorConfig monitorConfig(){
+ public MonitorConfig monitorConfig() {
return new MonitorConfig();
}
@Bean(MODULE_CONFIG_ID)
- public ModuleConfig moduleConfig(){
+ public ModuleConfig moduleConfig() {
return new ModuleConfig();
}