This is an automated email from the ASF dual-hosted git repository.
guohao pushed a commit to branch 3.1
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.1 by this push:
new dc068918b3 [Triple] Fix boxed type methods (#11577)
dc068918b3 is described below
commit dc068918b31309c435c6a342626d89543fd11e5f
Author: GuoHao <[email protected]>
AuthorDate: Thu Feb 16 14:27:48 2023 +0800
[Triple] Fix boxed type methods (#11577)
* Fix boxed type methods
* Fix style
* Revert changes to fix it
---
.../rpc/protocol/tri/ReflectionPackableMethod.java | 64 ++++++----------------
.../common/serialize/MultipleSerialization.java | 15 -----
2 files changed, 18 insertions(+), 61 deletions(-)
diff --git
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/ReflectionPackableMethod.java
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/ReflectionPackableMethod.java
index 790d807605..39e16fa7cd 100644
---
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/ReflectionPackableMethod.java
+++
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/ReflectionPackableMethod.java
@@ -22,7 +22,6 @@ import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.serialize.MultipleSerialization;
import org.apache.dubbo.common.serialize.support.DefaultSerializationSelector;
import org.apache.dubbo.common.stream.StreamObserver;
-import org.apache.dubbo.common.utils.ClassUtils;
import org.apache.dubbo.config.Constants;
import org.apache.dubbo.rpc.model.MethodDescriptor;
import org.apache.dubbo.rpc.model.PackableMethod;
@@ -34,8 +33,7 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.lang.reflect.ParameterizedType;
import java.util.Iterator;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Stream;
import static org.apache.dubbo.common.constants.CommonConstants.$ECHO;
import static
org.apache.dubbo.common.constants.CommonConstants.PROTOBUF_MESSAGE_CLASS_NAME;
@@ -93,7 +91,8 @@ public class ReflectionPackableMethod implements
PackableMethod {
.getExtension(url.getParameter(Constants.MULTI_SERIALIZATION_KEY,
CommonConstants.DEFAULT_KEY));
- this.requestPack = new WrapRequestPack(serialization, url,
serializeName, singleArgument);
+ this.requestPack = new WrapRequestPack(serialization, url,
serializeName, actualRequestTypes,
+ singleArgument);
this.responsePack = new WrapResponsePack(serialization, url,
actualResponseType);
this.requestUnpack = new WrapRequestUnpack(serialization, url,
actualRequestTypes);
this.responseUnpack = new WrapResponseUnpack(serialization, url,
actualResponseType);
@@ -323,16 +322,10 @@ public class ReflectionPackableMethod implements
PackableMethod {
@Override
public byte[] pack(Object obj) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
- Class<?> clz;
- if (obj != null) {
- clz = obj.getClass();
- } else {
- clz = actualResponseType;
- }
- multipleSerialization.serialize(url, serialize, clz, obj, bos);
+ multipleSerialization.serialize(url, serialize,
actualResponseType, obj, bos);
return
TripleCustomerProtocolWapper.TripleResponseWrapper.Builder.newBuilder()
.setSerializeType(serialize)
- .setType(clz.getName())
+ .setType(actualResponseType.getName())
.setData(bos.toByteArray())
.build()
.toByteArray();
@@ -341,17 +334,15 @@ public class ReflectionPackableMethod implements
PackableMethod {
private static class WrapResponseUnpack implements UnPack {
- private final Map<String, Class<?>> classCache = new
ConcurrentHashMap<>();
-
private final MultipleSerialization serialization;
private final URL url;
+ private final Class<?> returnClass;
- private final Class<?> actualResponseType;
- private WrapResponseUnpack(MultipleSerialization serialization, URL
url, Class<?> actualResponseType) {
+ private WrapResponseUnpack(MultipleSerialization serialization, URL
url, Class<?> returnClass) {
this.serialization = serialization;
this.url = url;
- this.actualResponseType = actualResponseType;
+ this.returnClass = returnClass;
}
@Override
@@ -360,8 +351,7 @@ public class ReflectionPackableMethod implements
PackableMethod {
.parseFrom(data);
final String serializeType =
convertHessianFromWrapper(wrapper.getSerializeType());
ByteArrayInputStream bais = new
ByteArrayInputStream(wrapper.getData());
- Class<?> clz = getClassFromCache(wrapper.getType(), classCache,
actualResponseType);
- return serialization.deserialize(url, serializeType, clz, bais);
+ return serialization.deserialize(url, serializeType, returnClass,
bais);
}
}
@@ -369,16 +359,19 @@ public class ReflectionPackableMethod implements
PackableMethod {
private final String serialize;
private final MultipleSerialization multipleSerialization;
+ private final String[] argumentsType;
private final URL url;
private final boolean singleArgument;
private WrapRequestPack(MultipleSerialization multipleSerialization,
URL url,
String serialize,
+ Class<?>[] actualRequestTypes,
boolean singleArgument) {
this.url = url;
this.serialize = convertHessianToWrapper(serialize);
this.multipleSerialization = multipleSerialization;
+ this.argumentsType =
Stream.of(actualRequestTypes).map(Class::getName).toArray(String[]::new);
this.singleArgument = singleArgument;
}
@@ -392,8 +385,10 @@ public class ReflectionPackableMethod implements
PackableMethod {
}
final TripleCustomerProtocolWapper.TripleRequestWrapper.Builder
builder =
TripleCustomerProtocolWapper.TripleRequestWrapper.Builder.newBuilder();
builder.setSerializeType(serialize);
+ for (String type : argumentsType) {
+ builder.addArgTypes(type);
+ }
for (Object argument : arguments) {
- builder.addArgTypes(argument.getClass().getName());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
multipleSerialization.serialize(url, serialize,
argument.getClass(), argument, bos);
builder.addArgs(bos.toByteArray());
@@ -436,8 +431,6 @@ public class ReflectionPackableMethod implements
PackableMethod {
private class WrapRequestUnpack implements UnPack {
- private final Map<String, Class<?>> classCache = new
ConcurrentHashMap<>();
-
private final MultipleSerialization serialization;
private final URL url;
@@ -458,32 +451,11 @@ public class ReflectionPackableMethod implements
PackableMethod {
for (int i = 0; i < wrapper.getArgs().size(); i++) {
ByteArrayInputStream bais = new ByteArrayInputStream(
wrapper.getArgs().get(i));
- String className = wrapper.getArgTypes().get(i);
- Class<?> clz = getClassFromCache(className, classCache,
actualRequestTypes[i]);
- ret[i] = serialization.deserialize(url,
wrapper.getSerializeType(), clz, bais);
+ ret[i] = serialization.deserialize(url,
wrapper.getSerializeType(),
+ actualRequestTypes[i],
+ bais);
}
return ret;
}
-
-
- }
-
-
- private static Class<?> getClassFromCache(String className, Map<String,
Class<?>> classCache, Class<?> expectedClass) {
- if (expectedClass.getName().equals(className)) {
- return expectedClass;
- }
-
- Class<?> clz = classCache.get(className);
- if (clz == null) {
- try {
- clz = ClassUtils.forName(className);
- } catch (Exception e) {
- // To catch IllegalStateException, LinkageError,
ClassNotFoundException
- clz = expectedClass;
- }
- classCache.put(className, clz);
- }
- return clz;
}
}
diff --git
a/dubbo-serialization/dubbo-serialization-api/src/main/java/org/apache/dubbo/common/serialize/MultipleSerialization.java
b/dubbo-serialization/dubbo-serialization-api/src/main/java/org/apache/dubbo/common/serialize/MultipleSerialization.java
index f72a769c7a..55b67fcad6 100644
---
a/dubbo-serialization/dubbo-serialization-api/src/main/java/org/apache/dubbo/common/serialize/MultipleSerialization.java
+++
b/dubbo-serialization/dubbo-serialization-api/src/main/java/org/apache/dubbo/common/serialize/MultipleSerialization.java
@@ -20,7 +20,6 @@ package org.apache.dubbo.common.serialize;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.extension.ExtensionScope;
import org.apache.dubbo.common.extension.SPI;
-import org.apache.dubbo.common.utils.ClassUtils;
import java.io.IOException;
import java.io.InputStream;
@@ -29,22 +28,8 @@ import java.io.OutputStream;
@SPI(scope = ExtensionScope.FRAMEWORK)
public interface MultipleSerialization {
-
- default void serialize(URL url, String serializeType, String clzStr,
Object obj, OutputStream os) throws IOException, ClassNotFoundException {
- Class<?> clz = ClassUtils.forName(clzStr);
- serialize(url, serializeType, clz, obj, os);
- }
-
-
void serialize(URL url, String serializeType, Class<?> clz, Object obj,
OutputStream os) throws IOException;
-
- default Object deserialize(URL url, String serializeType, String clzStr,
InputStream os) throws IOException, ClassNotFoundException {
- Class<?> clz = ClassUtils.forName(clzStr);
- return deserialize(url, serializeType, clz, os);
- }
-
-
Object deserialize(URL url, String serializeType, Class<?> clz,
InputStream os) throws IOException, ClassNotFoundException;
}