1
0
mirror of https://github.com/apache/dubbo.git synced 2024-10-23 07:04:37 +08:00

Fix Class Check

This commit is contained in:
Albumen Kevin 2023-02-03 11:49:33 +08:00
parent 0f8972a298
commit c44873e9b2
4 changed files with 34 additions and 17 deletions

View File

@ -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;

View File

@ -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"
},

View File

@ -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 {

View File

@ -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 {