Skip to content

Commit 6b6a3c9

Browse files
committed
Merge branch 'apache-3.1' into 3.1.7-release
2 parents 3995bfc + dc06891 commit 6b6a3c9

File tree

2 files changed

+18
-61
lines changed

2 files changed

+18
-61
lines changed

dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/ReflectionPackableMethod.java

Lines changed: 18 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.apache.dubbo.common.serialize.MultipleSerialization;
2323
import org.apache.dubbo.common.serialize.support.DefaultSerializationSelector;
2424
import org.apache.dubbo.common.stream.StreamObserver;
25-
import org.apache.dubbo.common.utils.ClassUtils;
2625
import org.apache.dubbo.config.Constants;
2726
import org.apache.dubbo.rpc.model.MethodDescriptor;
2827
import org.apache.dubbo.rpc.model.PackableMethod;
@@ -34,8 +33,7 @@
3433
import java.io.IOException;
3534
import java.lang.reflect.ParameterizedType;
3635
import java.util.Iterator;
37-
import java.util.Map;
38-
import java.util.concurrent.ConcurrentHashMap;
36+
import java.util.stream.Stream;
3937

4038
import static org.apache.dubbo.common.constants.CommonConstants.$ECHO;
4139
import static org.apache.dubbo.common.constants.CommonConstants.PROTOBUF_MESSAGE_CLASS_NAME;
@@ -93,7 +91,8 @@ public ReflectionPackableMethod(MethodDescriptor method, URL url, String seriali
9391
.getExtension(url.getParameter(Constants.MULTI_SERIALIZATION_KEY,
9492
CommonConstants.DEFAULT_KEY));
9593

96-
this.requestPack = new WrapRequestPack(serialization, url, serializeName, singleArgument);
94+
this.requestPack = new WrapRequestPack(serialization, url, serializeName, actualRequestTypes,
95+
singleArgument);
9796
this.responsePack = new WrapResponsePack(serialization, url, actualResponseType);
9897
this.requestUnpack = new WrapRequestUnpack(serialization, url, actualRequestTypes);
9998
this.responseUnpack = new WrapResponseUnpack(serialization, url, actualResponseType);
@@ -323,16 +322,10 @@ private WrapResponsePack(MultipleSerialization multipleSerialization, URL url,
323322
@Override
324323
public byte[] pack(Object obj) throws IOException {
325324
ByteArrayOutputStream bos = new ByteArrayOutputStream();
326-
Class<?> clz;
327-
if (obj != null) {
328-
clz = obj.getClass();
329-
} else {
330-
clz = actualResponseType;
331-
}
332-
multipleSerialization.serialize(url, serialize, clz, obj, bos);
325+
multipleSerialization.serialize(url, serialize, actualResponseType, obj, bos);
333326
return TripleCustomerProtocolWapper.TripleResponseWrapper.Builder.newBuilder()
334327
.setSerializeType(serialize)
335-
.setType(clz.getName())
328+
.setType(actualResponseType.getName())
336329
.setData(bos.toByteArray())
337330
.build()
338331
.toByteArray();
@@ -341,17 +334,15 @@ public byte[] pack(Object obj) throws IOException {
341334

342335
private static class WrapResponseUnpack implements UnPack {
343336

344-
private final Map<String, Class<?>> classCache = new ConcurrentHashMap<>();
345-
346337
private final MultipleSerialization serialization;
347338
private final URL url;
339+
private final Class<?> returnClass;
348340

349-
private final Class<?> actualResponseType;
350341

351-
private WrapResponseUnpack(MultipleSerialization serialization, URL url, Class<?> actualResponseType) {
342+
private WrapResponseUnpack(MultipleSerialization serialization, URL url, Class<?> returnClass) {
352343
this.serialization = serialization;
353344
this.url = url;
354-
this.actualResponseType = actualResponseType;
345+
this.returnClass = returnClass;
355346
}
356347

357348
@Override
@@ -360,25 +351,27 @@ public Object unpack(byte[] data) throws IOException, ClassNotFoundException {
360351
.parseFrom(data);
361352
final String serializeType = convertHessianFromWrapper(wrapper.getSerializeType());
362353
ByteArrayInputStream bais = new ByteArrayInputStream(wrapper.getData());
363-
Class<?> clz = getClassFromCache(wrapper.getType(), classCache, actualResponseType);
364-
return serialization.deserialize(url, serializeType, clz, bais);
354+
return serialization.deserialize(url, serializeType, returnClass, bais);
365355
}
366356
}
367357

368358
private static class WrapRequestPack implements Pack {
369359

370360
private final String serialize;
371361
private final MultipleSerialization multipleSerialization;
362+
private final String[] argumentsType;
372363
private final URL url;
373364
private final boolean singleArgument;
374365

375366
private WrapRequestPack(MultipleSerialization multipleSerialization,
376367
URL url,
377368
String serialize,
369+
Class<?>[] actualRequestTypes,
378370
boolean singleArgument) {
379371
this.url = url;
380372
this.serialize = convertHessianToWrapper(serialize);
381373
this.multipleSerialization = multipleSerialization;
374+
this.argumentsType = Stream.of(actualRequestTypes).map(Class::getName).toArray(String[]::new);
382375
this.singleArgument = singleArgument;
383376
}
384377

@@ -392,8 +385,10 @@ public byte[] pack(Object obj) throws IOException {
392385
}
393386
final TripleCustomerProtocolWapper.TripleRequestWrapper.Builder builder = TripleCustomerProtocolWapper.TripleRequestWrapper.Builder.newBuilder();
394387
builder.setSerializeType(serialize);
388+
for (String type : argumentsType) {
389+
builder.addArgTypes(type);
390+
}
395391
for (Object argument : arguments) {
396-
builder.addArgTypes(argument.getClass().getName());
397392
ByteArrayOutputStream bos = new ByteArrayOutputStream();
398393
multipleSerialization.serialize(url, serialize, argument.getClass(), argument, bos);
399394
builder.addArgs(bos.toByteArray());
@@ -436,8 +431,6 @@ public byte[] pack(Object obj) throws IOException {
436431

437432
private class WrapRequestUnpack implements UnPack {
438433

439-
private final Map<String, Class<?>> classCache = new ConcurrentHashMap<>();
440-
441434
private final MultipleSerialization serialization;
442435
private final URL url;
443436

@@ -458,32 +451,11 @@ public Object unpack(byte[] data) throws IOException, ClassNotFoundException {
458451
for (int i = 0; i < wrapper.getArgs().size(); i++) {
459452
ByteArrayInputStream bais = new ByteArrayInputStream(
460453
wrapper.getArgs().get(i));
461-
String className = wrapper.getArgTypes().get(i);
462-
Class<?> clz = getClassFromCache(className, classCache, actualRequestTypes[i]);
463-
ret[i] = serialization.deserialize(url, wrapper.getSerializeType(), clz, bais);
454+
ret[i] = serialization.deserialize(url, wrapper.getSerializeType(),
455+
actualRequestTypes[i],
456+
bais);
464457
}
465458
return ret;
466459
}
467-
468-
469-
}
470-
471-
472-
private static Class<?> getClassFromCache(String className, Map<String, Class<?>> classCache, Class<?> expectedClass) {
473-
if (expectedClass.getName().equals(className)) {
474-
return expectedClass;
475-
}
476-
477-
Class<?> clz = classCache.get(className);
478-
if (clz == null) {
479-
try {
480-
clz = ClassUtils.forName(className);
481-
} catch (Exception e) {
482-
// To catch IllegalStateException, LinkageError, ClassNotFoundException
483-
clz = expectedClass;
484-
}
485-
classCache.put(className, clz);
486-
}
487-
return clz;
488460
}
489461
}

dubbo-serialization/dubbo-serialization-api/src/main/java/org/apache/dubbo/common/serialize/MultipleSerialization.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.apache.dubbo.common.URL;
2121
import org.apache.dubbo.common.extension.ExtensionScope;
2222
import org.apache.dubbo.common.extension.SPI;
23-
import org.apache.dubbo.common.utils.ClassUtils;
2423

2524
import java.io.IOException;
2625
import java.io.InputStream;
@@ -29,22 +28,8 @@
2928
@SPI(scope = ExtensionScope.FRAMEWORK)
3029
public interface MultipleSerialization {
3130

32-
33-
default void serialize(URL url, String serializeType, String clzStr, Object obj, OutputStream os) throws IOException, ClassNotFoundException {
34-
Class<?> clz = ClassUtils.forName(clzStr);
35-
serialize(url, serializeType, clz, obj, os);
36-
}
37-
38-
3931
void serialize(URL url, String serializeType, Class<?> clz, Object obj, OutputStream os) throws IOException;
4032

41-
42-
default Object deserialize(URL url, String serializeType, String clzStr, InputStream os) throws IOException, ClassNotFoundException {
43-
Class<?> clz = ClassUtils.forName(clzStr);
44-
return deserialize(url, serializeType, clz, os);
45-
}
46-
47-
4833
Object deserialize(URL url, String serializeType, Class<?> clz, InputStream os) throws IOException, ClassNotFoundException;
4934

5035
}

0 commit comments

Comments
 (0)