diff --git a/.licenserc.yaml b/.licenserc.yaml index f28b16a727..9b593b5e53 100644 --- a/.licenserc.yaml +++ b/.licenserc.yaml @@ -209,6 +209,8 @@ dependency: license: EPL-2.0 - name: org.glassfish:jakarta.el license: EPL-2.0 + - name: org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec + license: CDDL-1.1 - name: org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.1_spec license: EPL-2.0 - name: org.jboss.spec.javax.annotation:jboss-annotations-api_1.3_spec diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMapping.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMapping.java index e5925bba8c..3da0d20df1 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMapping.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMapping.java @@ -16,12 +16,6 @@ */ package org.apache.dubbo.registry.client.metadata; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ThreadLocalRandom; - import org.apache.dubbo.common.URL; import org.apache.dubbo.common.config.ConfigurationUtils; import org.apache.dubbo.common.config.configcenter.ConfigItem; @@ -37,6 +31,12 @@ import org.apache.dubbo.metadata.report.MetadataReportInstance; import org.apache.dubbo.registry.client.RegistryClusterIdentifier; import org.apache.dubbo.rpc.model.ApplicationModel; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; + import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SEPARATOR; import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY; import static org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_PROPERTY_TYPE_MISMATCH; @@ -92,17 +92,23 @@ public class MetadataServiceNameMapping extends AbstractServiceNameMapping { continue; } - boolean succeeded; + boolean succeeded = false; int currentRetryTimes = 1; String newConfigContent = appName; do { ConfigItem configItem = metadataReport.getConfigItem(serviceInterface, DEFAULT_MAPPING_GROUP); String oldConfigContent = configItem.getContent(); if (StringUtils.isNotEmpty(oldConfigContent)) { - boolean contains = StringUtils.isContains(oldConfigContent, appName); - if (contains) { - // From the user's perspective, it means successful when the oldConfigContent has contained the current appName. So we should not throw an Exception to user, it will confuse the user. - succeeded = true; + String[] oldAppNames = oldConfigContent.split(","); + if (oldAppNames.length > 0) { + for (String oldAppName : oldAppNames) { + if (oldAppName.equals(appName)) { + succeeded = true; + break; + } + } + } + if (succeeded) { break; } newConfigContent = oldConfigContent + COMMA_SEPARATOR + appName; 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 ece3719f53..f69747b4cf 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 @@ -358,6 +358,7 @@ public class ReflectionPackableMethod implements PackableMethod { private final String serialize; private final MultipleSerialization multipleSerialization; private final String[] argumentsType; + private final Class[] actualRequestTypes; private final URL url; private final boolean singleArgument; @@ -369,6 +370,7 @@ public class ReflectionPackableMethod implements PackableMethod { this.url = url; this.serialize = convertHessianToWrapper(serialize); this.multipleSerialization = multipleSerialization; + this.actualRequestTypes = actualRequestTypes; this.argumentsType = Stream.of(actualRequestTypes).map(Class::getName).toArray(String[]::new); this.singleArgument = singleArgument; } @@ -386,9 +388,10 @@ public class ReflectionPackableMethod implements PackableMethod { for (String type : argumentsType) { builder.addArgTypes(type); } - for (Object argument : arguments) { + for (int i = 0; i < arguments.length; i++) { + Object argument = arguments[i]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); - multipleSerialization.serialize(url, serialize, argument.getClass(), argument, bos); + multipleSerialization.serialize(url, serialize, actualRequestTypes[i], argument, bos); builder.addArgs(bos.toByteArray()); } return builder.build().toByteArray(); diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/call/AbstractServerCall.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/call/AbstractServerCall.java index cd538a7a58..7780579a69 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/call/AbstractServerCall.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/call/AbstractServerCall.java @@ -143,7 +143,7 @@ public abstract class AbstractServerCall implements ServerCall, ServerStream.Lis final byte[] data; try { data = packableMethod.packResponse(message); - } catch (Throwable e) { + } catch (Exception e) { close(TriRpcStatus.INTERNAL.withDescription("Serialize response failed") .withCause(e), null); LOGGER.error(PROTOCOL_FAILED_SERIALIZE_TRIPLE,"","",String.format("Serialize triple response failed, service=%s method=%s", @@ -188,12 +188,12 @@ public abstract class AbstractServerCall implements ServerCall, ServerStream.Lis try { Object instance = parseSingleMessage(message); listener.onMessage(instance); - } catch (Throwable t) { + } catch (Exception e) { final TriRpcStatus status = TriRpcStatus.UNKNOWN.withDescription("Server error") - .withCause(t); + .withCause(e); close(status, null); LOGGER.error(PROTOCOL_FAILED_REQUEST,"","","Process request failed. service=" + serviceName + - " method=" + methodName, t); + " method=" + methodName, e); } finally { ClassLoadUtil.switchContextLoader(tccl); } @@ -391,10 +391,10 @@ public abstract class AbstractServerCall implements ServerCall, ServerStream.Lis throw new IllegalStateException("Can not reach here"); } return listener; - } catch (Throwable t) { - LOGGER.error(PROTOCOL_FAILED_CREATE_STREAM_TRIPLE, "", "", "Create triple stream failed", t); + } catch (Exception e) { + LOGGER.error(PROTOCOL_FAILED_CREATE_STREAM_TRIPLE, "", "", "Create triple stream failed", e); responseErr(TriRpcStatus.INTERNAL.withDescription("Create stream failed") - .withCause(t)); + .withCause(e)); } return null; } diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/call/AbstractServerCallListener.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/call/AbstractServerCallListener.java index 3ced60f660..3bfb57f891 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/call/AbstractServerCallListener.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/call/AbstractServerCallListener.java @@ -85,8 +85,8 @@ public abstract class AbstractServerCallListener implements AbstractServerCall.L } onReturn(r.getValue()); }); - } catch (Throwable t) { - responseObserver.onError(t); + } catch (Exception e) { + responseObserver.onError(e); } finally { RpcContext.removeCancellationContext(); RpcContext.removeContext();