From f64d794017f851db19ec8663ea2fd709387bcfeb Mon Sep 17 00:00:00 2001 From: "ganyu.gy" Date: Thu, 7 Jan 2021 16:00:30 +0800 Subject: [PATCH] Fix bug: NPE Exception. https://github.com/apache/dubbo/issues/7079 --- .../dubbo/registry/DubboCloudRegistry.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboCloudRegistry.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboCloudRegistry.java index 7639e21aa..be24b11fb 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboCloudRegistry.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/DubboCloudRegistry.java @@ -290,7 +290,7 @@ public class DubboCloudRegistry extends FailbackRegistry { .map(templateURL -> templateURL.removeParameter(PID_KEY)) .map(templateURL -> { String protocol = templateURL.getProtocol(); - int port = repository.getDubboProtocolPort(serviceInstance, + Integer port = repository.getDubboProtocolPort(serviceInstance, protocol); if (Objects.equals(templateURL.getHost(), host) && Objects.equals(templateURL.getPort(), port)) { // use @@ -300,15 +300,27 @@ public class DubboCloudRegistry extends FailbackRegistry { return templateURL; } - URLBuilder clonedURLBuilder = from(templateURL) // remove the - // parameters from - // the template - // URL - .setHost(host) // reset the host - .setPort(port); // reset the port + if (port == null) { + if (logger.isWarnEnabled()) { + logger.warn( + "The protocol[{}] port of Dubbo service instance[host : {}] " + + "can't be resolved", + protocol, host); + } + return null; + } + else { + URLBuilder clonedURLBuilder = from(templateURL) // remove the + // parameters from + // the template + // URL + .setHost(host) // reset the host + .setPort(port); // reset the port + + return clonedURLBuilder.build(); + } - return clonedURLBuilder.build(); - }).forEach(clonedExportedURLs::add); + }).filter(Objects::nonNull).forEach(clonedExportedURLs::add); }); return clonedExportedURLs; }