|
16 | 16 | */
|
17 | 17 | package org.neo4j.driver.internal.adaptedbolt;
|
18 | 18 |
|
| 19 | +import java.util.Arrays; |
19 | 20 | import java.util.Map;
|
20 | 21 | import java.util.concurrent.CompletionException;
|
21 | 22 | import javax.net.ssl.SSLHandshakeException;
|
|
25 | 26 | import org.neo4j.driver.exceptions.ClientException;
|
26 | 27 | import org.neo4j.driver.exceptions.ConnectionReadTimeoutException;
|
27 | 28 | import org.neo4j.driver.exceptions.DatabaseException;
|
| 29 | +import org.neo4j.driver.exceptions.DiscoveryException; |
28 | 30 | import org.neo4j.driver.exceptions.FatalDiscoveryException;
|
29 | 31 | import org.neo4j.driver.exceptions.Neo4jException;
|
30 | 32 | import org.neo4j.driver.exceptions.ProtocolException;
|
|
40 | 42 | import org.neo4j.driver.internal.bolt.api.exception.BoltClientException;
|
41 | 43 | import org.neo4j.driver.internal.bolt.api.exception.BoltConnectionAcquisitionException;
|
42 | 44 | import org.neo4j.driver.internal.bolt.api.exception.BoltConnectionReadTimeoutException;
|
| 45 | +import org.neo4j.driver.internal.bolt.api.exception.BoltDiscoveryException; |
43 | 46 | import org.neo4j.driver.internal.bolt.api.exception.BoltFailureException;
|
44 | 47 | import org.neo4j.driver.internal.bolt.api.exception.BoltGqlErrorException;
|
45 | 48 | import org.neo4j.driver.internal.bolt.api.exception.BoltProtocolException;
|
@@ -174,8 +177,24 @@ protected Throwable mapGqlCause(BoltGqlErrorException boltGqlErrorException) {
|
174 | 177 | }
|
175 | 178 |
|
176 | 179 | protected Throwable mapServiceUnavailable(BoltServiceUnavailableException boltServiceUnavailableException) {
|
177 |
| - return new ServiceUnavailableException( |
178 |
| - boltServiceUnavailableException.getMessage(), boltServiceUnavailableException); |
| 180 | + var e = Arrays.stream(boltServiceUnavailableException.getSuppressed()) |
| 181 | + .map(throwable -> { |
| 182 | + if (throwable instanceof BoltDiscoveryException boltDiscoveryException) { |
| 183 | + return new DiscoveryException(boltDiscoveryException.getMessage(), boltDiscoveryException); |
| 184 | + } else { |
| 185 | + return null; |
| 186 | + } |
| 187 | + }) |
| 188 | + .toList(); |
| 189 | + |
| 190 | + if (e.isEmpty()) { |
| 191 | + return new ServiceUnavailableException( |
| 192 | + boltServiceUnavailableException.getMessage(), boltServiceUnavailableException); |
| 193 | + } else { |
| 194 | + var ex = new ServiceUnavailableException(boltServiceUnavailableException.getMessage()); |
| 195 | + e.forEach(ex::addSuppressed); |
| 196 | + return ex; |
| 197 | + } |
179 | 198 | }
|
180 | 199 |
|
181 | 200 | private static String extractErrorClass(String code) {
|
|
0 commit comments