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 2021/09/23 09:48:54 UTC
[dubbo] branch 3.0 updated: Fix Class.forName when publish
ServiceDefinition (#8894)
This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new 0d550f9 Fix Class.forName when publish ServiceDefinition (#8894)
0d550f9 is described below
commit 0d550f9e083216f31e254595c289ebda8ab04d11
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Thu Sep 23 17:48:45 2021 +0800
Fix Class.forName when publish ServiceDefinition (#8894)
---
.../client/metadata/store/InMemoryWritableMetadataService.java | 6 +++++-
.../registry/client/metadata/store/RemoteMetadataServiceImpl.java | 6 +++++-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
index 50e52ab..c50b0f9 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
@@ -21,6 +21,7 @@ import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.config.ConfigurationUtils;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.utils.ClassUtils;
import org.apache.dubbo.common.utils.CollectionUtils;
import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.metadata.InstanceMetadataChangedListener;
@@ -242,7 +243,10 @@ public class InMemoryWritableMetadataService implements WritableMetadataService,
String interfaceName = url.getServiceInterface();
if (StringUtils.isNotEmpty(interfaceName)
&& !ProtocolUtils.isGeneric(url.getParameter(GENERIC_KEY))) {
- Class interfaceClass = Class.forName(interfaceName);
+ ClassLoader classLoader = url.getServiceModel() != null ?
+ url.getServiceModel().getClassLoader() :
+ ClassUtils.getClassLoader();
+ Class interfaceClass = Class.forName(interfaceName, false, classLoader);
ServiceDefinition serviceDefinition = ServiceDefinitionBuilder.build(interfaceClass);
Gson gson = new Gson();
String data = gson.toJson(serviceDefinition);
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java
index 41806ca..eaa1c75 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.registry.client.metadata.store;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.utils.ClassUtils;
import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.metadata.MetadataInfo;
import org.apache.dubbo.metadata.WritableMetadataService;
@@ -136,7 +137,10 @@ public class RemoteMetadataServiceImpl implements ScopeModelAware {
try {
String interfaceName = providerUrl.getServiceInterface();
if (StringUtils.isNotEmpty(interfaceName)) {
- Class interfaceClass = Class.forName(interfaceName);
+ ClassLoader classLoader = providerUrl.getServiceModel() != null ?
+ providerUrl.getServiceModel().getClassLoader() :
+ ClassUtils.getClassLoader();
+ Class interfaceClass = Class.forName(interfaceName, false, classLoader);
FullServiceDefinition fullServiceDefinition = ServiceDefinitionBuilder.buildFullDefinition(interfaceClass,
providerUrl.getParameters());
for (Map.Entry<String, MetadataReport> entry : getMetadataReports().entrySet()) {