This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-spi-extensions.git


The following commit(s) were added to refs/heads/master by this push:
     new ee1fef3  [Dubbo-SPECIFY-ADDRESS]  fix npe when zk push url (#167)
ee1fef3 is described below

commit ee1fef33f8fc5f2ab5868236795fb95f04fbc3af
Author: wxbty <[email protected]>
AuthorDate: Mon Nov 21 16:17:19 2022 +0800

    [Dubbo-SPECIFY-ADDRESS]  fix npe when zk push url (#167)
---
 .../DefaultUserSpecifiedServiceAddressBuilder.java | 40 ++++++++++++++++------
 1 file changed, 30 insertions(+), 10 deletions(-)

diff --git 
a/dubbo-cluster-extensions/dubbo-cluster-specify-address-dubbo3/src/main/java/org/apache/dubbo/rpc/cluster/specifyaddress/DefaultUserSpecifiedServiceAddressBuilder.java
 
b/dubbo-cluster-extensions/dubbo-cluster-specify-address-dubbo3/src/main/java/org/apache/dubbo/rpc/cluster/specifyaddress/DefaultUserSpecifiedServiceAddressBuilder.java
index 65f6d26..7274311 100644
--- 
a/dubbo-cluster-extensions/dubbo-cluster-specify-address-dubbo3/src/main/java/org/apache/dubbo/rpc/cluster/specifyaddress/DefaultUserSpecifiedServiceAddressBuilder.java
+++ 
b/dubbo-cluster-extensions/dubbo-cluster-specify-address-dubbo3/src/main/java/org/apache/dubbo/rpc/cluster/specifyaddress/DefaultUserSpecifiedServiceAddressBuilder.java
@@ -20,8 +20,10 @@ import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.url.component.DubboServiceAddressURL;
 import org.apache.dubbo.common.url.component.PathURLAddress;
+import org.apache.dubbo.common.url.component.ServiceConfigURL;
 import org.apache.dubbo.common.url.component.URLParam;
 import org.apache.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.registry.client.InstanceAddressURL;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Protocol;
@@ -47,24 +49,42 @@ public class DefaultUserSpecifiedServiceAddressBuilder 
implements UserSpecifiedS
 
     @Override
     public <T> URL buildAddress(List<Invoker<T>> invokers, Address address, 
Invocation invocation, URL consumerUrl) {
+
+        boolean useFixed = false;
+        URL template = null;
         if (!invokers.isEmpty()) {
-            URL template = invokers.iterator().next().getUrl();
-            template = template.setHost(address.getIp());
-            if (address.getPort() != 0) {
-                template = template.setPort(address.getPort());
+            template = invokers.iterator().next().getUrl();
+            if (template instanceof InstanceAddressURL) {
+                useFixed = true;
+            } else {
+                if (template.getUrlAddress() == null) {
+                    PathURLAddress urlAddress = new 
PathURLAddress(template.getProtocol(), template.getUsername(), 
template.getPassword(), template.getPath(), address.getIp(), address.getPort());
+                    template = new ServiceConfigURL(urlAddress, 
template.getUrlParam(), template.getAttributes());
+                } else {
+                    template = template.setHost(address.getIp());
+                    if (address.getPort() != 0) {
+                        template = template.setPort(address.getPort());
+                    }
+                }
             }
-            return template;
+
         } else {
+            useFixed = true;
+        }
+
+        if (useFixed) {
             String ip = address.getIp();
             int port = address.getPort();
             String protocol = consumerUrl.getParameter(PROTOCOL_KEY, DUBBO);
             if (port == 0) {
                 port = 
protocolExtensionLoader.getExtension(protocol).getDefaultPort();
             }
-            return new DubboServiceAddressURL(
-                new PathURLAddress(protocol, null, null, 
consumerUrl.getPath(), ip, port),
-                URLParam.parse(""), consumerUrl, null);
+            template = new DubboServiceAddressURL(
+                    new PathURLAddress(protocol, null, null, 
consumerUrl.getPath(), ip, port),
+                    URLParam.parse(""), consumerUrl, null);
         }
+
+        return template;
     }
 
     @Override
@@ -75,7 +95,7 @@ public class DefaultUserSpecifiedServiceAddressBuilder 
implements UserSpecifiedS
         parameters.put(GROUP_KEY, consumerUrl.getGroup());
         String protocol = StringUtils.isEmpty(url.getProtocol()) ? 
consumerUrl.getParameter(PROTOCOL_KEY, DUBBO) : url.getProtocol();
         return new DubboServiceAddressURL(
-            new PathURLAddress(protocol, null, null, consumerUrl.getPath(), 
url.getHost(), url.getPort()),
-            URLParam.parse(parameters), consumerUrl, null);
+                new PathURLAddress(protocol, null, null, 
consumerUrl.getPath(), url.getHost(), url.getPort()),
+                URLParam.parse(parameters), consumerUrl, null);
     }
 }

Reply via email to