2424import com .tencent .polaris .api .pojo .RetStatus ;
2525import com .tencent .polaris .api .pojo .ServiceEventKey ;
2626import com .tencent .polaris .api .pojo .ServiceKey ;
27- import com .tencent .polaris .api .rpc .BaseEntity ;
28- import com .tencent .polaris .api .rpc .GetAllInstancesRequest ;
29- import com .tencent .polaris .api .rpc .GetHealthyInstancesRequest ;
30- import com .tencent .polaris .api .rpc .GetInstancesRequest ;
31- import com .tencent .polaris .api .rpc .GetOneInstanceRequest ;
32- import com .tencent .polaris .api .rpc .GetResourcesRequest ;
33- import com .tencent .polaris .api .rpc .GetServiceContractRequest ;
34- import com .tencent .polaris .api .rpc .GetServiceRuleRequest ;
35- import com .tencent .polaris .api .rpc .InstanceDeregisterRequest ;
36- import com .tencent .polaris .api .rpc .InstanceHeartbeatRequest ;
37- import com .tencent .polaris .api .rpc .InstanceRegisterRequest ;
38- import com .tencent .polaris .api .rpc .ServiceCallResult ;
39- import com .tencent .polaris .api .rpc .UnWatchServiceRequest ;
40- import com .tencent .polaris .api .rpc .WatchServiceRequest ;
27+ import com .tencent .polaris .api .rpc .*;
4128import com .tencent .polaris .api .utils .CollectionUtils ;
4229import com .tencent .polaris .api .utils .StringUtils ;
4330import com .tencent .polaris .client .util .CommonValidator ;
31+ import com .tencent .polaris .logging .LoggerFactory ;
32+ import org .slf4j .Logger ;
4433
45- import java .util .Objects ;
4634import java .util .Set ;
4735
4836/**
5341 */
5442public class Validator {
5543
44+ private static final Logger LOG = LoggerFactory .getLogger (Validator .class );
45+
5646 private static final int MAX_PORT = 65536 ;
5747
5848 /**
@@ -164,7 +154,7 @@ public static void validateServiceCallResult(ServiceCallResult serviceCallResult
164154 throw new PolarisException (ErrorCode .API_INVALID_ARGUMENT , "delay can not be less than 0" );
165155 }
166156 if (!RetStatus .RetReject .equals (serviceCallResult .getRetStatus ())) {
167- validateHostPort (serviceCallResult .getHost (), serviceCallResult .getPort ());
157+ validateServiceCallResultHostPort (serviceCallResult .getHost (), serviceCallResult .getPort ());
168158 }
169159 }
170160
@@ -187,6 +177,29 @@ private static void validateHostPort(String host, Integer port) throws PolarisEx
187177 }
188178 }
189179
180+ /**
181+ * 校验服务请求端口信息。某些场景下端口号为0,例如Dubbo的本地调用。
182+ *
183+ * @param host
184+ * @param port
185+ * @throws PolarisException
186+ */
187+ private static void validateServiceCallResultHostPort (String host , Integer port ) throws PolarisException {
188+ if (StringUtils .isBlank (host )) {
189+ throw new PolarisException (ErrorCode .API_INVALID_ARGUMENT , "host can not be blank" );
190+ }
191+ if (port == null ) {
192+ throw new PolarisException (ErrorCode .API_INVALID_ARGUMENT , "port can not be null" );
193+ }
194+ if (port == 0 ) {
195+ LOG .warn ("port is 0 with host {}. Please check if it meets expectations." , host );
196+ }
197+ if (port < 0 || port >= MAX_PORT ) {
198+ throw new PolarisException (
199+ ErrorCode .API_INVALID_ARGUMENT , "port value should be in range [0, 65536)." );
200+ }
201+ }
202+
190203 /**
191204 * 校验实例注册请求
192205 *
0 commit comments