You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2023/02/03 03:49:55 UTC
[dubbo] branch 3.1.6-release updated: Fix Class Check
This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.1.6-release
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.1.6-release by this push:
new c44873e9b2 Fix Class Check
c44873e9b2 is described below
commit c44873e9b2e2a9ecb0459dce6e85cdfc829b2300
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Fri Feb 3 11:49:33 2023 +0800
Fix Class Check
---
.../common/utils/DefaultSerializeClassChecker.java | 2 +-
.../META-INF/native-image/reflect-config.json | 14 ++++++++++----
.../apache/dubbo/rpc/filter/GenericImplFilter.java | 22 ++++++++++++++++------
.../dubbo/rpc/filter/GenericImplFilterTest.java | 13 +++++++------
4 files changed, 34 insertions(+), 17 deletions(-)
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/DefaultSerializeClassChecker.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/DefaultSerializeClassChecker.java
index 378a9bc49a..a385ddf593 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/DefaultSerializeClassChecker.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/DefaultSerializeClassChecker.java
@@ -117,7 +117,7 @@ public class DefaultSerializeClassChecker implements AllowClassNotifyListener {
private Class<?> loadClass0(ClassLoader classLoader, String className) throws ClassNotFoundException {
if (checkStatus == SerializeCheckStatus.DISABLE) {
- return Class.forName(className, false, classLoader);
+ return ClassUtils.forName(className, classLoader);
}
long hash = MAGIC_HASH_CODE;
diff --git a/dubbo-native-plugin/src/main/resources/META-INF/native-image/reflect-config.json b/dubbo-native-plugin/src/main/resources/META-INF/native-image/reflect-config.json
index a5fe3bc351..3f57d4e6b5 100644
--- a/dubbo-native-plugin/src/main/resources/META-INF/native-image/reflect-config.json
+++ b/dubbo-native-plugin/src/main/resources/META-INF/native-image/reflect-config.json
@@ -2292,7 +2292,16 @@
]
},
{
- "name": "org.apache.dubbo.rpc.filter.GenericImplFilter"
+ "name": "org.apache.dubbo.rpc.filter.GenericImplFilter",
+ "allPublicMethods": true,
+ "methods": [
+ {
+ "name": "<init>",
+ "parameterTypes": [
+ "org.apache.dubbo.rpc.model.ModuleModel"
+ ]
+ }
+ ]
},
{
"name": "org.apache.dubbo.rpc.filter.TimeoutFilter",
@@ -2479,9 +2488,6 @@
{
"name": "org.apache.dubbo.rpc.filter.GenericFilter"
},
- {
- "name": "org.apache.dubbo.rpc.filter.GenericImplFilter"
- },
{
"name": "org.apache.dubbo.rpc.filter.TimeoutFilter"
},
diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericImplFilter.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericImplFilter.java
index 80e53ecb7f..f2b5041f93 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericImplFilter.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericImplFilter.java
@@ -16,6 +16,11 @@
*/
package org.apache.dubbo.rpc.filter;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+
import org.apache.dubbo.common.beanutil.JavaBeanAccessor;
import org.apache.dubbo.common.beanutil.JavaBeanDescriptor;
import org.apache.dubbo.common.beanutil.JavaBeanSerializeUtil;
@@ -23,6 +28,7 @@ import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.utils.DefaultSerializeClassChecker;
import org.apache.dubbo.common.utils.PojoUtils;
import org.apache.dubbo.common.utils.ReflectUtils;
import org.apache.dubbo.rpc.Constants;
@@ -32,15 +38,11 @@ import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.RpcInvocation;
+import org.apache.dubbo.rpc.model.ModuleModel;
import org.apache.dubbo.rpc.service.GenericService;
import org.apache.dubbo.rpc.support.ProtocolUtils;
import org.apache.dubbo.rpc.support.RpcUtils;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-
import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE;
import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE_ASYNC;
import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_PARAMETER_DESC;
@@ -59,6 +61,12 @@ public class GenericImplFilter implements Filter, Filter.Listener {
private static final String GENERIC_IMPL_MARKER = "GENERIC_IMPL";
+ private final ModuleModel moduleModel;
+
+ public GenericImplFilter(ModuleModel moduleModel) {
+ this.moduleModel = moduleModel;
+ }
+
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
String generic = invoker.getUrl().getParameter(GENERIC_KEY);
@@ -172,7 +180,9 @@ public class GenericImplFilter implements Filter, Filter.Listener {
com.alibaba.dubbo.rpc.service.GenericException exception = (com.alibaba.dubbo.rpc.service.GenericException) appResponse.getException();
try {
String className = exception.getExceptionClass();
- Class<?> clazz = ReflectUtils.forName(className);
+ DefaultSerializeClassChecker classChecker = moduleModel.getApplicationModel()
+ .getFrameworkModel().getBeanFactory().getBean(DefaultSerializeClassChecker.class);
+ Class<?> clazz = classChecker.loadClass(Thread.currentThread().getContextClassLoader(), className);
Throwable targetException = null;
Throwable lastException = null;
try {
diff --git a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/filter/GenericImplFilterTest.java b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/filter/GenericImplFilterTest.java
index e8d92245c8..56e6a5d1c5 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/filter/GenericImplFilterTest.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/filter/GenericImplFilterTest.java
@@ -16,6 +16,10 @@
*/
package org.apache.dubbo.rpc.filter;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
import org.apache.dubbo.common.URL;
import org.apache.dubbo.rpc.AppResponse;
import org.apache.dubbo.rpc.AsyncRpcResult;
@@ -23,18 +27,15 @@ import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.RpcInvocation;
+import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.service.GenericService;
import org.apache.dubbo.rpc.support.DemoService;
import org.apache.dubbo.rpc.support.Person;
-
-import com.alibaba.dubbo.rpc.service.GenericException;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map;
+import com.alibaba.dubbo.rpc.service.GenericException;
import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE;
import static org.apache.dubbo.rpc.Constants.GENERIC_KEY;
@@ -43,7 +44,7 @@ import static org.mockito.Mockito.when;
class GenericImplFilterTest {
- private GenericImplFilter genericImplFilter = new GenericImplFilter();
+ private GenericImplFilter genericImplFilter = new GenericImplFilter(ApplicationModel.defaultModel().getDefaultModule());
@Test
void testInvoke() throws Exception {