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);
         }

Reply via email to