This is an automated email from the ASF dual-hosted git repository.
earthchen pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.3 by this push:
new 6ee43ea418 Fix some bug about proto copy (#15825)
6ee43ea418 is described below
commit 6ee43ea418fff128c5a3ea439533fa11e5f7b363
Author: Rain Yu <[email protected]>
AuthorDate: Mon Dec 8 11:51:46 2025 +0800
Fix some bug about proto copy (#15825)
* fix: Fix some bugs about proto
* support for Protobuf methods beginning with an uppercase letter.
* Bump hessian-lite from 4.0.4 to 4.0.5
* remove methodName in construct.methodDescriptor may be null.
* remove methodName in construct.methodDescriptor may be null.
* remove methodName in construct.methodDescriptor may be null.
---------
Co-authored-by: paxxie2 <[email protected]>
Co-authored-by: Sean Yang <[email protected]>
Co-authored-by: earthchen <[email protected]>
---
.../apache/dubbo/rpc/model/MethodDescriptor.java | 16 ++++++++++++++++
.../rpc/model/ReflectionMethodDescriptor.java | 5 +++++
.../apache/dubbo/rpc/model/ServiceDescriptor.java | 6 ------
.../dubbo/rpc/model/StubMethodDescriptor.java | 15 ++++++++++++---
.../dubbo/rpc/model/StubServiceDescriptor.java | 22 ++++++++++++----------
dubbo-dependencies-bom/pom.xml | 2 +-
.../support/jaxrs/JaxrsRequestMappingResolver.java | 2 +-
.../spring/SpringMvcRequestMappingResolver.java | 2 +-
.../dubbo/rpc/protocol/dubbo/MultiThreadTest.java | 9 ++++++---
.../dubbo/rpc/protocol/tri/DescriptorUtils.java | 5 -----
.../protocol/tri/rest/mapping/meta/MethodMeta.java | 7 +++++++
.../support/basic/BasicRequestMappingResolver.java | 2 +-
12 files changed, 62 insertions(+), 31 deletions(-)
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/MethodDescriptor.java
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/MethodDescriptor.java
index 77f87ede4a..ec6bcf4c7b 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/MethodDescriptor.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/MethodDescriptor.java
@@ -21,8 +21,24 @@ import java.lang.reflect.Type;
public interface MethodDescriptor {
+ /**
+ * Retrieves the method name.
+ * <p>
+ * In Protobuf scenarios, this name may start with an uppercase letter.
+ *
+ * @return the method name
+ */
String getMethodName();
+ /**
+ * Retrieves the Java method name.
+ * <p>
+ * In Protobuf scenarios, This name is typically converted to start with a
lowercase letter for Java naming conventions.
+ *
+ * @return the Java method name as a String
+ */
+ String getJavaMethodName();
+
String getParamDesc();
/**
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ReflectionMethodDescriptor.java
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ReflectionMethodDescriptor.java
index ac0778d601..27f5d8e06b 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ReflectionMethodDescriptor.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ReflectionMethodDescriptor.java
@@ -129,6 +129,11 @@ public class ReflectionMethodDescriptor implements
MethodDescriptor {
return methodName;
}
+ @Override
+ public String getJavaMethodName() {
+ return method.getName();
+ }
+
@Override
public Method getMethod() {
return method;
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceDescriptor.java
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceDescriptor.java
index eba83d4702..88cc92f0cd 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceDescriptor.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ServiceDescriptor.java
@@ -37,18 +37,12 @@ public interface ServiceDescriptor {
/**
* Does not use Optional as return type to avoid potential performance
decrease.
*
- * @param methodName
- * @param params
- * @return
*/
MethodDescriptor getMethod(String methodName, String params);
/**
* Does not use Optional as return type to avoid potential performance
decrease.
*
- * @param methodName
- * @param paramTypes
- * @return methodDescriptor
*/
MethodDescriptor getMethod(String methodName, Class<?>[] paramTypes);
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubMethodDescriptor.java
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubMethodDescriptor.java
index 2e0c3f84a7..f53f718671 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubMethodDescriptor.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubMethodDescriptor.java
@@ -16,8 +16,6 @@
*/
package org.apache.dubbo.rpc.model;
-import org.apache.dubbo.common.logger.Logger;
-import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.utils.ReflectUtils;
import java.lang.reflect.Method;
@@ -27,9 +25,9 @@ import java.util.concurrent.ConcurrentMap;
import java.util.stream.Stream;
public class StubMethodDescriptor implements MethodDescriptor, PackableMethod {
- private static final Logger logger =
LoggerFactory.getLogger(StubMethodDescriptor.class);
private final ConcurrentMap<String, Object> attributeMap = new
ConcurrentHashMap<>();
private final String methodName;
+ private final String javaMethodName;
private final String[] compatibleParamSignatures;
private final Class<?>[] parameterClasses;
private final Class<?> returnClass;
@@ -51,6 +49,7 @@ public class StubMethodDescriptor implements
MethodDescriptor, PackableMethod {
UnPack requestUnpack,
UnPack responseUnpack) {
this.methodName = methodName;
+ this.javaMethodName = toJavaMethodName(methodName);
this.rpcType = rpcType;
this.requestPack = requestPack;
this.responsePack = responsePack;
@@ -69,6 +68,11 @@ public class StubMethodDescriptor implements
MethodDescriptor, PackableMethod {
return methodName;
}
+ @Override
+ public String getJavaMethodName() {
+ return javaMethodName;
+ }
+
@Override
public String getParamDesc() {
return paramDesc;
@@ -155,4 +159,9 @@ public class StubMethodDescriptor implements
MethodDescriptor, PackableMethod {
+ (parameterClasses.length > 0 ?
parameterClasses[0].getSimpleName() : "") + "), rpcType='" + rpcType
+ "'}";
}
+
+ private static String toJavaMethodName(String methodName) {
+ char ch = methodName.charAt(0);
+ return Character.isUpperCase(ch) ? Character.toLowerCase(ch) +
methodName.substring(1) : methodName;
+ }
}
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubServiceDescriptor.java
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubServiceDescriptor.java
index 1041bf7fa8..6d7157319e 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubServiceDescriptor.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/StubServiceDescriptor.java
@@ -46,10 +46,18 @@ public class StubServiceDescriptor implements
ServiceDescriptor {
}
public void addMethod(MethodDescriptor methodDescriptor) {
- methods.put(methodDescriptor.getMethodName(),
Collections.singletonList(methodDescriptor));
- Map<String, MethodDescriptor> descMap =
-
descToMethods.computeIfAbsent(methodDescriptor.getMethodName(), k -> new
HashMap<>());
- descMap.put(methodDescriptor.getParamDesc(), methodDescriptor);
+ doAddMethod(methodDescriptor.getMethodName(), methodDescriptor);
+ if (methods.containsKey(methodDescriptor.getJavaMethodName())) {
+ return;
+ }
+ doAddMethod(methodDescriptor.getJavaMethodName(), methodDescriptor);
+ }
+
+ private void doAddMethod(String methodName, MethodDescriptor
methodDescriptor) {
+ methods.put(methodName, Collections.singletonList(methodDescriptor));
+ descToMethods
+ .computeIfAbsent(methodName, k -> new HashMap<>())
+ .put(methodDescriptor.getParamDesc(), methodDescriptor);
}
public FullServiceDefinition getFullServiceDefinition(String serviceKey) {
@@ -75,9 +83,6 @@ public class StubServiceDescriptor implements
ServiceDescriptor {
/**
* Does not use Optional as return type to avoid potential performance
decrease.
*
- * @param methodName
- * @param params
- * @return
*/
public MethodDescriptor getMethod(String methodName, String params) {
Map<String, MethodDescriptor> methods = descToMethods.get(methodName);
@@ -90,9 +95,6 @@ public class StubServiceDescriptor implements
ServiceDescriptor {
/**
* Does not use Optional as return type to avoid potential performance
decrease.
*
- * @param methodName
- * @param paramTypes
- * @return
*/
public MethodDescriptor getMethod(String methodName, Class<?>[]
paramTypes) {
List<MethodDescriptor> methodModels = methods.get(methodName);
diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml
index 816da74ee6..b97879fa08 100644
--- a/dubbo-dependencies-bom/pom.xml
+++ b/dubbo-dependencies-bom/pom.xml
@@ -168,7 +168,7 @@
<jaxb_version>2.2.7</jaxb_version>
<activation_version>1.2.0</activation_version>
<test_container_version>1.21.0</test_container_version>
- <hessian_lite_version>4.0.4</hessian_lite_version>
+ <hessian_lite_version>4.0.5</hessian_lite_version>
<swagger_version>1.6.16</swagger_version>
<snappy_java_version>1.1.10.7</snappy_java_version>
diff --git
a/dubbo-plugin/dubbo-rest-jaxrs/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/jaxrs/JaxrsRequestMappingResolver.java
b/dubbo-plugin/dubbo-rest-jaxrs/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/jaxrs/JaxrsRequestMappingResolver.java
index e2ee07c12e..d09683bbdf 100644
---
a/dubbo-plugin/dubbo-rest-jaxrs/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/jaxrs/JaxrsRequestMappingResolver.java
+++
b/dubbo-plugin/dubbo-rest-jaxrs/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/jaxrs/JaxrsRequestMappingResolver.java
@@ -78,7 +78,7 @@ public class JaxrsRequestMappingResolver implements
RequestMappingResolver {
globalCorsMeta = CorsUtils.getGlobalCorsMeta(restConfig);
}
return builder(methodMeta, path, httpMethod)
- .name(methodMeta.getMethod().getName())
+ .name(methodMeta.getMethodName())
.contextPath(methodMeta.getServiceMeta().getContextPath())
.service(serviceMeta.getServiceGroup(),
serviceMeta.getServiceVersion())
.cors(globalCorsMeta)
diff --git
a/dubbo-plugin/dubbo-rest-spring/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/spring/SpringMvcRequestMappingResolver.java
b/dubbo-plugin/dubbo-rest-spring/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/spring/SpringMvcRequestMappingResolver.java
index b80de0d00a..e1db874608 100644
---
a/dubbo-plugin/dubbo-rest-spring/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/spring/SpringMvcRequestMappingResolver.java
+++
b/dubbo-plugin/dubbo-rest-spring/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/spring/SpringMvcRequestMappingResolver.java
@@ -89,7 +89,7 @@ public class SpringMvcRequestMappingResolver implements
RequestMappingResolver {
}
ServiceMeta serviceMeta = methodMeta.getServiceMeta();
- String name = methodMeta.getMethod().getName();
+ String name = methodMeta.getMethodName();
String[] methods = requestMapping == null
? httpExchange.getStringArray("method")
: requestMapping.getStringArray("method");
diff --git
a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/MultiThreadTest.java
b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/MultiThreadTest.java
index a1f1090e75..23edb543b7 100644
---
a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/MultiThreadTest.java
+++
b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/MultiThreadTest.java
@@ -57,17 +57,20 @@ class MultiThreadTest {
@Test
void testDubboMultiThreadInvoke() throws Exception {
+ String testService = DemoService.class.getName();
ApplicationModel.defaultModel()
.getDefaultModule()
.getServiceRepository()
- .registerService("TestService", DemoService.class);
+ .registerService(testService, DemoService.class);
int port = NetUtils.getAvailablePort();
Exporter<?> rpcExporter = protocol.export(proxy.getInvoker(
- new DemoServiceImpl(), DemoService.class,
URL.valueOf("dubbo://127.0.0.1:" + port + "/TestService")));
+ new DemoServiceImpl(),
+ DemoService.class,
+ URL.valueOf("dubbo://127.0.0.1:" + port + "/" + testService)));
final AtomicInteger counter = new AtomicInteger();
final DemoService service = proxy.getProxy(
- protocol.refer(DemoService.class,
URL.valueOf("dubbo://127.0.0.1:" + port + "/TestService")));
+ protocol.refer(DemoService.class,
URL.valueOf("dubbo://127.0.0.1:" + port + "/" + testService)));
Assertions.assertEquals(service.getSize(new String[] {"123", "456",
"789"}), 3);
final StringBuffer sb = new StringBuffer();
diff --git
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/DescriptorUtils.java
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/DescriptorUtils.java
index 91c09aa009..e52755092a 100644
---
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/DescriptorUtils.java
+++
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/DescriptorUtils.java
@@ -100,11 +100,6 @@ public final class DescriptorUtils {
.get(0);
} else {
List<MethodDescriptor> methodDescriptors =
serviceDescriptor.getMethods(methodName);
- // try lower-case method
- if (CollectionUtils.isEmpty(methodDescriptors)) {
- String lowerMethod =
Character.toLowerCase(methodName.charAt(0)) + methodName.substring(1);
- methodDescriptors = serviceDescriptor.getMethods(lowerMethod);
- }
if (CollectionUtils.isEmpty(methodDescriptors)) {
return null;
}
diff --git
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/mapping/meta/MethodMeta.java
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/mapping/meta/MethodMeta.java
index de2328004e..ec8f0841d1 100644
---
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/mapping/meta/MethodMeta.java
+++
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/mapping/meta/MethodMeta.java
@@ -95,6 +95,13 @@ public final class MethodMeta extends AnnotationSupport {
return method;
}
+ public String getMethodName() {
+ if (methodDescriptor == null) {
+ return method.getName();
+ }
+ return methodDescriptor.getMethodName();
+ }
+
public MethodDescriptor getMethodDescriptor() {
return methodDescriptor;
}
diff --git
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/basic/BasicRequestMappingResolver.java
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/basic/BasicRequestMappingResolver.java
index 533d2b155d..7878b4ff08 100644
---
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/basic/BasicRequestMappingResolver.java
+++
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/basic/BasicRequestMappingResolver.java
@@ -97,7 +97,7 @@ public class BasicRequestMappingResolver implements
RequestMappingResolver {
String[] paths = resolvePaths(mapping);
if (paths.length == 0) {
- builder.path('/' +
method.getName()).sig(TypeUtils.buildSig(method));
+ builder.path('/' +
methodMeta.getMethodName()).sig(TypeUtils.buildSig(method));
} else {
builder.path(paths);
}