diff --git a/eureka-core/src/main/java/com/netflix/eureka/cluster/ReplicationTaskProcessor.java b/eureka-core/src/main/java/com/netflix/eureka/cluster/ReplicationTaskProcessor.java index 961385b31a..fb3d45f4cd 100644 --- a/eureka-core/src/main/java/com/netflix/eureka/cluster/ReplicationTaskProcessor.java +++ b/eureka-core/src/main/java/com/netflix/eureka/cluster/ReplicationTaskProcessor.java @@ -192,14 +192,20 @@ private static boolean isNetworkConnectException(Throwable e) { */ private static boolean maybeReadTimeOut(Throwable e) { do { - if (IOException.class.isInstance(e)) { - String message = e.getMessage().toLowerCase(); - Matcher matcher = READ_TIME_OUT_PATTERN.matcher(message); - if(matcher.find()) { - return true; - } + try { + if (IOException.class.isInstance(e)) { + # !!!this line may occurs NullPointerException in some scenarios. + String message = e.getMessage().toLowerCase(); + Matcher matcher = READ_TIME_OUT_PATTERN.matcher(message); + if(matcher.find()) { + return true; + } + } + e = e.getCause(); + } catch (Exception ex) { + logger.error("Unexpected other exception occurs when check if the income param e is socket read time out exception ", ex); + return false; } - e = e.getCause(); } while (e != null); return false; }