diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java index 6fd828d998..aae01b667d 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java @@ -374,7 +374,7 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { } - private boolean verifyMethodConfig(MethodConfig methodConfig, Class interfaceClass, boolean ignoreInvalidMethodConfig) { + protected boolean verifyMethodConfig(MethodConfig methodConfig, Class interfaceClass, boolean ignoreInvalidMethodConfig) { String methodName = methodConfig.getName(); if (StringUtils.isEmpty(methodName)) { String msg = " name attribute is required! Please check: " + @@ -396,7 +396,12 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { logger.warn(CONFIG_NO_METHOD_FOUND, "", "", msg); return false; } else { - throw new IllegalStateException(msg); + if (!isNeedCheckMethod()) { + msg = "Generic call: " + msg; + logger.warn(CONFIG_NO_METHOD_FOUND, "", "", msg); + } else { + throw new IllegalStateException(msg); + } } } return true; @@ -413,6 +418,11 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { return null; } + @Transient + protected boolean isNeedCheckMethod() { + return true; + } + private boolean hasArgumentConfigProps(Map configProperties, String methodName, int argIndex) { String argPrefix = methodName + "." + argIndex + "."; return ConfigurationUtils.hasSubProperties(configProperties, argPrefix); diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java index 6ac7a43948..e659b10b6f 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java @@ -183,6 +183,11 @@ public abstract class AbstractReferenceConfig extends AbstractInterfaceConfig { } } + @Override + protected boolean isNeedCheckMethod() { + return StringUtils.isEmpty(getGeneric()); + } + /** * @return * @deprecated instead, use the parameter scope to judge if it's in jvm, scope=local diff --git a/dubbo-common/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java b/dubbo-common/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java index a09ea89e21..44a330aad1 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java @@ -18,7 +18,6 @@ package org.apache.dubbo.config; import org.apache.dubbo.common.constants.CommonConstants; - import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -236,7 +235,28 @@ class AbstractInterfaceConfigTest { Assertions.assertEquals("scope", interfaceConfig.getScope()); } + @Test + void testVerifyMethod() { + InterfaceConfig2 interfaceConfig2 = new InterfaceConfig2(); + MethodConfig methodConfig = new MethodConfig(); + methodConfig.setTimeout(5000); + methodConfig.setName("sayHello"); + Class clazz = Greeting.class; + boolean verifyResult = interfaceConfig2.verifyMethodConfig(methodConfig, clazz, false); + Assertions.assertTrue(verifyResult); + + boolean verifyResult2 = interfaceConfig2.verifyMethodConfig(methodConfig, clazz, true); + Assertions.assertFalse(verifyResult2); + } + + public static class InterfaceConfig2 extends AbstractInterfaceConfig { + @Override + protected boolean isNeedCheckMethod() { + return false; + } + } + public static class InterfaceConfig extends AbstractInterfaceConfig { } -} \ No newline at end of file +} diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java index 7b137c5762..6588e58d58 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java @@ -476,4 +476,4 @@ class MethodConfigTest { Map metaData = methodConfig.getMetaData(); Assertions.assertEquals(0, metaData.size(), "Expect empty metadata but found: "+metaData); } -} \ No newline at end of file +}